ebson

MariaDB Table lock 원인과 해결 본문

DATABASE STUDY

MariaDB Table lock 원인과 해결

ebson 2023. 2. 3. 12:28

데이터베이스가 요청된 트랜잭션을 처리하기 위해 사용중인 프로세스간 락 현상이 발생할 수 있다. 특정 쿼리가 늦게 처리되거나, 의도치 않게 서비스가 종료되어 트랜잭션이 정상 처리되지 않은채로 남아있는 경우나 특정 테이블에 대해 복수개의 쿼리 요청이 동시에 있는 경우 등이 이에 해당할 것이다. 이때는 락 현상을 해결하기 위해 특정 프로세스를 kill 할 수 있다.

 

클라이언트에서 연결을 정상 종료하지 않았거나 클라이언트에서 요청한 쿼리가 느려서 연결이 종료되지 못한 경우, 해당 프로세스는 Sleep 상태가 된다. 이러한 경우의 예외처리가 적절히 되어 있지 않으면 프로그램이 종료된 후에도 디비와 연결이 끊어지지 않고 테이블에 대해 권한을 계속 갖고 있는다. 이경우 다른 프로세스가 해당 테이블에 접근하지 못하는 테이블 락이 발생할 수 있다.

 

프로세스 정보 목록을 출력한다.

SHOW FULL PROCESSLIST
;
또는, 
SELECT *
FROM INFORMATION_SCHEMA.PROCESSLIST
;

 

문제의 프로세스를 찾아 죽인다.

KILL [PROCESS_ID]

 

디비 연결이 정상 종료되지 않은 경우, 신규 프로세스가 테이블에 접근하지 못하는 테이블 락이 발생할 수 있다. 이 경우, 해당 프로세스를 찾아 죽일 수 있다. 사전에 예방하기 위해서는 프로그램 종료 시, 디비와 연결을 종료하도록 기본 설정할 수 있다.

 

참고출처

"[DB][Mariadb] Lock 문제를 해결해보자", desmort68.tistory.com, 2018-07-26수정, 2023-02-03접속, https://desmort68.tistory.com/9.

Comments