Mysql & Maria/admin
mysql lock 발생 테스트
dbavayne
2023. 11. 26. 17:23
- 어떤 경우에 lock 이 발생하는지, lock 원인을 찾는 방법 테스트
## 테스트 테이블 생성
CREATE TABLE select_lock
(col1 VARCHAR(50),
col2 VARCHAR(50));
INSERT INTO select_lock VALUES('1st', 'first');
INSERT INTO select_lock VALUES('2nd', 'second');
1. Session A ( autocommit = off 상태에서 select 쿼리 수행)
status : lock 발생
SET autocommit =0;
SELECT * FROM select_lock;
2. Session B (lock 상태 조회)
Shared_read lock 발생 확인
SELECT l.object_type, l.object_schema, l.object_name, l.lock_type, l.lock_status,
t.processlist_id, t.processlist_user, t.processlist_host, t.processlist_time, t.processlist_info,
t.processlist_state, t.thread_id
FROM performance_schema.metadata_locks l
INNER JOIN performance_schema.threads t ON t.thread_id = l.owner_thread_id
WHERE processlist_id <> CONNECTION_ID();
3. Session C (테이블 변경)
Shared_read lock 상태에서 해당 테이블 alter 작업 수행하려고 할 때에 wait 상태에 빠짐
status : lock 발생
ALTER TABLE select_lock CHANGE col1 colA VARCHAR(16);
4. Session B (lock 상태 조회)
5. Session A (commit)
- 트랜잭션 반환 후 Session C 에서 테이블 변경이 수행됨을 확인