2011. 8. 23. 23:31
Snapshot too old DataBase이야기2011. 8. 23. 23:31
Session01
select * from emp; //1000만건의 데이터 조회, 수행시간 10분
Session02
update emp
set deptno = 30
where empno = 7788; // 7788을 가진 로우의 deptno을 30으로 변경
commit; //commit 0.001초
Session03
insert into test01
as
select * from dummy connect by level <= 100000 //test01에 10만건 삽입 수행시간 10분
여기서 UndoSegment의 저장공간이 적게 되면 Snapsot too old가 발생
그이유는 Consistent Read 이기 때문이다.
Session01에서 데이터를 메모리에 올리다가 update문에 의해 수정된 로우를 보고(SCN이 쿼리를 날린 SCN보다 미래시점임) 과거데이터를 가져오려고 한다.
하지만!!! UndoSegment에는 그 데이터는 Session03에 의해 덮어 쓰여져 버렸으므로 데이터가 없다!!!
DML작업이 발생하면 UndoSegment와 RedoSegment에 데이터를 쓰게 된다.
UndoSegment는 일관된 일기를 제공하기 위해,
RedoSegment는 백업을 제공하기 위해
select * from emp; //1000만건의 데이터 조회, 수행시간 10분
Session02
update emp
set deptno = 30
where empno = 7788; // 7788을 가진 로우의 deptno을 30으로 변경
commit; //commit 0.001초
Session03
insert into test01
as
select * from dummy connect by level <= 100000 //test01에 10만건 삽입 수행시간 10분
여기서 UndoSegment의 저장공간이 적게 되면 Snapsot too old가 발생
그이유는 Consistent Read 이기 때문이다.
Session01에서 데이터를 메모리에 올리다가 update문에 의해 수정된 로우를 보고(SCN이 쿼리를 날린 SCN보다 미래시점임) 과거데이터를 가져오려고 한다.
하지만!!! UndoSegment에는 그 데이터는 Session03에 의해 덮어 쓰여져 버렸으므로 데이터가 없다!!!
DML작업이 발생하면 UndoSegment와 RedoSegment에 데이터를 쓰게 된다.
UndoSegment는 일관된 일기를 제공하기 위해,
RedoSegment는 백업을 제공하기 위해
'DataBase이야기' 카테고리의 다른 글
plan_table 조회하기 (0) | 2011.08.25 |
---|---|
래치와 락 (0) | 2011.08.24 |
INDEX UNIQUE SCAN과 INDEX RANGE SCAN (0) | 2011.08.23 |
LCO DataStructure (0) | 2011.08.23 |
Connect by Prior (0) | 2011.08.23 |