Enq: US - contention

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] Basic Info

enq: US - contention 대기이벤트에 대해 설명하기 전에 AUM(Automatic Undo Management)을 사용할 경우 언두 세그먼트가 온라인 또는 오프라인되는 시점이 언제인지를 이해할 필요가 있다. AUM의 경우 RBU(Rollback Segment Management)와는 달리 언두 세그먼트의 관리가 오라클에 의해 자동화된다. AUM을 사용하는 경우 언두 세그먼트가 온라인 또는 오프라인되는 시점은 다음과 같다.

1. 인스턴스 기동: 오라클의 기동(Startup)은 크게 세 개의 과정으로 나누어진다. 인스턴스 시작(Startup the instance), 인스턴스 마운트(Mount the Instance), 데이터베이스 오픈(Open the database)의 과정으로 나누어 지며, 데이터베이스를 오픈(Open)하는 과정에서 언두 세그먼트를 온라인시킨다.

2. alter system set undo_tablespace = xxxx 를 통해 언두 테이블스페이스(Undo Tablespace)를 변경할 때 기존 언두 세그먼트들을 오프라인시키고, 새로운 언두 세그먼트들을 온라인시킨다.

3. 트랜잭션의 증가와 감소: 트랜잭션의 양이 빠른 속도로 증가해서 기존에 사용하던 언두 세그먼트만으로는 트랜잭션을 감당할 수 없을 때 새로운 오프라인 상태의 언두 세그먼트를 온라인시키거나 새로운 언두 세그먼트를 생성한다. 간단하게 이를 확인하려면 초기 사이즈가 작은 언두 테이블스페이스를 생성해서 트랜잭션이 늘어남에 따라 온라인 상태의 언두 세그먼트의 수가 늘어나는 것을 확인하면 된다. 일정 시간 트랜잭션이 없거나 줄어들면 오라클은 언두 세그먼트를 오프라인시킨다. 이러한 작업은 SMON에 의해 이루어진다. 오라클 9.2.0.4 이전 버전에서는 장시간 사용되지 않는 언두 세그먼트를 드롭(Drop)시키는 경우도 있다고 알려져 있다.

이처럼 언두 세그먼트를 온라인 또는 오프라인시키는 과정을 동기화하기 위해 해당 작업을 수행하는 서버 프로세스나 백그라운드 프로세스는 US 락을 획득해야 한다. US 락은 언두 세그먼트마다 하나씩 할당되며, ID1=Undo Segment#이다. US 락을 획득하는 과정에서 경합이 발생하면 enq: US - contention 이벤트를 대기하게 된다. 서버 프로세스는 트랜잭션을 시작하는 시점에 언두 세그먼트를 할당 받아야 하는데, 사용 가능한 언두 세그먼트가 존재하지 않을 경우 언두 세그먼트를 신규로 생성하거나 오프라인 상태의 언두 세그먼트를 온라인시켜야 한다. 이 작업이 이루어지는 동안 서버 프로세스는 US 락을 획득하기 위해 대기함으로써 언두 세그먼트가 확보되기를 기다리게 된다.

트랜잭션의 변동이 심한 경우에 언두 세그먼트를 온라인시키는 작업으로 인해 US 락 경합이 광범위하게 발생할 수 있다. 오라클이 최초에 구동된 후 온라인 상태의 언두 세그먼트의 개수가 적은 상태에서 트랜잭션이 갑자기 증가하는 경우나 일정 시간 트랜잭션이 발생하지 않아 기존의 언두 세그먼트가 오프라인된 상태에서 갑자기 트랜잭션이 증가하는 경우, 사용자 세션들은 언두 세그먼트가 온라인 될 때까지 기다려야 하며 이 과정에서 US 락 경합에 의한 대기현상이 발생하게 된다. 언두 세그먼트가 온라인될 경우 alert 로그 파일에 다음과 같은 정보가 기록된다.

Thu Feb 23 09:24:11 2006
Undo Segment 22 Onlined
Thu Feb 23 09:24:11 2006
Undo Segment 23 Onlined
Thu Feb 23 09:24:11 2006
Undo Segment 24 Onlined
Thu Feb 23 09:24:12 2006
Undo Segment 25 Onlined
Thu Feb 23 09:24:12 2006
Undo Segment 26 Onlined
…

[편집] Parameter & Wait Time

[편집] Wait Parameters

  • P1 : Enqueue 정보
  • P2 : Undo Segment#
  • P3 : 0

[편집] Wait Time

enqueue 대기이벤트와 동일하다. 최대 3초까지 기다린다. 만일 US 락을 획득하기 못하면 획득할 때까지 대기한다.

[편집] Check Point & Solution

[편집] 10511 Event의 적용

보통의 시스템에서는 갑자기 많은 수의 언두 세그먼트를 온라인시키는 경우가 많지 않으므로 US 락 경합은 일반적으로 자주 발생하지는 않는다. 하지만 시스템의 속성상 트랜잭션의 변동량이 크고, 이로 인해 US 락 경합이 계속해서 발생한다면 다음과 같이 10511 이벤트를 수행하도록 지정한다. 10511 이벤트는 SMON이 언두 세그먼트를 오프라인시키는 기능을 수행하지 않도록 하는 역할을 한다.

event="10511 trace name context forever, level 2" 

오라클을 재기동하면, 한번 온라인된 언두 세그먼트는 다시는 오프라인 상태로 변경되지 않는다. 따라서 언두 세그먼트를 온라인하는데서 오는 US 락 경합현상도 발생하지 않게 된다.

오라클을 재기동하지 않고 위의 옵션을 온라인으로 적용시키려면 ordebug 툴을 이용해야 한다. oradebug 툴에서 다음과 같은 명령을 수행한다.

oradebug setospid <smon_ospid>
oradebug event 10511 trace name context forever, level 1
oradebug setmypid 

그런데 위와 같은 방법의 문제점은 오라클을 재기동할 경우에는 1개의 인스턴스에 10개를 제외한 모든 언두 세그먼트들은 다시 오프라인된 다는 것이다. 아래와 같은 방법을 이용하여 오라클 재기동 직후에 모든 언두 세그먼트를 수동으로 온라인시키는 것이 가능하다.

alter system set "_smu_debug_mode"=4
alter rollback segment <segment_name> online;
alter system set "_smu_debug_mode"=0

[편집] Event Tip

[편집] Analysis Case

[편집] undo segment online으로 인한 Enq: US - Contention 발생현상

[편집] 1. 장애시점의 분석

Alert.log 파일로 장애시점을 확인해보면, undo segment online과 신규 생성이 급격히 이루어지고 있다.

9시 24분부터 30개의 undo segment가 온라인 되고, 11개의 undo segment가 신규 생성되었다.

Thu Feb 23 09:24:11 2006 Undo Segment 22 Onlined
Thu Feb 23 09:24:11 2006 Undo Segment 23 Onlined
Thu Feb 23 09:24:11 2006 Undo Segment 24 Onlined
Thu Feb 23 09:24:12 2006 Undo Segment 25 Onlined
Thu Feb 23 09:24:12 2006 Undo Segment 26 Onlined
Thu Feb 23 09:24:12 2006 Undo Segment 27 Onlined
Thu Feb 23 09:24:12 2006 Undo Segment 28 Onlined
Thu Feb 23 09:24:12 2006 Undo Segment 29 Onlined
Thu Feb 23 09:24:13 2006 Undo Segment 30 Onlined
Thu Feb 23 09:24:13 2006 Undo Segment 31 Onlined
Thu Feb 23 09:25:17 2006 Undo Segment 32 Onlined
Thu Feb 23 09:30:19 2006 Undo Segment 39 Onlined
Thu Feb 23 09:30:31 2006 Undo Segment 40 Onlined
Thu Feb 23 09:30:48 2006 Undo Segment 41 Onlined
Thu Feb 23 09:31:02 2006 Undo Segment 42 Onlined
Thu Feb 23 09:31:14 2006 Undo Segment 43 Onlined
Thu Feb 23 09:31:23 2006 Undo Segment 44 Onlined
Thu Feb 23 09:31:24 2006 Undo Segment 45 Onlined
Thu Feb 23 09:31:34 2006 Undo Segment 46 Onlined
Thu Feb 23 09:31:40 2006 Undo Segment 47 Onlined
Thu Feb 23 09:31:41 2006 Undo Segment 48 Onlined
Thu Feb 23 09:31:42 2006 Undo Segment 49 Onlined
Thu Feb 23 09:31:45 2006 Undo Segment 50 Onlined
Thu Feb 23 09:31:46 2006 Undo Segment 51 Onlined
Thu Feb 23 09:31:47 2006 Undo Segment 52 Onlined
Thu Feb 23 09:31:56 2006 Created Undo Segment _SYSSMU67$ Undo Segment 67 Onlined
Thu Feb 23 09:31:57 2006 Created Undo Segment _SYSSMU68$ Undo Segment 68 Onlined
Thu Feb 23 09:31:58 2006 Created Undo Segment _SYSSMU69$ Undo Segment 69 Onlined
Thu Feb 23 09:31:58 2006 Created Undo Segment _SYSSMU70$ Undo Segment 70 Onlined
Thu Feb 23 09:31:59 2006 Created Undo Segment _SYSSMU71$ Undo Segment 71 Onlined
Thu Feb 23 09:32:00 2006 Created Undo Segment _SYSSMU72$  
Thu Feb 23 09:32:01 2006 Created Undo Segment _SYSSMU73$
Thu Feb 23 09:32:01 2006 Created Undo Segment _SYSSMU74$
Thu Feb 23 09:32:02 2006 Created Undo Segment _SYSSMU75$
Thu Feb 23 09:32:03 2006 Created Undo Segment _SYSSMU76$
Thu Feb 23 09:32:03 2006 Created Undo Segment _SYSSMU77$

Lock Tree 화면으로 장애 초기시점을 살펴보면, Enqueue Wait이 발생하고 있으며 US 락임을 알 수 있다.

그림:6_1_1.jpg

Lock Tree로 발생된 US Enqueue를 추적하면, 9시 30분 부터 9시 54분까지 최대 1400초 대기한다. Alert log file에 나타난 Undo segment의 online 작업이 US lock의 직접적인 원인임을 알 수 있다.

UNDO와 관련된 파라미터 값을 확인해 보면, 현재, undo_management=AUTO로, AUM 방식을 사용하고 있다.

이 경우, Transaction의 변동이 심하면 Undo Segment를 online 시키는 작업으로 US lock 경합이 발생할 수 있다.

그림:6_1_2.jpg

Transaction의 변동이 심한 원인을 찾기 위해 장애 초기 시점인 9시 20분 이후의 지표들의 추이를 확인해보면, 이 때부터 많은 사용자들이 갑자기 접속을 시도함을 알 수 있다.(logons current 지표)

Oracle은 Transaction 양이 빠른 속도로 증가해서 기존에 사용하던 Undo Segment 만으로는 transaction을 감당할 수 없을 때, 새로운 Undo Segment를 생성하거나 Offline 상태의 Undo Segment를 활성화 한다.

일정 시간 Transaction이 없거나 줄어들면 Oracle은 Undo Segment를 Offline 하는데, 이 작업은 SMON이 수행한다.

신규세션이 급격히 증가하여 Transaction의 변동이 심한 경우에 undo Segment를 online 시키는 작업으로 인해 US Lock 경합이 발생할 수 있다.

특히, Oracle이 최초에 구동된 후 Online undo Segmnet의 개수가 적은 상태에서 Transaction이 갑자기 증가하거나, 일정기간 Transaction이 발생하지 않아, 기존의 Undo Segment가 Offline된 상태에서 갑자기 transaction이 증가하는 경우, 사용자 세션들은 US Lock을 획득하기 위해 대기함으로써 Undo Segment가 Online되기를 기다리게 된다.

[편집] 2. 향후 조치사항

10511 Event는 SMON이 Undo segment를 Offline시키는 기능을 수행하지 않도록 하는 역할을 한다.

Event = “10511 trace name context forever, level 2”

Oracle을 재기동하면, 일단 한번 Online 된 Undo Segment는 다시는 Offline 상태로 변경되지 않는다. 따라서, Undo Segment의 Online에 따른 US Lock 경합현상도 발생하지 않게 되므로, 급격히 사용자가 몰려서 US Enqueue 경합이 자주 발생하는 시스템의 경우, 적용해 주는 것이 권장된다.