728x90
🔍 원인
사용하고 있는 테이블에 Lock이 걸려 있는 상태에서 다른 세션의 사용자가 같은 테이블에서 작업을 수행 할 때, Lock 대기시간이 초과되면 발생하는 에러이다.
💡 해결
해결 방법은 Lock을 확인하고 세션을 죽여주면 된다.
현재 이상이 있는 프로세스들을 조회 해주고
-- 프로세스 리스트 표시
SHOW PROCESSLIST
-- 락테이블 조회
select * from information_schema.innodb_locks;
-- 대기중인 락 조회
select * from information_schema.innodb_lock_waits;
-- 트랜잭션조회
select * FROM information_schema.INNODB_TRX;
명령어를 통해 강제로 종료시켜준다.
-- KILL
KILL 1234567; -- KILL pid
-- KILL(AWS RDS)
CALL mysql.rds_kill(1234567); -- CALL mysql.rds_kill(pid);
❗ 주의점
개발 시 세션 kill로 인한 리스크가 있는 경우라면 같은 테이블을 사용하는 협업자 분에게 commit또는 rollback을 부탁하는게 가장 좋다.
개발 중에는 위와 같이 해결해 줄 수 있지만, 실제 사용자들이 사용할 때는 에러가 발생하지 않도록 Lock 대기 시간을 늘려주거나 쿼리 또는 로직에서 트랜잭션 에러에 대비하는 코드를 짜주어야 한다.
728x90
'Error' 카테고리의 다른 글
[JAVA]nested exception is org.apache.ibatis.exceptions.TooManyResultsException 예외 (2) | 2024.02.20 |
---|---|
[MySQL]Uncaught TypeError: value.replace is not a function 해결 (0) | 2024.02.02 |
[MSSQL]Insert시 Data truncated for column 'date' at row 1 경고(feat.REPLACE()) (0) | 2024.01.23 |
[Vue.js] Vue warn 자주 발생하는 경우와 해결 법 (2) | 2024.01.03 |
[Java] java.lang.NullPointerException(feat. null과 isEmpty()) (4) | 2023.12.28 |