mysql 사용중 ddl 수행시 오랜 시간동안 수행이 안되는 경우가 발생

 

1. processlist 상태확인

show processlist 

세션 상태중 state metalock이라고 표시

 

2. 추가적인 정보 확인

권한을 가지고 있으면 아래와 같이 mysql 설정 정보 변경

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME = 'global_instrumentation';

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl';

 

metalock를 가지고 있는 세션 확인

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();

 

* mariadb에 경우에는 plugin 설치후 확인 가능

  install soname 'metadata_lock_info';

  select * from information_schema.metadata_lock_info;

 

3. 조치

위에서 파견된 thread_id를 kill  => kill thread_id

 

4. 기타

alter시 내부 func 수행을 trace 하고 싶을경우

set proofiling=on;

alter 쿼리 수행

show profiles;

show profile for query 4;  (위에 표시된 sql중 보고싶은 sql)

'RDB > MySQL' 카테고리의 다른 글

mariadb 패스워드 인증  (0) 2020.01.14
mysql data dump 백업  (0) 2019.10.25
MySQL 테이블 상세내용 확인  (0) 2019.06.04
mariabackup script  (0) 2019.04.22
custom 암/복호화 procedure  (0) 2019.04.19

+ Recent posts