[Oracle] Index Contention
- Databases/Oracle
- 2020. 9. 7.
출처 : http://serdarturgut.blogspot.com/2010/12/enq-tx-index-contention.html
애플리케이션의 동시성이 높은 테이블과 연결된 인덱스에서 높은 인덱스 리프 블록 경합을 볼 수 있습니다. 이것은 일반적으로 응용 프로그램이 많은 INSERT 및 DELETE를 수행 할 때 발생합니다.
그 이유는 인덱스에 새 행을 삽입하는 동안 인덱스 블록이 분할되기 때문입니다. 트랜잭션은 블록 분할을 수행하는 세션이 작업을 완료할 때까지 모드 4에서 TX 잠금을 기다려야합니다.
■ 이유
애플리케이션에서 많이 액세스되는 테이블의 인덱스입니다.
단조 증가하여 삽입 된 값이있는 테이블 열의 인덱스입니다.
대량으로 삭제된 테이블
■ 인덱스 리프 블록 경합 감지
핫 인덱스를 찾는 방법에는 여러 가지가 있습니다.
• AWR 보고서에서 높은 "enq : TX – 인덱스 경합"시스템 대기 확인
• 동시에 AWR 보고서의 인스턴스 활동성 통계에서 높은 분할 이벤트를 볼 수 있습니다.
• 시스템이 RAC 인 경우 AWR 보고서에 다음 대기 이벤트도 표시됩니다.
인덱스 분기 블록에서 gc 버퍼 사용 중 대기
인덱스 리프 블록에서 gc 버퍼 사용 중 대기
원격 실행 취소 헤더에서 gc 현재 블록 사용 중
gc 현재 분할
gcs ast xid
gcs는 xid를 거부합니다.
• v$active_session_history에서 sql_id를 찾을 수 있습니다.
select sql_id,count(*) from v$active_session_history a
where a.sample_time between sysdate - 5/24 and sysdate
and trim(a.event) like 'enq: TX - index contention%'
group by sql_id
order by 2;
• 또는 V $ SEGMENT_STATISTICS 또는 AWR 보고서의 'Segments by Row Lock Waits'에서 세그먼트를 쿼리 할 수 있습니다.
select * from v$segment_statistics
where statistic_name ='row lock waits'
and value>0 order by value desc;
•dba_hist_enqueue_stat 및 stats$enqueuestat 또는 v$enqueue_stat를 쿼리 할 수 있습니다.
select * from v$enqueue_stat order by cum_wait_time;
■ 해결책
• Reverse Key Indexes : AWR 보고서의 'Segments by Row Lock Waits'에 나열된 인덱스를 역방향 키 인덱스 또는 해시 파티션으로 재 구축합니다. 이러한 인덱스는 삽입 성능에 탁월합니다. 그러나 단점은 인덱스 범위 스캔의 성능에 영향을 미칠 수 있다는 것입니다.
• Hash partitioned global indexes : 인덱스가 시퀀스 또는 날짜 키로 인해 단조롭게 증가하는 경우 전역 해시 분할 인덱스는 경합을 분산시켜 성능을 향상시킵니다. 따라서 해시 파티션 된 글로벌 인덱스는 인덱스의 적은 수의 리프 블록이 다중 사용자 OLTP 환경에서 높은 경합을 갖는 인덱스의 성능을 향상시킬 수 있습니다.
• 시퀀스의 캐시 크기 : 열 값을 채우기 위해 단조롭게 증가하는 시퀀스를 사용하면 높은 시퀀스 키를 갖는 리프 블록이 삽입 할 때마다 변경되므로 핫 블록이되고 블록 분할의 잠재적 후보가됩니다. CACHE SIZE (및 NOORDER 옵션 사용)를 사용하면 각 인스턴스는 다른 범위의 시퀀스 키를 사용하여 시작을 사용하여 동일한 리프 블록 집합을 삽입하는 인덱스 키를 줄입니다.
• 인덱스 블록 크기 : 블록 크기는 각 인덱스 블록 내의 키 수에 영향을 미치기 때문에 블록 크기는 인덱스 트리의 구조에 영향을 미칩니다. 다른 모든 것이 동일하면 큰 32k 블록 크기는 블록 당 더 많은 키를 가지므로 2k 테이블 스페이스에서 생성 된 동일한 인덱스보다 평탄한 인덱스가됩니다. 인덱스 블록 크기를 조정하는 것은 작은 효과 만 생성 할 수 있으며 인덱스 블록 크기를 변경하는 것이 인덱스 블록 경합을 줄이기위한 첫 번째 선택이되어서는 안되며 다른 접근 방식을 검토 한 후에 만 수행해야합니다.
• 인덱스 재 구축 : 많은 행이 삭제되거나 왜곡 된인데 스 인 경우 재 구축이 잠시 도움이됩니다.
Solving Waits on "enq: TM - contention"
'Databases > Oracle' 카테고리의 다른 글
[Oracle] Oracle 19c + CentOS7 사일런트(Silent) 설치 (0) | 2021.01.27 |
---|---|
[Oracle] Oracle 19c + CentOS7 설치(GUI) (0) | 2021.01.27 |
[Oracle] Index Contention (0) | 2020.10.01 |