Loading...
MySQL 9.5 Reference Manual 9.5의 17.7.6 Transaction Scheduling의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
InnoDB는 Contention-Aware Transaction Scheduling (CATS) 알고리즘을 사용하여 락을 기다리는 트랜잭션의 우선순위를 지정합니다. 여러 개의 트랜잭션이 동일한 오브젝트에 대한 락을 기다리고 있는 경우, CATS 알고리즘은 어떤 트랜잭션이 먼저 락을 받을지 결정합니다.
CATS 알고리즘은 트랜잭션이 블록하는 트랜잭션의 개수를 기반으로 스케줄링 weight를 계산하여 대기 중인 트랜잭션의 우선순위를 지정합니다. 예를 들어, 두 개의 트랜잭션이 동일한 오브젝트에 대한 락을 기다리고 있는 경우, 더 많은 트랜잭션을 블록하는 트랜잭션에 더 큰 스케줄링 weight가 부여됩니다. weight가 동일한 경우에는 더 오래 기다린 트랜잭션에 우선순위가 부여됩니다.
Information Schema INNODB_TRX 테이블의 TRX_SCHEDULE_WEIGHT 컬럼을 조회하여 트랜잭션 스케줄링 weight를 확인할 수 있습니다. weight는 대기 중인 트랜잭션에 대해서만 계산됩니다. 대기 중인 트랜잭션은 TRX_STATE 컬럼에 의해 보고되는 것처럼 LOCK WAIT 트랜잭션 실행 상태에 있는 트랜잭션입니다. 락을 기다리지 않는 트랜잭션은 TRX_SCHEDULE_WEIGHT 값이 NULL로 보고됩니다.
코드 레벨의 트랜잭션 스케줄링 이벤트를 모니터링하기 위해 INNODB_METRICS 카운터가 제공됩니다. INNODB_METRICS 카운터 사용 방법에 대한 정보는 Section 17.15.6, “InnoDB INFORMATION_SCHEMA Metrics Table”을 참조하십시오.
lock_rec_release_attempts
레코드 락을 해제하려는 시도 횟수입니다. 단일 시도는 하나의 구조 안에 zero개 또는 그 이상의 레코드 락이 있을 수 있으므로, zero개 또는 그 이상의 레코드 락 해제로 이어질 수 있습니다.
lock_rec_grant_attempts
레코드 락을 부여하려는 시도 횟수입니다. 단일 시도는 zero개 또는 그 이상의 레코드 락 부여로 이어질 수 있습니다.
lock_schedule_refreshes
스케줄된 트랜잭션 weight를 갱신하기 위해 wait-for 그래프를 분석한 횟수입니다.
17.7.5 Deadlocks in InnoDB
17.8 InnoDB Configuration