DB에 락이 필요한 이유
데이터를 보호함으로써 다중처리를 실현하기 위함입니다.
락이 풀리는 시점
데이터를 커밋하거나 롤백할 때 락이 풀립니다.
대기와 대기 이벤트
대기란 기다리는 상태를 의미합니다. 대기 이벤트는 기다리는 일을 의미합니다.
대기의 종류
대기의 종류에는 idle wait과 not idle wait이 있습니다. idle wait은 이유 없이 대기하고 있는 것입니다. not idle wait은 이유가 있는 대기입니다. not idle wait 안의 기다림의 대상의 유형에 따라 2종류로 나눕니다. 기다림의 대상이 정상인 것과 비정상인 것. 기다림의 시간은 not idle wait 대기시간 + SQL 처리시간으로 구성됩니다.
락 대기
락 대기란 락이 걸려있는 대상에 대해 락을 걸기 위해 락이 풀릴 때까지 기다리는 것을 의미합니다. 락대기가 발생 할 경우 enqueue 대기 이벤트가 발생한다.
락 종류
행에 락을 거는 행락(TX)이 있고 테이블에 락을 거는 테이블락(TM)이 있다.
데드락의 정의와 메커니즘
서로가 상대방이 가지고 있는 락을 획득하고자 락을 기다리고 있어 처리할 수 없는 상황. 이 때 자동으로 한쪽의 처리가 롤백된다. 해당 사항은 alert file과 trace file에 기록된다. 데드락 정보는 데드락 그래프에 기록된다.
래치
다중처리를 구현하기 위한 락의 일종이다. 메모리나 데이터 조작 시 상호 배타적으로 처리하지 않을 경우 데이터에 문제가 생겨 데이터를 보호하고자 사용된다. 래치의 종류와 개수를 늘림으로써 세션 경합을 줄이는 형태이다. 그렇지만 래치에도 데드락이 생길 수 있다. 데드락 상황이 생기는 이유는 CPU 스케줄링과 선점 때문이다. OS에 의해 특정 프로세스의 CPU가 반납되고 CPU를 지급한 프로세스가 CPU를 반납한 프로세스의 래치가 필요 할 경우 락이 발생한다.
요약
- 대기는 단순히 기다리고 있다는 상황을 표시하는 것이다.
- idle wait and not idle wait.
- 락은 처리를 보호하기 위해 존재한다.
- 데드락은 서로가 보유하고 있는 락을 요청해 더이상 처리할 수 없는 상황을 의미한다.
- 락 경합 해소를 위해 앱측에서 대처해야 하는 경우가 많다.
- 대규모 시스템이 아닌데 래치 경합이 심할 경우 CPU 자원이 부족하거나 페이징의 상태를 확인한다.
'DataBase > 그림으로 공부하는 오라클 구조' 카테고리의 다른 글
10장 백업/복구의 아키텍처와 동작 (0) | 2023.10.12 |
---|---|
9장 리두와 언두의 동작 (0) | 2023.10.09 |
7장 오라클의 데이터 구조 (1) | 2023.10.09 |
6장 커넥션과 서버 프로세시의 생성 (0) | 2023.09.24 |
5장 오라클의 기동과 정지 (0) | 2023.09.20 |