일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- helm
- Prometheus install
- Firelens
- github action 사용법
- 깃허브 액션
- jenkins
- 로드밸런서 컨트롤러
- AWS 딥레이서
- Aurora cluster
- blue-green
- LoadBalancer Controller
- 딥레이서
- EFS CSI Driver
- Kubernetes
- 딥레이서 보상함수
- SAA 합격 후기
- Kubernets on Jenkins
- 메탈LB
- 그라파나 대시보드
- EKS 클러스터
- 그라파나 시각화
- terraform
- 쿠버네티스
- 솔데스크
- 쿠버네티스 컴포넌트
- grafana on kubernetes
- headless service
- kubernetes 동작 원리
- Solution Architecture
- livenessPorbe
- Today
- Total
mingming
Oracle DB Architecture - Redo Log Buffer 본문
리두 로그 버퍼 ( Redo Log Buffer )
- 오라클은 오브젝트가 변경되거나 DML 작업에 의해 데이터가 변경되는 경우 변경에 대한 로그를 리두 로그 버퍼에 기록합니다.
- 해당 로그들은 리두 로그 버퍼에 기록 후 백그라운드 프로세스인 LGWR 프로세스에 의해 리두 로그 파일에 저장됩니다.
- 리두 로그 버퍼의 크기는 LOG_BUFFER 파라미터로 지정 할 수 있습니다.
- 오브젝트 및 데이터 변경 시 생성되는 로그를 저장하는 SGA 메모리 공간입니다.
- 데이터베이스내의 모든 변경 작업에 대한 복구를 지원합니다.
- 아래의 명령으로 버퍼의 크기를 확인할 수 있습니다.
SQL> show sga
Recovery & Rollback
항목 | 개념 | 주체 |
Recovery | 장애에 대한 데이터베이스 복구 | 리두 로그 파일 + 언두 데이터 |
Rollback | 작업에 대한 작업 전 데이터로 복구 | 언두 데이터 |
Redo Log 생성 과정
1. 데이터 블록 변경 제한 : DML이 발생하는 대상 데이터 블록에대해 다른 세션에서의 변경을 방지하게 됩니다.
2. 리두 로그 생성 : 트랜잭션을 수행한 세션에서 실제 DML 전에 여러 개의 리두 로그를 생성한다. 여서 생서오딘 리두 로그를 리두 로그 버퍼에 기록하게 되며 이를 Write-Ahead 로깅이라고 하게 됩니다.
3. 통계 정보 수집 : 리두 로그를 생성한후에는 해당 리두 로그에 대한 통계 정보를 수집하여 저장하게 됩니다
4. 리두 Copy Latch 수집 : 리두 로그를 리두 로그버퍼에 기록하기 위해서는 리두Copy Latch를 획득해야 합니다. 리두Copy Latch는 리두로그버퍼에 로그를 기록하는 Latch 입니다.
5. 리두Allocation Latch 획득 : 리두 Copy Latch를 획득한 후에는 리두 Allocation Latch를 획득해서 리두로그 버퍼로부터 로그를 기록할 수있는여유 공간을 할당받아야 합니다.
6. SCN 할당 : 리두 Allocation Latch를 획득한 후에는 SCN을 할당합니다.
7. 리두 로그 버퍼 공간 확인 : 리두Copy Latch와 리두 Allocation Latch를 획득한 이후에는 리두 로그 버퍼에 공간이 존재하는지 확인합니다. 확인 후 리두 로그를 기록할 공간이 존재하면 8단계를 수행하고, 공간이 없다면 10단계를 실행하게 됩니다.
8. 리두 로그 기록 : 리두 로그 버퍼에 공간이 존재하므로 리두 로그를 리두 로그 버퍼에 기록합니다.
9. 리두 Writing Latch 획득 : 리두 로그 버퍼에 공간이 없으면 해당 서버 프로세스는 리두 Writing Latch를 획득하게 됩니다.
리두 Writing Latch는 데이터베이스에 하나만이 존재하며 해당 Latch를 획득한 서버 프로세스만이 LGWR 백그라운드 프로세스를 기동시킬 수 있습니다.
10 . LGWR 기동 : 리두 Writing Latch를 획득한 프로세스는 LGWR 백그라운드 프로세스를 기동시켜 리두 로그 버퍼의 내용을 리두 로그파일에 기록하고 여유 공간을 확보하게 됩니다. 여유 공간 확보 후 8단계를 수행하게 됩니다
Latch 와 Enqueue
Latch 와 Enqueue는 락을 구현하기 위한 종류이며 많은 차이를 발생시키게 됩니다. Latch는 짧은 시간동안 메모리 등의 자원에 락을 수행하는 부분에서 사용되며 Enqueue는 테이블 및 인덱스 등의 작업 시 오래 시간 동안 락을 수행하는 부분에서 이용하게 됩니다.
항목 | Latch | Enqueue |
대상 자원 | 메모리 | 오브젝트 |
락 모드 | 대부분 Exclusive 모드 | Excusive/Share 모드 |
자동 여부 | 자동으로 수행 | 인위적으로 수행 |
락 시간 | 짧은 시간 | 짧은 시간/긴 시간 |
리두 로그 관련 Latch
리두 로그 버퍼는 메모리 영역이므로 해당 공간에서 락이 필요하게 되면 Latch를 사용하게 됩니다.
항목 | 개수 | 설명 |
리두 Allocation Latch | 1개 존재 | 리두 로그 버퍼에서 사용할 공간 할당 |
리두 Copy Latch | N개 존재 | 리두 고르 버퍼에 리두 로그를 기록 |
리두 Writing Latch | 1개 존재 | LGWR을 기동시켜 리두 로그 버퍼의 내용을 리두 로그 파일에 기록 |
리두 Less 작업
과다한 트랜잭션을 수행하여 리두 로그를 많이 생성한다면 성능 저하가 발생할 수 있습니다. 이때 리두 Less 작업을 이용할 수 있습니다.
리두 Less 작업은 최소한의 리두 로그만을 기록하여 작업속도가 향상되지만 장애 발생 시 복구가 불가능 하다는 단점이 있습니다.
항목 | 사용 방법 | 내용 |
SQL 로더의 직접 로딩 | Unrecoverable 옵션 사용 | OS의 일반적인 읽을 수 있는 파일을 오라클 테이블로 로딩하는 경우 사용 |
Insert 에서의 직접 로딩 | Apeedn 힌트 이용 /Nologging 옵션 이용 |
Select 후 Insert 하는 대용량 Insert에서사용 가능 |
인덱스 Rebuild | Nologging 옵션 이용 | 많은 DML로 인덱스의 균형이 어긋나는 경우 주기적으로 수행하는 작업 |
인덱스 생성 | Nologging 옵션 이용 | 조회 속도 향상을 위한 인덱스 생성 작업 |
Create Table As Select (CTAS) | Nologging 옵션 이용 | 기존 테이블을 복사하는 경우 사용 |
'새싹 하이브리드 클라우드 > Database' 카테고리의 다른 글
Oracle - 메모리 관리 (2) | 2023.10.17 |
---|---|
Oracle DB Architecture - Process (0) | 2023.10.12 |
Oracle DB Architecture - Data Buffer Cache (0) | 2023.10.11 |
Oracle DB Architecture - Shared Pool (0) | 2023.10.11 |
Oracle 데이터베이스 Use Case (0) | 2023.10.11 |