기술 정보
home
채널 소개
home

Current Read 모드

문서 유형
기술 정보
분야
관리/환경설정
키워드
Current Read
consistent
tsn
1 more property

개요

SQL 시작시점이 아닌 실제 블록을 액세스하는 그 시점의 최종값을 읽는 Current Mode 상태에서 update를 수행하는 방법을 예제를 통해 안내합니다.
참고
Consistent Mode VS Current Mode 비교
Consistent Mode
Current Mode
명칭 (SQL trace)
Query
Current
명칭 (tbSQL autotrace)
consistent gets
db block gets
정의
TSN 확인 과정을 거치며 읽기 일관성이 보장된 상태에서 데이터 블록을 읽는 모드
실제 블록을 액세스하는 그 시점의 최종값을 읽는 모드
특징
- 대부분의 SELECT 쿼리가 해당 - 쿼리가 시작된 시점을 기준으로 일관성 있게 읽음 - 읽는 도중에 값이 바뀌더라도 쿼리 시작 시점의 값으로 읽음
주요 발생 경우 - DML 또는 디스크 소트가 필요할 정도의 대용량 정렬 시 - SELECT FOR UPDATE 수행 시 - table full scan 시 대상 세그먼트의 익스텐트 정보를 읽을 시

방법

예제 테이블 데이터 생성

drop table acc1; create table acc1(accno number, amt number, tamt number); insert into acc1 select level, 1000, 2000 from dual connect by level <= 100000; ALTER TABLE acc1 ADD CONSTRAINT PK_acc1_accno PRIMARY KEY(accno); exec dbms_stats.gather_table_stats('TIBERO','ACC1',estimate_percent=>100,method_opt=>'FOR ALL COLUMNS SIZE 254');
SQL
복사

Current 모드로 읽기 작업 수행

계좌.잔고를 Current 모드로 읽습니다.
update 중 계좌.잔고에 변경이 발생하면 영향을 받습니다 ( 현재 값 사용)
update 계좌 set 총잔고 = 잔고 where 계좌번호=7788;
SQL
복사
아래 실행 예제에서 Session B 의 UPDATE 구문을 통해 계좌.총잔고는 1100 (current 읽기 모드 수행) 이 됩니다.
No.
Session A
Session B
1
SQL> select amt, tamt from acc1 where accno=7788; AMT TAMT ---------- ---------- 1000 2000
2
SQL> update acc1 set amt=amt+100 where accno=7788;
3
SQL> select amt, tamt from acc1 where accno=7788; AMT TAMT ---------- ---------- 1100 2000
SQL> select amt, tamt from acc1 where accno=7788; AMT TAMT ---------- ---------- 1000 2000
4
SQL> update acc1 set tamt=amt where accno=7788;
5
(no.2) 에서 발생한 row lock (acc1 테이블의 accno=7788 에 해당하는 row대기)
6
SQL> commit;
7
- (no.6)commit 이후에 update 수행 - 위에서 amt 컬럼은 update 대상 row 이므로, current 읽기 모드 수행 (amt 값은 1100 사용)
8
SQL> select amt, tamt from acc1 where accno=7788; AMT TAMT ---------- ---------- 1100 2000
SQL> select amt, tamt from acc1 where accno=7788; AMT TAMT ---------- ---------- 1100 1100
9
SQL> commit;
10
SQL> select amt, tamt from acc1 where accno=7788; AMT TAMT ---------- ---------- 1100 1100
SQL> select amt, tamt from acc1 where accno=7788; AMT TAMT ---------- ---------- 1100 1100