mysql 5.7 부터 performance_schema.metadata_locks 가 추가 되었으며
이를 조회해서 metadata lock 을 잡고 있는 세션 확인이 가능하다.
auto_commit = false 상태로 쿼리를 하다보면 본인도 모르게 metadata lock 을 잡을 수 도 있다.
예를 들면 python 에서 pymysql 로 접속시 기본 설정이 auto_commit = false 로 되어 있다.
metadata lock 조회를 위한 선행 작업
-- 기본 설정이 YES 지만 확인해본다.
SELECT * FROM performance_schema.setup_consumers WHERE NAME = 'global_instrumentation';
-- ENABLED = YES 가 아닐 경우 업데이트
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME = 'global_instrumentation';
-- MySQL 8.0 에서는 기본설정이 ENABLED = YES 지만
-- 5.7 에서는 NO 로 되어 있어 확인이 필요하다.
SELECT * FROM performance_schema.setup_instruments WHERE NAME = 'wait/lock/metadata/sql/mdl';
-- ENABLED = YES 가 아닐 경우 업데이트
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl';
metadata lock 조회
SELECT
OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, LOCK_TYPE, LOCK_STATUS,
THREAD_ID, PROCESSLIST_ID, PROCESSLIST_INFO
FROM performance_schema.metadata_locks
INNER JOIN performance_schema.threads ON THREAD_ID = OWNER_THREAD_ID
WHERE PROCESSLIST_ID <> CONNECTION_ID();
'MySQL' 카테고리의 다른 글
Query Cache (0) | 2022.09.24 |
---|---|
Index Hint (0) | 2022.09.22 |
MySQL JSON 사용시 주의사항 (0) | 2022.09.16 |
MySQL JSON, Generated Columns (0) | 2022.09.15 |
MySQL Performance Best Practice (0) | 2021.12.26 |