티스토리 뷰

DataBase

리두와 언두의 동작

메성 2019. 12. 9. 10:29
반응형

리두와 언두를 왜 배워야 하는 가?

- 리두와 언두에 대한 설명에 들어가기에 앞서 ACID 특성이 대체 무엇인지를 먼저 보도록 함

[ATOMICITY 원자성]
- 트랜잭션에 포함되는 데이터 변경은 전부 OK이거나 모두 NG라는 all or nothing임.
- DBMS는 트랜젝션의 데이터 일부만을 변경할 수 없음

[OCNSISTENCY 일관성]
- 트랜잭션에 의해 데이터 간의 일관성이 어긋나서는 안됨
- 고객 테이블의 데이터가 변경됐는데도 고객 테이블의 인덱스 데이터는 변경되지 않음

[ISOLATION 고립성]
- 트랜잭션끼리는 고리보디어 있으며 독리보디어 있다는 의미
- 어떤 트랜잭션을 단독으로 실행했거나 다른 트랜잭션과 동시에 실행하더라도 결과는 같아야 한다는 것

[DURABILITY 지속성]
- 커밋한 트랜잭션의 장애가 발생하더라도 데이터는 반드시 복구되어야 함

[ACID 특징]
- 일관성 : 데이터 변경 시 인덱스도 변경되어야 함
- 지속성 : 장비가 거지더라도 커밋한 데이터는 복구할 수 있어야 함
- 원자성 : 어중간한 데이터 변경은 안됨
- 트랜잭션 단위로 변경되어야 함
- 다른 트랜잭셔노가 동시에 실행하든 하지 않든 결과는 같아야 함

리두와 언두의 개념

- 리두 로그 : 누군가 무엇을 했다는 정보
- 언두 : 어떻게 하면 과거의 상태로 돌아갈 수 있는지에 관한 정보

- 리두 로그를 사용해서 과거의 데이터를 최신 데이터 쪽으로 흐르게 하는 것을 롤 포워드라고 함
- 언두의 정보를 사용해서 변경을 취소하는 것을 롤백이라고 함.

리두의 아키텍처

- 데이터의 변경은 캐시 위에서 이루어짐 그 때, 리두 로그라고 불리는 로그 데이터가 생성됨
- 리두 로그용 메모리로서 리두 로그 버퍼가 공유 메모리에 존재함
- 리두 로그를 디스크에 기록하는 것은 LGWR이라고 불리는 프로세스임
- 리두 로그 파일이 일시적인 리두 로그의 보관 창고이며, 아카이브 리두로 그 파일이 오랜 시간 보관할 수 있는 본격적인 보관 창고
- 리두 로그 파일은 매우 중요한 파일이므로 반드시 다중화

[프로세스의 동작 수준]
1. 서버 프로세스는 커밋했을 때 LGWR 프로세스에 리두 로그를 기록하도록 의뢰함
2. 의뢰를 받은 LGWR 프로세스는 리두 로그를 리두 로그 파일에 기록함
3. 기록이 끝나면 LGWR 프로세스가 서버 프로세스에 기록이 끝났다고 통보함
4. 서버 프로세스는 커밋이 끝난 것을 오라클 클라이언트에게 통보

리두의 정리

- 병렬 처리를 가능케하고 높은 처리량을 실현함
    - 리두 로그를 기록하는 데에서도 LGWR은 여러 서버 프소세스의 리두 로그를 한 번에 기록하기 때문에 높은 처리량을 구현할 수 있음.
- 응답을 중시함
    - 커밋할 때 블록을 디스크에 기록하지 않고 리두 로그에 기록하는 것으로 빠른 커밋을 구현할 수 있음
- 커밋한 데이터는 지킴
    - 장비에 장애가 발생하여 DBWR이 데이터를 기록할 틈도 없었다고 가정하더라도 그 후에 리두 로그와 데이터 파일에 남아 있는 오래된 데이터를 사용해서 데이터를 복구(롤 포워드) 할 수 있음.

언두의 아키텍처

- 데이터가 변경되면 언두 정보가 생성됨.
- 언두 정보는 세그먼트에 보관되어 있음
- 세그먼트에 보관되어 있으므로 어딘가의 테이블 스페이스에 보관되어 있다는 것을 알 수 있으며, 해당 테이블 스페이스를 언두 테이블 스페이스라고 부름.
- 언두 테이블 스페이스에는 여러 개의 언두 세그먼트가 생성됨
- 언두 세그먼트는 링 버퍼 인데, 링 버퍼는 조금 지나면 데이터가 덮어싀워지는 버퍼지만, 커미사힞 않은 데이터는 덮어써지지 않음
- 언두 세그먼트는 일정 기간 데이터를 보관하면 한 바퀴 돈 후 이전 데이터를 덮어쓰기 때문에 링과 같은 모양으로 표시함.

리두와 언두의 동작

[롤백할 때의 동작]
- 롤백이 수행된다면 언두 정보를 사용하는 것으로 데이터를 원래의 값으로 변경

[읽기 일관성에 동반되는 동작]
- 데이터를 검색할 대 어떤 시점의 데이터를 보여주는 기능을 말함
- 검색 중에는 계속해서 검색을 시작한 시점의 데이터를 보여주는 것을 말함
- 이런 읽기 일관성을 위해서 언두를 사용함
- 읽기 일관성은 데이터가 변경된 시점을 확인하고, 검색을 시작한 후에 변경된 데이터일 때는 언두를 사용해서 메모리 위에 과거의 데이터를 재현

[커밋되지 않은 데이터를 읽어 올 때의 동작]
- 다른 세션의 커밋한 변경 데이터는 읽을 수 잇음
- 다른 세션의 커밋되지 않은 변경 데이터를 읽어 올 수는 없음
- 이런 때도 읽기 일관성과 마찬가지로 변경되기 이전의 데이터를 보여줌

[ORA-1555 에러가 발생했을 때의 동작]
- 이 에러는 과거의 데이터를 보러 갔으나 필요한 정보가 없어졌다라는 것을 의미함
- 대부분 시간이 오래 걸리는 검색을 할 대 언두 정보가 덮어써진 것이 원인
- 시간이 길어지고 데이터를 많이 변경하면 언두 정보가 덮어씌워짐
    - UNDO RETENTION을 길게 혹은 언두 테이블 스페이스를 확보 후 UNDO RETENTION을 조정해야 함
- 데이터를 쌓는데 삭제 가능한 정보를 언두가 가지고 있을 때는 덮어씌우면 되나, 중요한 정보를 언두에 쌓으려고 할 때는 언두를 확장 후 데이터를 삽입

[체크포인트의 동작]
- 체크포인트는 일 단위 혹은 월 단위로 찍어 데이터를 디스크에 기록하는 것
- 체크포인트는 메모리의 데이터를 디스크와 동기화하는 작업을 말함.
- 구체적으로는 DBWR이 메모리에서 디스크로 데이터를 기록
- 체크포인트에 의해 정기적으로 데이터를 디스크에 기록하고 롤 포워드에 걸리는 시간을 줄일 수 있도록 하고 있음.
    - 캐시 말고 DATA FILE의 DATA와 리두 로그 파일을 사용해서 실시간 DATA를 복원

[인스턴스 복구 시의 동작]
-   리두를 먼저 실행 후 언두를 실행
-   리두 내에는 언두에 대한 정보를 가지고 있음
-   컴퓨터는 돌발적으로 장애가 발생할 수 있음
-   데이터 파일에 리두 로그를 적용하고 데이터를 최신 상태로 갱신
    -   이 때, 난감한 부분은 커밋하지 않은 데이터를 어떻게 처리할 지인데, 언두를 활용하여 롤백하여 원자성을 지킴
-   실은 언두의 갱신 정보도 리두 로그에 들어가 있기 때문에 롤 포워드함으로 언두를 최신 상태로 만듬
-   기동할 때 자동으로 수행되는 이런 복구를 인스턴스 복구라고 부름.

정리

-   리두는 오래된 데이터를 최신 데이터로 만들기 위해 존재
-   언두는 최신 데이터를 오래된 데이터로 만들기 위해 존재
-   읽기 일관성을 위해 언두를 사용
-   ORA-01555가 발생 시 우선 undo\_retention이나 언두 테이블 스페이스의 크기를 튜닝할 것을 검토
-   장비에 장애가 발생하거나 인스턴스가 비정상 종료했을 때는 리두와 언두를 사용해서 데이터를 복구하고 커밋하지 않은 데이터의 롤백을 수행  
반응형

'DataBase' 카테고리의 다른 글

[MySQL] MyISAM  (0) 2020.02.17
[MySQL] MySQL 스토리지 엔진  (0) 2020.02.17
오라클의 대기와 락  (0) 2019.12.09
오라클의 데이터 구조  (0) 2019.12.09
커넥션과 서버 프로세스의 생성  (0) 2019.12.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함