synch/mutex/innodb/trx_sys_mutex
synch/mutex/innodb/trx_sys_mutex
이벤트는 많은 트랜잭션 수가 있는 데이터베이스 작업이 많을 때 발생합니다.
관련 엔진 버전
이 대기 이벤트 정보는 다음 엔진 버전에서 지원됩니다.
-
Aurora MySQL 버전 2 및 3
컨텍스트
내부적으로 InnoDB 데이터베이스 엔진은 스냅샷을 통해 반복 가능한 읽기 격리 수준을 사용하여 읽기 일관성을 유지합니다. 이렇게 하면 스냅샷이 생성될 때 데이터베이스의 특정 시점 보기가 제공됩니다.
InnoDB에서는 변경 사항이 커밋되었는지 여부와 관계없이 모든 변경 사항이 도착하자마자 데이터베이스에 적용됩니다. 이 방법은 다중 버전 동시성 제어(MVCC)가 없으면 데이터베이스에 연결된 모든 사용자가 모든 변경 사항 및 최신 행을 볼 수 있음을 의미합니다. 따라서 InnoDB는 필요한 경우 롤백해야 할 내용을 이해하기 위해 변경 사항을 추적하는 방법이 필요합니다.
이렇게 하려면 InnoDB는 트랜잭션 시스템(trx_sys
)을 사용하여 스냅샷을 추적합니다. 트랜잭션 시스템은 다음 작업을 수행합니다.
-
실행 취소 로그의 각 행에 대한 트랜잭션 ID를 추적합니다.
-
ReadView
라는 내부 InnoDB 구조를 사용하여 스냅샷에 표시되는 트랜잭션 ID를 식별하는 데 도움을 줄 수 있습니다.
대기 증가의 가능한 원인
트랜잭션 ID의 일관되고 제어된 처리(생성, 읽기, 업데이트 및 삭제)가 필요한 모든 데이터베이스 작업은 trx_sys
의 호출을 뮤텍스로 생성합니다.
이러한 호출은 세 가지 기능 내에서 발생합니다.
-
trx_sys_mutex_enter
- 뮤텍스를 생성합니다. -
trx_sys_mutex_exit
- 뮤텍스를 해제합니다. -
trx_sys_mutex_own
- 뮤텍스 소유 여부를 테스트합니다.
InnoDB 성능 스키마 계측은 모든 trx_sys
뮤텍스 호출을 추적합니다. 추적에는 데이터베이스 시작 또는 종료, 롤백 작업, 정리 실행 취소, 행 읽기 액세스 및 버퍼 풀 로드 시 trx_sys
의 관리가 포함되지만 이에 국한되지는 않습니다. 많은 수의 트랜잭션을 통한 데이터베이스 작업이 많으면 synch/mutex/innodb/trx_sys_mutex
가 상위 대기 이벤트에 표시됩니다.
자세한 내용은 MySQL 설명서의 성능 스키마를 사용하여 InnoDB 뮤텍스 대기 모니터링
작업
대기 이벤트의 원인에 따라 다른 작업을 권장합니다.
이벤트를 일으키는 세션 및 쿼리 식별
일반적으로 보통 로드에서 중요 로드까지 있는 데이터베이스에는 대기 이벤트가 있습니다. 성능이 최적이면 대기 이벤트가 허용될 수 있습니다. 성능이 최적이 아닌 경우 데이터베이스가 가장 많은 시간을 소비하는 위치를 확인합니다. 가장 큰 로드에 기여하는 대기 이벤트를 살펴보세요. 데이터베이스와 애플리케이션을 최적화하여 이러한 이벤트를 줄일 수 있는지 확인합니다.
AWS Management Console에서 상위 SQL 차트를 보려면
https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
탐색 창에서 성능 개선 도우미을 선택합니다.
-
DB 인스턴스를 선택합니다. DB 인스턴스에 대한 성능 개선 도우미 대시보드가 표시됩니다.
-
데이터베이스 로드(Database load) 차트에서 대기별 조각(Slice by wait)을 선택합니다.
-
데이터베이스 로드(Database load) 차트에서 상위 SQL(Top SQL)을 선택합니다.
차트에는 로드에 책임이 있는 SQL 쿼리가 나열됩니다. 목록의 맨 위에 있는 쿼리가 가장 큰 책임이 있습니다. 병목 현상을 해결하려면 다음 명령문에 집중하세요.
성능 개선 도우미를 통한 문제 해결의 개요는 블로그 게시물, 성능 개선 도우미를 통해 Amazon Aurora MySQL 워크로드 분석
다른 대기 이벤트 검사
synch/mutex/innodb/trx_sys_mutex
대기 이벤트와 연결된 다른 대기 이벤트를 검사합니다. 이렇게 하면 워크로드의 특성에 대해 추가 정보를 얻을 수 있습니다. 트랜잭션이 많으면 처리량이 줄어들 수 있지만 워크로드로 인해 이 작업이 필요할 수도 있습니다.
트랜잭션 최적화 방법에 대한 자세한 내용은 MySQL 설명서에서 InnoDB 트랜잭션 관리 최적화