22.9.3.3 mutex_instances 테이블
mutex_instances
테이블은 서버를 실행하는 동안 성능 스키마에 의해 확인되는 모든 상호 배타 락을 나열합니다. 상호 배타 락은 특정 시간에 하나의 스레드가 특정 공통 자원에 액세스 할 수 있도록하는 코드에서 사용되는 동기화 메커니즘입니다. 자원은 상호 배타적 잠금은 "보호되는"라고합니다.
서버에서 실행하는 두 개의 스레드 (예를 들어, 쿼리를 동시에 실행하는 두 사용자 세션)가 동일한 자원 (파일, 버퍼 데이터의 일부)에 액세스 할 필요가있는 경우,이 2 개의 스레드 서로 경쟁하기 위해 상호 배타 락의 잠금을 획득하는 첫 번째 쿼리는 다른 쿼리는 첫 번째 쿼리가 종료 상호 배타적 잠금을 해제 할 때까지 기다려야합니다.
상호 배타 락의 보유 중에 수행되는 작업은 '임계'에 있다고 알려져 다중 쿼리가이 중요한 부분을 연속해서 (한 번에 하나씩) 실행하기 때문에 이것은 잠재적 인 병목 넥입니다.
mutex_instances
테이블에는 이러한 열이 있습니다.
NAME
상호 배타 락에 관련된 instrument 이름.
OBJECT_INSTANCE_BEGIN
instrument 된 상호 배타 락의 메모리 주소.
LOCKED_BY_THREAD_ID
스레드가 현재 상호 배타 락되는 경우
LOCKED_BY_THREAD_ID
는 잠근 스레드THREAD_ID
되고, 그렇지 않으면 그것은NULL
입니다.
코드에 instrument 된 각 상호 배타 락에 대해 성능 스키마는 다음 정보를 제공합니다.
setup_instruments
테이블은 프리픽스wait/synch/mutex/
를 지정하고 계측 지점의 이름을 나열합니다.일부 코드에서 상호 배타적 잠금이 작성되면 행이
mutex_instances
테이블에 추가됩니다.OBJECT_INSTANCE_BEGIN
컬럼은 상호 배타적 잠금을 고유하게 식별하는 특성입니다.스레드가 상호 배타적 잠금 잠금을 시도하면
events_waits_current
테이블에 스레드의 행이 표시되고 그것이 상호 배타 락을 대기하고있는 것으로 나타났다 (EVENT_NAME
열에서) 대기되어있는 상호 배타 락 이 표시됩니다 (OBJECT_INSTANCE_BEGIN
열에서).스레드가 상호 배타적 잠금 잠금에 성공했을 경우 :
events_waits_current
은 상호 배타적 잠금에 대한 대기가 완료되었음을 나타냅니다 (TIMER_END
및TIMER_WAIT
열에서)완료된 대기 이벤트는
events_waits_history
및events_waits_history_long
테이블에 추가됩니다.mutex_instances
은 상호 배타적 잠금이 스레드가 소유지게되었음을 나타냅니다 (THREAD_ID
열에서).
스레드가 상호 배타적 잠금을 해제하면
mutex_instances
은 상호 배타적 잠금 소유자가 없어진 것을 나타냅니다 (THREAD_ID
컬럼이NULL
이됩니다).상호 배타 락 오브젝트가 파기되면 해당 행이
mutex_instances
에서 삭제됩니다.
다음 두 테이블에 대해 쿼리를 실행하여 모니터링 응용 프로그램 또는 DBA는 상호 배타적 잠금을 수반 스레드 간의 병목과 교착 상태를 감지 할 수 있습니다.
events_waits_current
스레드가 대기하고있는 상호 배타적 잠금을 확인하는 경우mutex_instances
상호 배타적 잠금을 현재 소유하고있는 다른 thread를 확인하는 경우