오늘 웹사이트 접속이 안되어 웹 서버를 계속 재 시작 해도 반복되는 증상이 있었습니다.
혹시 몰라서 DB 접속이 없는 페이지를 보니 데이터베이스 문제라는 것을 알게 되었습니다.
테이블이 락 걸리는 이유는?
데이터를 보여주는 SELECT 이외에 삭제, 수정, 추가를 할 때 테이블에 락이 걸리고 진행이 됩니다.
테이블 작업이 진행될 때 다른 요청은 대기 상태가 되는 방식 입니다. 일반적으로는 문제가 없지만 여러 사람이 INSERT / UPDATE / DELETE 명령을 수행하면 Lock 키를 얻기 위해 무한 대기가 되기도 합니다.
COMMIT 아니 ROLLBACK 하면 되지만 무한 락이 걸리면 직접 해제해야 하는 경우도 생깁니다.
프로세스를 먼저 확인합니다.
데이터베이스 쿼리에 SHOW FULL PROCESSLIST; 명령을 이용해서 현재 실행중이 프로세서를 확인합니다.
-- 전체 프로세스 조회 # SHOW FULL PROCESSLIST; -- LOCK 테이블 조회 # SELECT * FROM information_schema.innodb_locks; -- WAIT 락 조회 # 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;