일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 스프링 배치 메타 테이블
- multi update
- JSON 분할
- jar 소스보기
- 스테이지에 올리기
- 폐기하기
- JSONArray 분할
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- org.json
- JobExecutionAlreadyRunningException
- nonblocking
- 마리아디비
- batchInsert
- str_to_date
- 무시하기
- 문자형을 날짜형으로
- JSON 분리
- 성능개선
- spring webflux
- date_format
- 마이바티스 트랜잭션
- JSONObject 분할
- git stage
- spring reactive programming
- 스프링 리액티브 프로그래밍
- 날짜형을 문자형으로
- Meta Table
- 스프링 웹플럭스
- JSON 분해
- 스프링 배치 공식문서
- Today
- Total
ebson
MariaDB Table lock 원인과 해결 본문
데이터베이스가 요청된 트랜잭션을 처리하기 위해 사용중인 프로세스간 락 현상이 발생할 수 있다. 특정 쿼리가 늦게 처리되거나, 의도치 않게 서비스가 종료되어 트랜잭션이 정상 처리되지 않은채로 남아있는 경우나 특정 테이블에 대해 복수개의 쿼리 요청이 동시에 있는 경우 등이 이에 해당할 것이다. 이때는 락 현상을 해결하기 위해 특정 프로세스를 kill 할 수 있다.
클라이언트에서 연결을 정상 종료하지 않았거나 클라이언트에서 요청한 쿼리가 느려서 연결이 종료되지 못한 경우, 해당 프로세스는 Sleep 상태가 된다. 이러한 경우의 예외처리가 적절히 되어 있지 않으면 프로그램이 종료된 후에도 디비와 연결이 끊어지지 않고 테이블에 대해 권한을 계속 갖고 있는다. 이경우 다른 프로세스가 해당 테이블에 접근하지 못하는 테이블 락이 발생할 수 있다.
프로세스 정보 목록을 출력한다.
SHOW FULL PROCESSLIST
;
또는,
SELECT *
FROM INFORMATION_SCHEMA.PROCESSLIST
;
문제의 프로세스를 찾아 죽인다.
KILL [PROCESS_ID]
디비 연결이 정상 종료되지 않은 경우, 신규 프로세스가 테이블에 접근하지 못하는 테이블 락이 발생할 수 있다. 이 경우, 해당 프로세스를 찾아 죽일 수 있다. 사전에 예방하기 위해서는 프로그램 종료 시, 디비와 연결을 종료하도록 기본 설정할 수 있다.
참고출처
"[DB][Mariadb] Lock 문제를 해결해보자", desmort68.tistory.com, 2018-07-26수정, 2023-02-03접속, https://desmort68.tistory.com/9.
'DATABASE STUDY' 카테고리의 다른 글
[ ORACLE ] INSTR 함수를 사용해 문자열에서 특정 문자 인덱스를 찾고 SUBSTR 함수를 사용해 특정 구분자 사이의 문자열을 추출하기 (0) | 2023.04.06 |
---|---|
[MariaDB] 날짜형을 문자형으로, 문자형을 날짜형으로 변환하기 (0) | 2023.02.21 |
오라클 계층형 쿼리 (0) | 2022.08.28 |
오라클 CHAR, VARCHAR2의 차이 (0) | 2022.08.28 |
오라클 DEFAULT (0) | 2022.08.28 |