공부 이야기/ORACLE
[Oracle] Isolation level과 Snapshot too old
mind:
2024. 5. 19. 21:35
결론부터 말하면 둘은 관계가 없다.
Isolation level 3단계 Repeatable Read에서 처음 트랜잭션을 보장하는데 왜 Snapshot too old가 발생할 수 있을지 생각해봤다.
Repeatable Read는 트랜잭션을 보장하는 것이지 Undo 세그먼트를 보장하는 것이 아니기 때문이다.
Undo 세그먼트는 하나 이상의 트랜잭션에 씌워질 것이므로 Repeatable Read, Serializable에 의해 트랜잭션을 보장한다고 해도 다른 트랜잭션에서 메모리를 할당해버리면 도무지 피할 수 있는 방법이 없기 때문이다.
심지어 commit이 완료된 데이터일지라도 Undo 세그먼트에서 Retention보다 길어지면 덮어씌워진다.
물론 이 경우는 commit된 데이터를 flashback해서 굳이 사용하지 않는 이상 Snapshot too old가 발생하지는 않을 것이다.
Snapshot too old를 방지하기 위해서 Retention 파라미터 값을 늘리거나, Undo 세그먼트 할당 메모리 크기를 키울 수 밖에 없다.