우아한 프로그래밍

1. 테이블락은 어떻게 걸리는가?

보통 기본설정의 Rdbms는 Select문을 제외하고 Delete/Update/Insert문에 대해서 테이블 락을 걸게됩니다.

가령 A라는 사람이 Delete Table;의 명령문을 실행한 상태에서 커밋을 치지않는 다면 해당커넥션이 아닌 다른 커넥션

즉 B,C,D라는 사람은 해당테이블에 Select를 제외한 Delete/Update/Insert을 수행할 수 없습니다.

그럼 B,C,D라는 사람이 Delete/Update/Insert문을 수행하게되면 테이블 Lock키를 얻기위해 무한대기에 빠지게됩니다. 

이 무한락을 해제하는 방법은 A라는 사람이 Lock을 해제하는것이죠 ( 커밋을 치거나 롤백을 하거나)

그러나 A라는 사람은 모른다고합니다. 그럼 A가 실행시킨 구문을 직접 킬시켜야합니다.

 

2. 사용방법

<sql />
-- 모든 프로세스 조회 SHOW FULL PROCESSLIST; -- 락테이블 조회 select * from information_schema.innodb_locks; -- 대기중인 락 조회 select * from information_schema.innodb_lock_waits; -- 트랜젝션조회 select * FROM information_schema.INNODB_TRX; -- 해당 프로세스 종료 kill 495299; -- 종합쿼리 SELECT * FROM information_schema.`PROCESSLIST` WHERE Command <> 'Sleep' AND USER NOT IN ('system user', 'event_scheduler') ORDER BY TIME DESC ;

 

profile

우아한 프로그래밍

@자바조아!

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!