새벽코딩

[DB] Lock wait timeout exceeded; try restarting transaction 본문

DB 모델링 & SQL

[DB] Lock wait timeout exceeded; try restarting transaction

J 코딩 2023. 7. 11. 17:34
반응형

mariaDB를 사용하던중 데이터베이스를 통으로 삭제하려고 시도했더니 해당 에러가 보였다.

 

1. 시스템 및 데이터베이스 상태 확인

먼저 시스템 및 데이터베이스 상태를 확인해야 합니다. CPU, 메모리, 디스크 공간 등 리소스가 충분한지 확인하고, 데이터베이스 서버 로그를 살펴보아 다른 문제가 있는지 확인합니다.

 

1) 시스템 확인

각 운영체제 별로 시스템을 확인하는 방법은 다르다

Windows에서는 작업관리자 성능탭에서 현재 사용중인 CPU, 메모리, 디스크, 네트워크 등을 확인할 수 있으며, 프로세스 탭에서 실행 중인 프로세스 및 해당 CPU 및 메모리 사용량을 확인할 수 있다.

2) DB 상태확인

select * from information_schema.INNODB_LOCKS;        -- 현재 Lock 정보
select * from information_schema.INNODB_LOCK_WAITS;   -- Lock을 대기 정보
select * from information_schema.INNODB_TRX;          -- 트랜잭션 상태

 

2. 트랜잭션 경합 줄이기

트랜잭션을 실행하는 동안 락 충돌을 최소화하기 위해 다음과 같은 방법을 고려해볼 수 있습니다.

 

3. 락 대기 시간 제한 조정

락 대기 시간 제한을 늘리거나 줄여보면서 최적의 설정 값을 찾을 수 있습니다.

 

4. 인덱스 추가

쿼리의 성능을 향상시키기 위해 필요한 인덱스를 추가합니다.

 


5. 불필요한 락 제거

트랜잭션 내에서 필요하지 않은 락을 사용하지 않도록 합니다.

 

6. 데이터베이스 설정 조정

데이터베이스 설정을 조정하여 더 나은 성능을 얻을 수 있습니다.

 

7. 락 타임아웃 값 조정

데이터베이스의 락 타임아웃 값을 증가시켜 충돌이 발생할 확률을 줄일 수 있습니다.

 

8. 동시성 제어 설정 변경

동시성 제어 설정을 변경하여 트랜잭션의 격리 수준을 조정할 수 있습니다.

 

9. 쿼리 최적화

락 충돌이 발생하는 쿼리를 최적화하여 실행 계획을 개선할 수 있습니다. 이를 위해 쿼리 실행 계획을 분석하고, 쿼리 튜닝 기법을 적용하여 성능을 향상시킬 수 있습니다.

 

10. 데이터베이스 버전 업그레이드

데이터베이스 버전이 오래되었거나 알려진 버그가 있는 경우, 최신 버전으로 업그레이드해 보는 것도 한 가지 방법입니다.

반응형
Comments