Enq: TC - contention

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] Basic Info

인위적인 체크포인트를 수행하는 작업들 중 일부는 TC 락(Thread Checkpoint Lock, 혹은 Tablespace Checkpoint Lock)을 획득해야한다. TC 락을 획득하는 과정에서 경합이 발생하면 enq: TC - contention 이벤트를 대기하게 된다.

TC 락을 획득하는 과정은 아래와 같다.

1) 서버 프로세스가 우선 TC 락X 모드로 획득한다.

2) 서버 프로세스는 획득한 TC 락SSX 모드로 변경하고, 동시에 CKPT 프로세스SS 모드로 해당 락을 획득한다. CKPT는 락을 획득하고 체크포인트 작업을 수행하게 된다.

3) 서버 프로세스는 다시 TC 락X 모드로 획득하려고 시도하는데, 해당 락이 CKPT에 의해 해제될 때까지 대기하게 된다. 이때의 대기이벤트가 enq: TC - contention 이다.

4) 체크포인트 작업이 완료되면 CKPT 프로세스는 TC 락을 해제하고, 서버 프로세스는 TC 락을 획득함으로써 체크포인트 작업이 끝났다는 것을 알게 된다.

enq: TC - contention 대기는 여러 프로세스에 의해 경합이 발생하지 않더라도 관찰이 된다는 점에서 락 경합에 의한 다른 대기현상들과는 구별이 된다. 대기현상에는 경합에 의해서만 발생할 수 있는 것들도 있지만, 경합이 발생하지 않더라도 특정 작업이 끝나기를 단순히 기다리는 경우도 있다는 것을 이해할 필요가 있다.

체크포인트가 발생하는 경우는 매우 다양하지만, 모든 경우에 의해 TC 락에 의한 대기가 발생하는 것은 아니며, 서버 프로세스에 의해 유발된 체크포인트 작업을 동기화시키는 과정에서만 발생한다. enq: TC - contention 대기가 발생하는 대표적인 사례는 다음과 같다.


[편집] Parallel Query

Parallel Query(이하 PQ)에서 체크포인트가 발생하는 이유는 슬레이브 세션(Slave Session)에 의한 direct path read 때문이다. direct path read는 버퍼 캐시를 거치지 않고, 데이터 파일을 직접 읽는 것을 말한다. 오라클은 다음과 같은 세가지 경우에 direct path read(또는 physical read direct 방식의 읽기)를 사용한다.

  • 메모리 영역에서 소팅 작업을 완료할 수 없을 때 임시 세그먼트(Temp Segment) 영역에 정보를 저장하고 읽는 과정에서 direct path write, direct path read 가 발생한다. 이 때의 대기이벤트는 direct path read temp, direct path write temp 이벤트로 관찰된다.
  • 슬레이브 세션이 데이터를 스캔하기 위해 데이터 파일을 직접 읽어들일 때 direct path read를 사용한다. 이 때의 대기이벤트는 direct path read 이벤트로 관찰된다.
  • I/O 시스템의 성능저하로 블록을 충분히 빠른 속도로 읽어 들이지 못한다고 판단되면, 오라클은 임시방편으로 direct path read를 사용한다.

슬레이브 세션이 direct path read를 수행하는 대상이 데이터 파일이라는 것에 주의하자. 데이터 파일에서 직접 데이터를 읽을 경우 SGA를 경유하지 않기 때문에 현재 SGA에 있는 블록과 데이터 파일에 있는 블록 사이에 버전 불일치 현상이 생길 수 있다. 이러한 현상을 방지하기 위해 오라클은 데이터 파일에 대해 direct path read를 수행하기 전에 체크포인트를 수행해야 한다. 코디네이터 세션(Coordinate Session)은 슬레이브 세션을 구동하기 전에 direct path read를 수행할 객체에 대해 세그먼트 레벨의 체크포인트를 요청하게 되고, 체크포인트 작업이 끝날 때까지 enq: TC - contention 이벤트를 대기한다. 코디네이터 세션에서는 enq: TC - contention 대기가 목격되고, 슬레이브 세션에서는 direct path read 대기가 목격된다는 것에 주의하자. TC 락 경합 현상에 대한 글을 관련 사이트 등에서 검색하면 하이브리드(Hybrid) 시스템, 즉 OLTPDSS 가 혼용되어 사용되는 시스템에서 많이 발생하는 것으로 나오는데, 그 이유가 바로 PQ의 수행에 있다.

[편집] 테이블 스페이스 핫백업(Tablespace Hot backup)

ALTER TABLESPACE ... BEGIN BACKUP 을 수행하면 오라클은 테이블스페이스 내에 속한 모든 데이터 파일에 대해 더티 블록을 디스크에 기록(Checkpoint)하게 되는데 이 과정에서 enq: TC -contention 대기를 겪는다.

TC 락 경합에 의한 성능상의 문제는 대기 그 자체보다는 인위적인 체크포인트를 수행한다는데 있다. 가령 하이브리드 시스템에서 초당 수백 회 이상의 트랜잭션이 발생하는 상황에서 초당 수회 이상의 PQ를 수행한다고 가정해보자. PQ를 수행할 때마다 체크포인트가 발생하게 된다. 체크포인트가 불필요하게 많이 이루어지는 경우 DBWR에 병목이 생겨 여러 가지 성능 문제를 유발할 수 있다. 이러한 점을 고려할 때 PQ는 해당 시스템과 업무를 고려하여 꼭 필요한 경우에만 사용하도록 할 필요가 있다. 다만, PQ에 의한 체크포인트는 PQ가 수행되는 객체에 대해서만 수행된다는 점에서 일반적인 체크포인트보다는 부하가 적다.

PQ를 적절히 사용하면 대용량의 데이터를 빠른 속도로 처리할 수 있고, 특히 SGA 를 경유하지 않기 때문에 버퍼 캐시에 대량의 데이터를 올리는 데서 오는 부작용을 피할 수 있다는 장점이 있다. 하지만, enq: TC - contention 대기에서 알 수 있듯이 불필요한 체크포인트를 유발해 오히려 시스템 전체의 성능에 부정적인 효과를 가져올 수도 있다. 따라서 꼭 필요한 업무에 대해서만 PQ를 사용하도록 해야 한다.

[편집] Parameter & Wait Time

[편집] Wait Parameters

  • P1 : Enqueue 정보
  • P2 : Checkpoint ID
  • P3 : 0

[편집] Wait Time

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

[편집] Check Point & Solution

[편집] Event Tip

[편집] Analysis Case