ORACLE : UNDO : ORA-1550
다른 RDBMS : Row Lock : 일관성, 동시성 문제
계좌번호 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
잔고 | 1,000 | 1,000 | 1,000 | 1,000 | 1,000 | 1,000 | 1,000 | 1,000 | 1,000 | 1,000 |
TX1> select sum(잔고) from 계좌
TX2> update 계좌 set 잔고 = 잔고 + 100 계좌번호 = 7; 1번
TX2> update 계좌 set 잔고 = 잔고 - 100 계좌번호 = 3; 2번
1. TX1 : 2번 계좌까지 읽는다.
2. TX2 : 1번을 UPDATE 을 실행한다.
3. TX1 : 6번 계좌까지 읽는다
4. TX2 : 2번을 UPDATE 하고 Commit 한다
5. TX1 : 10번 계좌까지 읽어내려간다.
트랜잭션 고립화 수준 | 방식 | 문제 |
---|---|---|
Level1, Read Committed (기본) | 값을 읽는 순간 Shared Lock | 값을 읽는 순간에만 Shared Lock을 걸었다가 다음 레코드로 이동할 때 Lock을 해제되므로 이미 읽고 지나간 레코드를 다른 트랜잭션이 변경가능. |
Level2, Repeatable Read | 트랜잭션동안 Shared Lock | 동시성저하, 교착상태 Dead lock 발생 |
SCN 는 시간정보를 이용해 데이터베이스의 일관성 있는 상태 유지하는데 사용되는 Gobal변수.
( 읽기 일관성, 동시정제어, 생성된 REDO 로그 정보 순서 식별, 데이터 복구에 이용.)
쿼리 SCN(System commit number) : 쿼리가 시작한 시점의 SCN 넘버.
블록 SCN(System change number) : 블록이 마지막으로 갱신된 시점.
Current 블록 SCN <= 쿼리 SCN 이며, committed 상태
Current 블록 SCN > 쿼리 SCN 이며, committed 상태
Current 블록 Active 상태, 즉 갱신중 인것으로 표시 하고 있을때
다중 버전 일기 일관성 모델 (Multi Version read Consistency Model)
Snapshot too old가
_imu_pools ( in memory undo pools )
_in_memory_undo ( Make in memory undo for top level transactions )
POOL NAME BYTES
------------ -------------------------- ----------
shared pool KTI-UNDO 1901664
UNDO 세그먼트 헤더 블록과 UNDO 세그먼트 블록 버퍼에 대한 래치 경합 및
Pinning 을 줄일 수 있다.
관련된 Latch : In_memory_undo_latch
_db_block_max_cr_dba = 6
( Maximum Allowed Number of CR buffers per dba )
블록당 6개 까지만 CR Copy를 허용 (가득 차면 오래된 CR Copy 부터 밀려남)
LRU 리스트에서 항상 LRU END 쪽에 위치 (메모리 부족시 가장 먼저 밀려남)
- 강좌 URL : http://www.gurubee.net/lecture/3070
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.