일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 알고리즘
- HashMap
- 프로그래머스
- 다리 만들기
- 완전탐색
- Python
- 아스키코드
- 스택
- 문자열
- 구현
- SQL
- BufferedReader
- 백준
- LIS
- 브루트포스
- 백트래킹
- BFS
- 다이나믹프로그래밍
- 탐색
- 새벽코딩
- Queue
- 빅데이터
- 시뮬레이션
- dfs
- oracle
- Stack
- Java
- DP
- 배열
- 그리디
- Today
- Total
새벽코딩
[DB] Lock wait timeout exceeded; try restarting transaction 본문
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. 데이터베이스 버전 업그레이드
데이터베이스 버전이 오래되었거나 알려진 버그가 있는 경우, 최신 버전으로 업그레이드해 보는 것도 한 가지 방법입니다.
'DB 모델링 & SQL' 카테고리의 다른 글
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (SQL) (ORACLE) (0) | 2023.04.27 |
---|---|
[프로그래머스] 그룹별 조건에 맞는 식당 목록 출력하기 (SQL) (ORACLE) (0) | 2023.04.24 |
[프로그래머스] 취소되지 않은 진료 예약 조회하기 (SQL) (ORACLE) (0) | 2023.04.24 |
[프로그래머스] 주문량이 많은 아이스크림들 조회하기 (SQL) (ORACLE) (0) | 2023.04.21 |
[프로그래머스] 저자 별 카테고리 별 매출액 집계하기 (SQL) (ORACLE) (0) | 2023.04.20 |