이 에러는 다른 세션에서 이미 사용중인 테이블일때 Lock 을 거는데 그 Lock걸린 테이블에서 작업을 할때 기다리다가 시간초과 나서 나는 에러이다.
대기시간은 아래 쿼리로 확인 할 수 있다.
show variables like 'lock_wait_timeout';
솔직히 근본적인 에러는 해결이 어렵다. 첫번째 해결 방법으로 일단 첫번째로 할 수 있는 방법으로는 Lock 대기시간(lock_wait_timeout)을 늘려주는것이고 두번째로는 격리레벨을 낮추는 것이다.
[격리레벨 조회 방법]
디비 격리레벨(isolation level)은 트랜잭션 끼리 얼마나 영향을 미칠것인가 인데 높은 레벨일 수록 영향을 많이 미친다.
격리레벨 수준은 크게 아래 4단계인데 기본적으로 마리아디비에서는 "REPEATABLE READ" 로 되어있다.
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
아래 쿼리 문으로 현재 DB의 격리레벨을 조회할 수 있다.
SELECT @@global.tx_isolation;
디비 락이 많이 걸려 "Lock wait timeout exceeded; try restarting transaction" 에러가 자꾸 발생한다면 꼭 정확한 데이터를 보여줄 필요성이 있는 금전적인 처리가 아니면 "READ COMMITTED"를 쓰기를 추천한다.
[격리레벨 수정 방법]
격리레벨 수정 방법은 my.cnf 파일에서 아래 내용을 추가하면 된다. 없으면 기본적으로 REPEATABLE-READ 이다.
만약에 DB Lock 이 걸려있는 상황이라 장애가 발생했다면 트랜잭션 Kill을 해줘야 하는데 방법은 아래 URL을 참조하면 된다.
DB Lock 확인 및 Kill 방법 : https://deftkang.tistory.com/247
'Project > CodyTheManager' 카테고리의 다른 글
[MySql, MariaDB] DB Lock 확인 및 Kill 방법 (2) | 2023.11.23 |
---|---|
리눅스 shell로 자동 배포 후 tomcat 자동 shutdown 되는 이슈 해결 (0) | 2023.08.17 |
[MariaDB] DB 이중화 확인 방법과 명령어 (0) | 2023.03.09 |
톰캣9(Tomcat9) 써트코리아 SSL 인증서 적용방법 (0) | 2022.10.31 |
[MariaDB] DBeaver 툴 사용하여 프로시저 실행팁과 Temp테이블 디버그 방법 (2) | 2022.10.28 |