LOCK 종류(기본 개념)
Shared lock (공유 잠금, Read lock)
어떤 트랜잭션에서 데이터를 읽고자 할 때 다른 shared lock은 허용이 되지만 exclusive lock은 불가하다. 리소스를 다른 사용자가 동시에 읽을 수 있게 하되 변경은 불가하게 하는 것이다.
- 어떤 자원에 shared lock이 동시에 여러개 적용될 수 있다.
- 어떤 자원에 shared lock이 하나라도 걸려있으면 exclusive lock을 걸 수 없다.
Exclusive lock (배타적 잠금, Write lock)
어떤 트랜잭션에서 데이터를 변경하고자 할 때 해당 트랜잭션이 완료될 때까지 해당 테이블 혹은 레코드(row)를 다른 트랜잭션에서 읽거나 쓰지 못하게 하기 위해 Exclusive lock을 걸고 트랜잭션을 진행시키는 것이다.
- exclusive lock에 걸리면 shared lock을 걸 수 없다.
- exclusive lock에 걸린 테이블,레코드등의 자원에 대해 다른 트랜잭션이 exclusive lock을 걸 수 없다.
- Exclusive Lock은 SELECT ... FOR UPDATE나 UPDATE, DELETE 등의 수정 쿼리를 날릴 때 각 Row에 걸리는 Lock이다.
오라클 LOCK
Latch, DML row lock, DML table lock, DDL lock 등으로 크게 이루어져있습니다.
기본적으로 Enqueue Lock으로 구현되어있습니다.
TX : where 조건에 해당하는 row 대해서 exclusive lock이 생긴다. 해당 row는 commit/rollback 전까지 다른 세션이 변경할 수 없다.
TM : TX lock 걸린 row가 저장된 테이블에 대한 lock이다.
RS, RX, S, SRX, X 총 5종류가 있다. RX 경우는 insert, delete 등 row exclusive mode이다. 각 lock 종류마다 호환되는게 다르기 때문에 확인해야한다.
Latch : Lock 과 비슷한 역할을 하는 것으로, 아주 가볍고 빠르게 리소스에 대한 동기화를 구현위함입니다. SGA 영역의 리소스를 보호하며, lock과 다른점은 queue로 관리되지 않으며 latch 획득의 순서를 보장하지 않습니다. 또한 획득방식윽도 willing-to-wait 및 no-wait 모드입니다. no-wait 모드를 통해 deadlock을 방지합니다.
문제 : ORA-01555: snapshot too old:rollback segment number %s with name "%s" too small
UNDO 세그먼트는 rollback / 읽기 일관성 용도를 갖는다. 하지만 undo retention이 지나거나, 해당 segment는 덮어씌워질 수 있다.
Consistent read란 read(=SELECT) 시 현재 DB의 값이 아닌 특정 시점의 DB snapshot을 읽어오는 것이다(commit 된 기준 시점이다.). 테이블 전체 lock을 걸어서 읽기 일관성을 유지할 수 있지만, 오라클은 undo segment를 이용한다. 나중에 consistent read 시 log 를 통해 특정 시점의 snapshot을 복구해서 가져온다.
하지만 다음과 같은 상황에서 ORA-01555문제가 발생할 수 있다.
1. 세션1: A테이블을 첫 번째 블록부터 조회 시작(SELECT)
2. 세션2: A테이블 100번째 블록 변경
3. A테이블 변경사항이 많아서 A테이블 100번째 블록에 대한 segment 내용이 overwrite 되어있음
4. 세션1: A테이블 100번째 블록데이터가 변경되어서 롤백하기 위해 undo segment를 사용해 읽으려고 했지만 없음(ORA-01555 에러)
해결책
1) undo segemnet를 늘려준다
2) 너무 큰 테이블 DML 시에는 DB내 다른 tx간 경합으로 인해 분할 DML 해야한다.
3) undo retention기간을 늘린다.
Reference
http://haisins.epac.to/wordpress/?p=2698
https://blog.daum.net/kook123/7333091
https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=361#
Lock
1. Lock 기본 가. Lock이란? 고가의 DBMS를 사용하는 이유로는 성능, 관리의 편이성 등 여러 가지 측면이 있지만, 무엇보다 트랜잭션 처리 능력이 가장 기본적이고 핵심적인 요소라고 할 수 있다. 같
dataonair.or.kr
https://aozjffl.tistory.com/m/197
Lock의 종류
DATA LOCK 유저가 INSERT, DELETE, UDATE, SELECT .. FROM .. FOR UPDATE OF 문장을 실행하면, 변경되는 ROW에 대한 ROW LOCK 과 TABLE 에 대한 TABLE LOCK 이 생긴다 ● LOCK TYPE - 의미 ◎ ROW LOCK ( TX ) INSERT INTO ... VALUE.. ;, DELET
aozjffl.tistory.com
'빅데이터 > 그 외' 카테고리의 다른 글
kerberos 예제 (0) | 2023.01.22 |
---|---|
[빅데이터] Impala & Hive & Sqoop 겪은 이슈들 (1) (0) | 2022.08.02 |
[빅데이터] Impala & Hive & Sqoop (0) | 2022.08.02 |
[빅데이터] 빅데이터 데이터 파일 포맷 (0) | 2022.08.01 |