본문 바로가기

빅데이터/그 외

[빅데이터] LOCK & Sqoop 이슈 - ORA-01555

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

 

https://oracledo.tistory.com/m/55