SMON 기능 소개 1
모 르 는 SMON 기능 알 아 보기 (1): 임시 세그먼트 청소
SMON (system monitor process) 시스템 이 배경 프로 세 스 를 감시 하고 시스템 cleanup process 라 고도 부 릅 니 다. 이렇게 부 르 는 이 유 는 많은 청소 (cleanup) 임 무 를 수행 하기 때 문 입 니 다.Oracle 기초 지식 을 배 운 기술자 라면 이 background process 의 기능 에 대해 어느 정도 알 고 있 을 것 이다.
한때 SMON 기능 에 대한 이해 정 도 는 DBA 이론 지식 을 평가 하 는 중요 한 요소 로 여 겨 졌 으 나 아직도 많은 회사 들 이 DBA 면접 에서 SMON 이 어떤 기능 을 가지 고 있 는 지 물 어 본다.우선 이것 은 개방 적 인 문제 입 니 다. 면접 자가 다 맞 추 기 를 바라 지 않 습 니 다.이 어 구체 적 인 기능 에 대해 서도 말 해 면접 자의 지식 깊이 를 알 아 볼 수 있다. 물론 멀 었 다.
우리 가 잘 아 는 SMON 은 부지런 한 사람 으로 시스템 등급 의 임 무 를 수행 하 는 일 을 맡 고 있다.PMON (Process Monitor) 백 스테이지 프로 세 스 와 달리 SMON 은 전체 시스템 과 관련 된 업 무 를 더 많이 수행 하고 이 로 인해 이름 모 를 '힘 든 일' 을 할 수 있 습 니 다. 시스템 에 이런 '쓰레기 임무' 가 자주 발생 하면 SMON 은 바 쁠 수 있 습 니 다.따라서 10g 에서 SMON 은 조금 게 으 르 게 변 했다. 만약 에 단기간 에 너무 많은 업무 알림 (SMON: system monitor process posted) 을 받 으 면 너무 바 쁘 지 않도록 소극 적 으로 태업 할 수 있다 (SMON: Posted too frequently, trans recovery disabled). 그 다음 에 상세 하 게 소개 할 것 이다.
SMON 의 주요 역할 은:
1. 임시 세그먼트 청소 (SMON cleanup 임시 세그먼트)
촉발 장면
많은 사람들 이 여기 서 말 하 는 임시 세그먼트 temporary segments 를 잘못 이 해 했 습 니 다. temporary segments 는 temporary tablespace 임시 표 공간의 정렬 임시 세그먼트 (sort segment) 를 말 합 니 다.사실 이 임시 구간 은 영구 표 공간 (permanent tablespace) 의 임시 구간 을 말 합 니 다. 물론 임시 표 공간의 temporary segments 도 SMON 에서 청소 (cleanup) 하지만 이 청 소 는 데이터베이스 인 스 턴 스 가 시 작 될 때 만 발생 합 니 다 (intance startup).
영구 표 공간 에 도 임시 세그먼트 가 존재 합 니 다. 예 를 들 어 우리 가 특정한 영구 표 공간 에서 create table / index 등 DDL 명령 을 사용 하여 표 / 색인 을 만 들 때 서비스 프로 세 스 는 처음에 지정 한 영구 표 공간 에 충분 한 구간 (Extents) 을 분배 합 니 다. 이 구간 들 은 명령 이 끝나 기 전에 임시 (Temporary Extents) 입 니 다.표 / 색인 이 완전히 완 성 될 때 까지 이 temporary segment 를 permanent segment 로 변환 합 니 다.
또한 drop 명령 을 사용 하여 한 단락 을 삭제 할 때 이 단락 을 먼저 temporary segment 로 변환 한 다음 에 이 temporary segment (DROP object converts the segment to temporary and then cleans up the temporary segment) 를 청소 합 니 다.일반적인 상황 에서 청 소 는 누가 temporary segment 를 만 들 고 누가 청 소 를 책임 지 는 지 원칙 에 따른다.다시 말 하면 서비스 프로 세 스 rebuild index 로 인해 발생 하 는 temporary segment 는 rebuild 가 완 료 된 후에 서비스 프로 세 스 가 스스로 청 소 를 책임 져 야 한 다 는 것 이다.서비스 프로 세 스 가 temporary segment 를 성공 적 으로 정리 하기 전에 의외로 종료 되 거나 서비스 프로 세 스 가 작업 과정 에서 일부 ORA - 오류 로 인해 문 구 를 실패 하 게 되면 SMON 은 temporary segment 의 청 소 를 완성 하 라 는 요 구 를 받는다.
영구 표 공간의 temporary segment 에 대해 서 는 SMON 이 3 분 에 한 번 씩 청소 합 니 다 (전 제 는 post 를 받 는 것 입 니 다). SMON 이 너무 바 쁘 면 temporary segment 가 장기 적 으로 정리 되 지 않 을 수 있 습 니 다.임시 segment 가 오랫동안 정리 되 지 않 으 면 전형 적 인 문 제 는 rebuild index online 이 실패 한 후에 후속 으로 실 행 된 rebuild index 명령 이 요구 하기 전에 발생 한 임시 segment 가 cleanup 되 었 습 니 다. cleanup 가 완성 되 지 않 으 면 계속 기 다 려 야 합 니 다.10gR 2 에서 dbms 를 사용 할 수 있 습 니 다.repair.online_index_clean 은 온라인 index rebuild 에 남 겨 진 문 제 를 수 동 으로 정리 합 니 다.
The dbms_repair.online_index_clean function has been created to cleanup online index rebuilds.
Use the dbms_repair.online_index_clean function to resolve the issue.
Please note if you are unable to run the dbms_repair.online_index_clean function it is due to the fact
that you have not installed the patch for Bug 3805539 or are not running on a release that includes this fix.
The fix for this bug is a new function in the dbms_repair package called dbms_repair.online_index_clean,
which has been created to cleanup online index [[sub]partition] [re]builds.
New functionality is not allowed in patchsets;
therefore, this is not available in a patchset but is available in 10gR2.
Check your patch list to verify the database is patched for Bug 3805539
using the following command and patch for the bug if it is not listed:
opatch lsinventory -detail
Cleanup after a failed online index [re]build can be slow to occurpreventing subsequent such operations
until the cleanup has occured.
이어서 우 리 는 실천 을 통 해 smon 이 영구 표 공간의 temporary segment 를 어떻게 정리 하 는 지 살 펴 보 자.
10500 smon ,
SQL> alter system set events '10500 trace name context forever,level 10';
System altered.
create table , Temorary Extents
SQL> create table smon as select * from ymon;
DBA_EXTENTS ,
SQL> SELECT COUNT(*) FROM DBA_EXTENTS WHERE SEGMENT_TYPE='TEMPORARY';
COUNT(*)
----------
117
create table session, smon trc :
*** 2011-06-07 21:18:39.817
SMON: system monitor process posted msgflag:0x0200 (-/-/-/-/TMPSDROP/-/-)
*** 2011-06-07 21:18:39.818
SMON: Posted, but not for trans recovery, so skip it.
*** 2011-06-07 21:18:39.818
SMON: clean up temp segments in slave
SQL> SELECT COUNT(*) FROM DBA_EXTENTS WHERE SEGMENT_TYPE='TEMPORARY';
COUNT(*)
----------
0
smon slave temporary segment
영구 표 공간의 임시 구간 과 달리 성능 을 고려 하여 임시 표 공간의 Extents 는 조작 (operations) 이 완 료 된 후 즉시 방출 되 고 반환 되 지 않 습 니 다.반면 이 Temporary Extents 는 다음 정렬 작업 에 사용 할 수 있 도록 사용 가능 한 것 으로 표 시 됩 니 다.SMON 은 이 Temporary segments 를 청소 합 니 다. 그러나 이 청 소 는 인 스 턴 스 가 시 작 될 때 만 발생 합 니 다 (instance startup).
For performance issues, extents in TEMPORARY tablespaces are not released or deallocated( )
once the operation is complete.Instead, the extent is simply marked as available for the next sort operation.
SMON cleans up the segments at startup.
A sort segment is created by the first statement that used a TEMPORARY tablespacefor sorting, after startup.
A sort segment created in a TEMPOARY tablespace is only released at shutdown.
The large number of EXTENTS is caused when the STORAGE clause has been incorrectly calculated.
현상.
다음 조 회 를 통 해 데이터베이스 에 있 는 Temporary Extent 의 총 수 를 알 수 있 습 니 다. 일정 시간 동안 총 수 를 비교 할 수 있 습 니 다. 감소 하면 SMON 이 Temporary segment 를 청소 하고 있다 는 것 을 설명 합 니 다.
SELECT COUNT(*) FROM DBA_EXTENTS WHERE SEGMENT_TYPE='TEMPORARY';
v $sysstat 보기 의 'SMON posted for dropping temp segment' 이벤트 통계 정 보 를 통 해 SMON 이 청소 요 구 를 받 은 상황 을 알 수 있 습 니 다.
SQL> select name,value from v$sysstat where name like '%SMON%';
NAME VALUE
---------------------------------------------------------------- ----------
total number of times SMON posted 8
SMON posted for undo segment recovery 0
SMON posted for txn recovery for other instances 0
SMON posted for instance recovery 0
SMON posted for undo segment shrink 0
SMON posted for dropping temp segment 1
또한 청소 과정 에서 SMON 은 Space Transacton (ST) 대기 열 자 물 쇠 를 장기간 보유 합 니 다. 다른 세 션 은 ST 자 물 쇠 를 얻 지 못 해 시간 초과 로 ORA - 01575 오류 가 발생 할 수 있 습 니 다.
01575, 00000, "timeout waiting for space management resource"
// *Cause: failed to acquire necessary resource to do space management.
// *Action: Retry the operation.
어떻게 SMON 이 임시 구간 을 청소 하 는 것 을 금지 합 니까?
진단 이벤트 이벤트 = '10061 trace name context forever, level 10 ′ 를 설정 하여 SMON 을 사용 하지 않 고 임시 세그먼트 (disable SMON from cleaning temp segments) 를 청소 할 수 있 습 니 다.
alter system set events '10061 trace name context forever, level 10';
관련 진단 사건
10061 사건 을 제외 하고 10500 사건 으로 smon 의 post 정 보 를 추적 할 수 있 습 니 다. 구체 적 인 사건 설정 방법 은 < 이벤트: 10500 "turn on traces for SMON > 참조.
모 르 는 SMON 기능 알 아 보기 (2): 남 은 구간 통합
SMON 의 역할 은 빈 구간 통합 (coalesces free extent) 도 포함한다.
촉발 장면
초기 Oracle 은 DMT 사전 관리 표 공간 을 사용 하여 현재 의 LMT 로 컬 관리 방식 과 달리 DMT 에서 FET $와 UET $2 장의 사전 기본 표 재 귀적 작업 을 통 해 구간 을 관리 합 니 다. SMON 은 5 분 마다 (SMON wakes 자체 every 5 minutes and checks for tablespace with default pctincrease! = 0)기본 저장 인자 인 pctincrease 가 0 과 같 지 않 은 사전 관리 표 공간 을 자발적으로 검사 합 니 다. 이 청소 작업 은 DMT 를 위 한 것 이 고 LMT 는 통합 할 필요 가 없습니다. SMON 은 이러한 DMT 표 공간의 연속 적 으로 인접 한 빈 Extents 에 대해 coalesce 를 실시 합 니 다.더 큰 빈 Extent 로 통합 하 는 작업 은 SMON 이 FET $사전 기본 표를 유지 해 야 한 다 는 것 을 의미 합 니 다.
현상.
다음 조 회 는 데이터베이스 에 남아 있 는 Extents 의 총 수 를 검사 할 수 있 습 니 다. 이 총 수 는 지속 적 으로 감소 하고 있다 면 SMON 이 coalesce free space 에 있 음 을 설명 합 니 다.
SELECT COUNT(*) FROM DBA_FREE_SPACE;
통합 구간 에서 SMON 은 ST (Space Transaction) 대기 열 잠 금 을 배타 적 으로 (exclusive) 보유 해 야 합 니 다. 다른 세 션 에 서 는 ST 잠 금 을 얻 지 못 해 대기 시간 이 초과 되 어 ORA - 01575 오류 가 발생 할 수 있 습 니 다. 또한 SMON 은 번 거 로 운 coalesce 작업 에 100% 의 CPU 를 소모 할 수 있 습 니 다.
어떻게 SMON 이 남 은 구간 을 합병 하 는 것 을 금지 합 니까?
진단 이벤트 이벤트 = '10269 trace name context forever, level 10 ′ 설정 을 통 해 SMON 의 빈 구간 통합 을 비활성화 할 수 있 습 니 다 (Don' t do coalesces of free space in SMON)
10269, 00000, "Don't do coalesces of free space in SMON"
// *Cause: setting this event prevents SMON from doing free space coalesces
alter system set events '10269 trace name context forever, level 10';
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.