- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/display/CORE/latch+-+cache+buffers+chains?
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
latch:cache buffers chains
- 버퍼 캐시를 사용하기 위해 해시 체인을 탐색하거나 변경하려는 프로세스는 반드시 해당 체인을
관리하는 cache buffers chains 래치를 획득해야 한다. - cace buffers chains 래치를 획득하는 과정에서 경합이 발생하면 latch:cache buffers chains 이벤트를 대기
- 오라클 9i 이후부터는 읽기 전용의 목적으로 체인을 탐색하는 경우에는 cache buffers chains 래치를
Shared 모드로 공유할 수 있어 경합을 줄이는데 도움이 된다.
![]() | Shared모드의 cache buffers chains 래치 만일 cache buffers chains 래치를 공유할 수 있다면 이론적으로는 동신 Select에 의한 cache buffers chains |
- cache buffers chains 래치 경합이 발생하는 대표적인 경우
- 비효율적인 SQL
- 핫블록(Hot Block)
비효율적인 SQL
- 비효율적인 SQL 문장이 cache buffers chains 래치 경합의 가장 중요한 원인이다.
- 동시에 여러 프로세스가 ㅓㄼ은 범위의 인덱스나 넓은 범위의 테이블에 대해 스캔을
수행할 경우 cache buffers chains 래치 경합이 광범위하게 발생할 수 있다
P148 참조.
핫블록(Hot Block)
- SQL문의 작동방식이 소수의 특정 블록을 계속해서 스캔하는 형태로 작성되었다면, 여러 세션이 동시에
이 SQL문을 수행하는 경우 핫블록에 의한 cache buffers chains 래치 경합이 발생한다.
p154 확인
- 어플리 케이션 수정이 불가능 한 경우 우회적으로 핫블록에 의한 cache buffer chains 래치 경합을
해소하는 방법은 핫블록에 속한 로우들을 되도록이면 다른 블록으로 분산시키는 것이다. - HotBlock 해소 방법
- PCTFREE를 높게 주거나 작은 크기의 블록을 사용함으로써 블록 경합을 줄인다.
PCTFREE를 높게 주는 것과 작은 크기의 블록을 사용하는 것은 하나의 블록에 포함되는 로우수를 줄임으로써
블록 경합을 피하는 방법이다. 이 방법은 확실히 블록 경합을 줄이는 효과가 있지만 그 만큼 관리해야 할
블록수가 늘어남으로써 동일한 쿼리가 훨씬 더 많은 블록을 스캔해야 하기 때문에 성능 저하 현상이 생기게 된다.
즉 핫블록에 의한 래치 경합은 줄어들지만, 늘어난 스캔 회수만큼 다시 래치 경합이 증가할 수도 있다. - 파티셔닝(Partitioning) 기법을 사용해서 로우가 물리적으로 다른 블록으로 들어가게끔 한다.
이 기법을 사용하면 문제가 되는 로우들이 자연스럽게 물리적으로 다른 블록에 분산시킴으로써 래치 경합을
피할 수 있다. 하지만, 테이블에 대해서 이 방법을 적용할 경우에는 인덱스의 클러스터링 팩터(Clustering Factor)
를 악화시킬 수 있으며, 이로 인해 인덱스 범위스캔에 의한 데이터 스캔 속도가 저하될 수도 있다. - 문제가 되는 블록의 로우들에 대해서만 삭제 후 재 삽입 작업을 한다. 이 방법은 테이블에 대해서만 가능하다.
문제가 되는 블록들과 해당 블록에 포함된 로우들의 ROWID 를 정확하게 알 수 있다면 해당 로우를 삭제한 후
재삽입해서 각 로우가 다른 블록에 흩어지게 할 수 있다.
- 인덱스에서의 경합 문제는 상당히 까다롭다. 정렬된 상태로 저장된다는 인덱스의 고유 특성 때문에 임의의
블록으로 분산시키는 것이 불가능한 경우가 있기 때문이다. 이 경우에는 PCTFREE를 높게 주거나 작은 크기의
블록을 사용하는 방식을 사용하는 것 외에는 뾰족한 대책이 없다. 하지만 블록의 개수가 늘어나게 되고 이로 인해
오히려 래치 경합이 줄어들지 않는 경우도 있으므로 적용 시에 유의해야 한다.
문서정보
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/display/CORE/latch+-+cache+buffers+chains?
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.