MySQL
Metadata Lock 조회
잘보고따라해
2022. 9. 22. 00:03
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();