레이블이 Latch&Lock인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Latch&Lock인 게시물을 표시합니다. 모든 게시물 표시

2009년 7월 26일 일요일

Event 정의

Event 종류

Event 정의

Latch free

Latch를 획득하는데 실패한 후 Latch를 획득할 때까지 기다리는 이벤트

Spin을 수행하는 경우에는 대기 상태이지만 CPU를 사용

Enqueue

Enqueue Lock을 획득하는데 실패한 후 Enqueue Lock을 획득할 때까지 대기하는 Event

Row cache lock

Row Cache Lock을 획득하는데 실패한 후, 획득할 때까지 대기하는 Event

Row Cache Lock을 획득하는 과정에서 경합이 발생함을 의미

Enq:SQ - contention

SQ Lock을 획득하는데 실패한 후 SQ Lock을 획득할 때까지 기다리는 Event

SQ Lock을 획득하는 과정에서 경합이 발생함을 의미

Latch: library cache

Library cache chain을 탐색하기 위해 library cache latch를 획득할 때까지 대기하는 Event

대기 발생 사유 : Hard Parsing 및 Soft Parsing 과다

Latch: shared pool

Shared Pool의 Free Chunk를 탐색하기 위해 shared pool latch를 획득할 때까지 대기하는 Event

대기 발생 사유 : Hard Parsing에 의한 빈번한 Free Chunk 요청

Latch: chache buffer chains

Cache Buffer Chain을 탐색하기 위해 cache buffers chains latch를 획득하고자 대기하는 Event

대기 발생 사유 : 여러 세션이 동시에 동일 cache buffers chains latch를 Exclusive mode로 요청

Latch: cache buffers LRU chain

LRU List를 탐색하기 위해 cache buffers LRU chain latch를 획득하기 위해 대기하는 Event

대기 발생 사유 : Memory에 올라오지 않은 Block을 읽고자 할 경우 Free Buffer를 할당받기 위해 LRU list를 탐색, 많은 세션이 동시에 Free Buffer를 Scan하면 Latch 경합 유발

DBWR이 Dirty Buffer를 파일에 기록하기 위해 LRUW 리스트를 탐색하고 해당 Buffer를 LRU List로 이동 시

Buffer busy waits

Buffer가 Busy(Incompatible)하여 Buffer Lock을 획득하지 못하여 대기하는 이벤트

대기 발생 사유 : Buffer에 Cache된 Block의 내용을 읽거나 수정할 경우 Buffer Lock을 획득해야 함

동시에 여러 Session이 Buffer내의 다른 Record를 수정하고자 하는 경우 Row Level Lock 경합은 발생하지 않지만 Buffer Lock 경합은 발생 가능

Read by other session

다른 Session에 의해 Disk로 부터 Loading 중이 Block을 읽는 경우 Loading 작업이 끝나기를 기다리는 Event

대기 발생 사유 : 원하는 Block을 Buffer에서 찾지 못한 경우 Buffer Lock을 Exclusive Mode로 획득 후 해당 Block을 Disk에서 Read.

따라서 동시 select 상황에서 buffer lock 경합 발생

Write complete waits

DBWR에 의해 기록중이 Block을 사용하고자 하는 Process들이 기록이 완료될 때까지 대기하는 Event

대기 발생 사유 : Session은 DBWR Process에 의해 Disk로 기록되고 있는 Block을 읽거나 변경할 수 없음

Block 기록 작업이 끝날 때까지 write complete waits 이벤트를 대기

db file sequential read

I/O System에 Single Block I/O를 요청하고 응답이 오기를 기다리는 Event

db file scattered read

I/O System에 Multi Block I/O를 요청하고 응답이 오기를 기다리는 Event

발생 사유 : 불필요한 Full scan, 비효율적인 segment 공간, I/O System 성능 저하

direct path read/write

I/O System에 Data File에 대한 Direct Path I/O요청 후 응답이 오기를 기다리는 Event

발생 사유 : Parallel Execution - Datafile에 대한 Direct Path I/O는 대부분 Parallel Execution 과정에서 발생

direct path read/write temp

I/O System에 Sort Segment에 대한 Direct Path I/O요청 후 응답이 오기를 기다리는 Event

발생 사유 : Sort 작업 수행 도중 Disk에 Data를 읽고 쓰는 경우

 

2009년 7월 25일 토요일

V$lock

컬럼명

설명

SID

락을 보유중이거나 요청 중인 세션의 아이디. LMODE > 0 이면 락을 보유중인 세션이고, REQUEST > 0 이면 락을 요청 중인 세션이다.

TYPE

Enqueue 락의 리소스 타입(: TM, TX, UL, US, CI, TC, ...)

ID1

리소스 아이디1

ID2

리소스 아이디2. <TYPE-ID1-ID2> 락이 보호하는 리소스 구분자가 된다.

LMODE

락을 보유하고 있는 경우의 모드(1~6.  모드 참조)

REQUEST

락을 요청중인 경우의 모드(1~6.  모드 참조)

CTIME

현재의 모드가 허용된 이후의 시간(second). , 락을 보유하거나 요청한 이후부터의 시간

BLOCK

현재의 락이 다른 락을 블로킹하고 있는지의 여부. 1 = 다른 락을 블로킹중, 0 = 다른 락을 블로킹하지 않음

   

※ 참고질의

S SYS> select sid,serial# from v$session where sid in(select sid from v$lock where block>0); <--- lock 찾기(가해자)

S SYS> select BLOCKING_SESSION,username,sid from v$session where BLOCKING_SESSION is not null;

   

BLOCKING_SESSION USERNAME SID

---------------- ------------------------------------------------------------ ----------

113 SCOTT 129

113 SCOTT 158

   

▣ 락 1개 걸렸을 경우

   

락 2개 걸렸을 경우

Lock관련 view

V$LOCK

Enqueue Lock에 대한 모든 정보

DBA_KGLLOCK

Library cache lock + Library cache pin

X$KGLLK

Library cache lock

X$KGLPN

Library cache pin

X$KGLOB

LCO

V$ROWCACHE_PARENT

Row cache lock

 

Lock

▣ 개요

데이터 베이스 내부에 정보가 존재하며 모든 인스턴스에서 볼 수 있다.(락은 데이터 베이스 레벨에서 작동)

문맥 교환을 포함한 일련의 명령어들을 사용하여 구현되었다.

6가지 모드로 요청이 가능(null, row share, row exclusive, share, share row exclusive, exclusive)

트랜젝션 동안 지속된다.

프로세스가 락 획득을 실패한 후 해당 요청은 큐(queue)로 관리되며 요청한 순서대로 서비스 된다.(nowait 모드는 예외임)

락은 큐 방식을 사용하며 데드락이 발생될 가능성이 높다. 데드락이 발생될 때 마다 트레이스 파일이 생성된다.

   

용어

Library cache lock

Library cache object (이하 LCO)에 접근 또는 변경 할 때, LCO의 핸들(handle)에 대해 획득하는 락이다. 핸들은 실제 LCO에 대한 메타정보, 포인터 정보를 가지고 있다.

특정 SQL문을 실행하려는 프로세스는 소프트 파싱하는 동안 SQL문에 해당하는 LCO에 대하여 library cache lockshared 모드로 획득해야 한다. 소프트 파싱이 끝나고 나면(실행 또는 하드 파싱 단계) library cache lock을 null 모드로 변환한다. 이 때, SQL문에 해당하는 LCO 이외에 SQL이 참조하는 모든 객체에 대해서도 동일한 모드로 library cache lock을 획득한다.

Library cache pin

Library cache 객체에 대한 수행이나 변경시 library cache object(loc)에 대해 획득하는 락이다. Library cache pin을 획득하는 과정에서 경합이 발생하면 library cache pin 이벤트를 대기한다.

Library cache object의 실행정보를 보호

Row cache lock

오라클은 딕셔너리의 정보를 SGA내의 Row Cache(혹은 dictionary cache)영역에 저장하고 있다.

Row Cache Object(이하 RCO)는 개별 딕셔너리 객체를 의미한다

Row cache object를 변경하고자 할 때 획득하는 락.

Row Cache는 Shared Pool 영역에 존재하며 다음과 같은 쿼리로 확인할 수 있다.

  

TX

행 레벨 잠금

*Insert, update, delete, select…for update 에 의해 수정된 각 행에 대해 자동으로 행 레벨의 lock(Tx)이 설정된다.

*row level lock은 다른 어떠한 사용자도 동시에 동일한 행을 수정할 수 없도록 보장된다. 따라서 다른 사용자에 의해 수정되었지만 아직 commit되지 않은 행을 사용자가 수정할 위험이 없다.

TM

테이블 레벨 잠금

* 테이블 레벨 잠금(TM유형)은 테이블을 수정하는 모든 DML 트랜젝션에 대해 설정된다.

* insert, update, delete, select..for update, lock table

*테이블 잠금은 D이 작업이 트랜젝션과 충돌하지 못하도록 막는다.

UL

PL/SQL user lock, pl/sql 사용자 잠금(lock)

User lock. A session has taken a lock with the DBMS_LOCK.REQUEST function

US

세그먼트를 온라인 또는 오프라인시키는 과정을 동기화하기 위해 해당 작업을 수행하는 서버 프로세스나 백그라운드 프로세스는 US 락을 획득해야 한다. US 락은 언두 세그먼트마다 하나씩 할당되며, ID1=Undo Segment#이다. US 락을 획득하는 과정에서 경합이 발생하면 enq: US - contention 이벤트를 대기하게 된다.

  

HW

HWM(High Water Mark)을 여러 프로세스가 동시에 변경하는 것을 막기 위한 락을 HW락이라고 부른다. HWM을 이동시키고자 하는 프로세스는 반드시 HW락을 획득해야 한다. HW락을 획득하는 과정에서 경합이 발생하면 enq: HW - contention 이벤트를 대기한다. HW락 경합은 대부분 대량 Insert에 의해 발생하며, 간혹 대량 Update에 의해 언두 세그먼트에서 HW락 경합현상이 발생하는 경우도 있다.

SQ

메모리에 캐시되어 있는 범위 안에서 sequence.nextval 을 호출하는 동안 획득한다. CACHE 속성을 부여한 시퀀스에서 사용된다.

  

SV

RAC에서 노드간에 순서가 보장된 상태로 sequence.nextval 을 호출하는 동안 획득한다. CACHE + ORDER 속성을 부여한 시퀀스에서 사용된다.

  

TT

Temp table

오라클 8i 이전 버전에서는 TT 락ST 락처럼 인스턴스 별로 하나만 존재했으며, 인스턴스 기동 시에 롤백 세그먼트를 할당할 때 획득한다. 하지만 오라클 8i 부터는 기존에 ST 락을 사용하던 일부 테이블스페이스 관련 작업에 TT 락을 사용한다.

   

  

Buffer lock

  • 여러 프로세스가 동시에 인서트를 수행하는 경우 오른쪽 말단 리프 노드가 핫 블록이 될 가능성이 높아진다. 핫 블록은 버퍼 락(Buffer Lock) 경합을 유발

   

▣ Lock Mode

모드

의미

Null

리소스에 대한 변경이 있을 경우 락 홀더에게 변경 사실 전달

Sub-shared(RS/SS)

리소스의 일부분에 대한 shared 락이 필요한 경우

Select…for update 문을 사용하는 질의 동안 행을 잠그도록 선택할 수 있다.

이 모드는 다른 트랜젝션들이 동일한 테이블의 다른 행을 동시에 질의, 삽입, 갱신, 삭제 하거나 잠글 수 있도록 허용하고 다른 트랜젝션들이 독점 읽기 또는 쓰기를 위해 테이블을 수동으로 잠그는 것을 막는다.

Sub-Exclusive(RX/SX)

리소스의 일부분에 대한 exclusive 락이 필요한 경우

다른 트랜젝션들이 동일한 테이블의 다른 행을 동시에 insert, update, delete 하거나 잠글 수 있도록 허용하고 다른 트랜젝션들이 독점 읽기 또는 쓰기를 위해 테이블을 수동으로 잠그는 것을 막는다.

Shared(S)

리소스에 대한 변경을 막을 경우

Shared-Sub-Exclusive(SRX/SSX)

리소스의 일부분에 대해서는 exclusive락이, 리소스 전체에 대해서는 shared 락이 필요한 경우

획득된 수동 공유 잠금 모드와 DML문을 막는 훨씬 높은 레벨의 잠금

암시적으로 공유 행 독점 잠금(lock)을 얻은 SQL 문은 다시 참조 무결성과 연관된다.

Exclusive(X)

리소스에 대한 변경이 필요한 경우

최고 레벨의 테이블 잠금이기 때문에 가장 제한적인 모드로서 다른 트랜젝션이 테이블을 질의하는 것만 허용한다. 모든 유형의 DML과 수동 잠금 모드를 허용하지 않는다.

타임아웃시간

Enqueue lock

3초

Buffer lock

일반적인 경우에는 1초, 연속적으로 buffer lock을 획득하기 위해 대기하는 시간은 3초

Row cache lock

60초

Library cache lock/library cache pin

일반 프로세스는 3초, PMON 프로세스는 1초

 

V$LATCH

V$LATCH

V$LATCH shows aggregate latch statistics for both parent and child latches, grouped by latch name. Individual parent and child latch statistics are broken down in the views V$LATCH_PARENT and V$LATCH_CHILDREN.

Column

Datatype

Description

ADDR

RAW(4 | 8)

Address of the latch object

LATCH#

NUMBER

Latch number

LEVEL#

NUMBER

Latch level

NAME

VARCHAR2(50)

Latch name

HASH

NUMBER

Latch hash

GETS

NUMBER

Number of times the latch was requested in willing-to-wait mode

MISSES

NUMBER

Number of times the latch was requested in willing-to-wait mode and the requestor had to wait

SLEEPS

NUMBER

Number of times a willing-to-wait latch request resulted in a session sleeping while waiting for the latch

IMMEDIATE_GETS

NUMBER

Number of times a latch was requested in no-wait mode

IMMEDIATE_MISSES

NUMBER

Number of times a no-wait latch request did not succeed (that is, missed)

WAITERS_WOKEN

NUMBER

This column has been deprecated and is present only for compatibility with previous releases of Oracle. No data is accumulated for this column; it will always have a value of zero.

WAITS_HOLDING_LATCH

NUMBER

This column has been deprecated and is present only for compatibility with previous releases of Oracle. No data is accumulated for this column; it will always have a value of zero.

SPIN_GETS

NUMBER

Willing-to-wait latch requests which missed the first try but succeeded while spinning

SLEEP[1 | 2 | 3]

NUMBER

These columns have been deprecated and are present only for compatibility with previous releases of Oracle. No data is accumulated for these columns; they will always have a value of zero. As a substitute for this column you can query the appropriate rows of the V$EVENT_HISTOGRAM view where the EVENT column has a value of latch free or latch:%.

SLEEP4

NUMBER

This column has been deprecated and is present only for compatibility with previous releases of Oracle. No data is accumulated for this column; it will always have a value of zero. As a substitute for this column you can query the appropriate rows of the V$EVENT_HISTOGRAM view where the EVENT column has a value of latch free or latch:%.

SLEEP[5 | 6 | 7 | 8 | 9 | 10 | 11]

NUMBER

These columns have been deprecated and are present only for compatibility with previous releases of Oracle. No data is accumulated for these columns.

WAIT_TIME

NUMBER

Elapsed time spent waiting for the latch (in microseconds)

   

원본 위치 <http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_1136.htm#REFRN30108>

   

Latch

▣ latch의 종류 확인

   

▣ Latch를 획득할 때까지 기다리는 이벤트

   

관련 뷰

V_$LATCH

하위 잠금에 대한 통계와 상위 잠금에 대한 요약통계. 즉, 상위잠금에 대한 통계는 그 하위잠금에 대한 각각의 통계를 포함한다

Latch 획득 통계, latch 종류 당 하나

컬럼분석

V_$LATCHHOLDER

현재잠금에 대한 정보.V$LATCHNAME V$LATCH 에 있는 잠금에 대한 디코드된 잠금이름에 대한 정보. V$LATCHNAME의 행들은 V$LATCH의 행들과 1:1로 대응된다

Latch Holder 정보

  

V_$LATCH_CHILDREN

하위잠금에 대한 통계를 포함. V$LATCH의 칼럼에 child# 칼럼이추가되었다. LATCH#칼럼이 서로 동일하다면, 하위잠금이 동일한 상위잠금을 갖는 것이다. 자식 Latch 통계

  

V_$LATCH_MISSES

잠금을 획득하는데 실패한 시도에 대한 통계

  

V_$LATCHHOLDER

현재잠금에 대한 정보.V$LATCHNAME V$LATCH 에 있는 잠금에 대한 디코드된 잠금이름에 대한 정보. V$LATCHNAME의 행들은 V$LATCH의 행들과 1:1로 대응된다. Latch Holder 정보

  

   

시스템 이벤트에서 값이 가장 큰것

   

경합 발생

   

디스크 정리

※ database compressed 백업 후 delete obsolete