|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2021 [복사]
enq: US - Contention
발생 시점: 서버 프로세스가 언두 세그먼트를 획득하는 시점에서 온라인 상태의 언두 세그먼트가 없을 때
원인: 트렉잭션의 증가에 따라 기존에 사용하던 언두 세그먼트만으로 증가된 트랜잭션을 감당할 수 없게되어 새로운 언두 세그먼트를 할당 해야할 경우, 오프라인 상태의 언두 세그먼트를 온라인 시키거나 새롭게 생성 해야 합니다. SMON실행
모든 트랜잭션의 시작은 (Parsing 작업제외) 언두 세그먼트를 할당 받아야 하는데 이 때 언두 세그먼트가 부족하다면 오프라인 => 온라인, 생성해야 합니다.
이때 offline=>online,onlin => offline, 생성 작업을 수행하는 프로세서는 US Lock를 획득해야 하는데, 트랜잭션이 과도하게 많은 경우 서버 프로세서는 US Look를 획득하기 위해서 기다리게 됩니다.
즉,enq: US- Contention은 트랜잭션 증가에 맞는 충분한 언두 세그먼트를 확보하지 못한 상태에서 언두 세그먼트를 할당 받기 위한 작업 중 US Look를 획듣하기 위해서 대기하는 것입니다.
해결책 : 위에서 설명한 바와 같이 enq: US - Cotention은 트랜젝션 증가에 맞는 충분한 언두 세그먼트를 확보하지 못해서 발생한 것이므로 언두 세그먼트를 충분한 상태로 유지할 수 있도록 하면 될 것입니다.
SMON이 온라인으로 변경한 언두 세그먼트를 오프라인으로 변경하지 않도록 하면 될 것입니다.
이를 적용 할 시킬 수 있는 것이 10511 Event
event="10511 trace name context forever, level 2" -- restart 필요
-- 온라인 상태 적용 가능, restart시 1개의 인스턴스에 10개를 제회한 모든 언드 세그먼트 오프라인
oradebug setospid<smon_ospid>
oradebug enent 10511 trace name context forever, level 1
oradebug setmypid
-- oradebug를 이용한 방법의 보완책.
alter systme set "_smu_debug_mode"=4
alter rollback segment <segment_name> online;
alter system set "_smu_debug_mode"=0
|
Hit : 9107 Date : 2012/06/21 04:34
|