2024. 7. 13. 14:44ㆍDBMS/ORACLE Admin
데이터베이스 버퍼 캐시 내의 버퍼들이 데이터베이스를 종료할 때까지 그대로 남아 있는 것은 좋은 방법이 아니다. Oracle은 메모리에서의 Queuing 알고리즘으로 LRU (Least Recently Used) 리스트를 사용하여 사용 빈도가 높은 버퍼일수록 더 오래 데이터베이스 버퍼 캐시 내에 존재할 수 있도록 관리한다. 자주 사용되지 않는 버퍼들의 경우 임의의 시점에서 데이터베이스 버퍼 캐시 밖으로 나가야 한다는 의미이다.
LRU 리스트
1. LRU 리스트: 더티 버퍼를 제외한 모든 버퍼를 관리한다.
2. Dirty 리스트 (LRUW): 같은 데이터 블록에 대한 데이터베이스 버퍼 캐시에 저장된 버퍼 이미지와 데이터 파일에 저장되어 있는 물리적인 블록 이미지가 서로 다른 버퍼(더티 버퍼)들을 관리하는 리스트이다.
Oracle은 리스트 스캔의 효율성을 위해 LRU 리스트나 Dirty 리스트를 다시 메인 리스트(Main list)와 보조 리스트(Auxiliary list)로 나누어 관리한다.
LRU 메인 리스트와 보조 리스트
LRU 리스트 (대체 리스트)
1. 메인 리스트: 사용된 버퍼들의 리스트로, 핫 영역과 콜드 영역으로 구분하여 관리한다.
2. 보조 리스트: 미사용된 버퍼들이나 DBWR(Database Writer)에 의해 기록된 버퍼들의 리스트를 관리한다.
LRUW 리스트 (Dirty 리스트)
1. 메인 리스트: 변경된 버퍼들의 리스트로, 더티 버퍼(Dirty buffer)들을 포함한다.
2. 보조 리스트: 더티 버퍼 중 현재 DBWR에 의해 기록 중인 버퍼들의 리스트를 관리한다.
이 구조를 통해 Oracle은 효율적으로 메모리를 관리하고, 자주 사용되는 데이터가 캐시에 오래 남아 있을 수 있도록 하며, 덜 사용되는 데이터는 필요에 따라 캐시에서 제거하여 메모리 사용의 효율성을 높인다.
LRU 리스트의 구조와 동작 방식
1. 핫 영역 (Hot region): 자주 사용되는 블록들이 머무는 영역이다.
2. 콜드 영역 (Cold region): 자주 사용되지 않는 블록들이 머무는 영역이다.
개별 버퍼는 터치 카운트(touch count)를 사용하여 관리된다. 프로세스가 버퍼를 스캔할 때마다 터치 카운트가 1씩 증가한다.
- LRU 끝에 있는 버퍼: 터치 카운트가 1이면서 프리 상태인 경우, 프리 버퍼로 사용된다.
- 터치 카운트가 2 이상인 블록: 핫 영역의 머리 부분(Head of hot end)으로 옮겨지고, 터치 카운트는 0으로 초기화된다.
데이터베이스 버퍼 캐시로 데이터 로딩 과정
사용자가 요청한 데이터를 디스크에서 읽어 데이터베이스 버퍼 캐시로 가져오는 과정
1. 프리 버퍼 확보:
- LRU의 보조 리스트에서 프리 버퍼를 먼저 확보한다.
- 프리 버퍼의 수가 충분하면 바로 사용한다.
- 프리 버퍼가 부족한 경우, 메인 리스트의 콜드 영역 끝(LRU end)부터 프리 버퍼를 찾는다.
2. 더티 버퍼 처리:
- LRUW 리스트(메인 리스트)에 존재하는 더티 버퍼들은 특정 조건이 만족되면 DBWR(Database Writer)에 의해 데이터 파일로 내려적혀진다.
- 더티 버퍼들은 프리 버퍼로 전환되면서 LRU의 보조 리스트에 등록된다.
자주 사용되는 데이터가 캐시 내에 오래 남아 있게 하며, 덜 사용되는 데이터는 필요 시 제거되어 메모리 효율성을 높이는 데 기여한다.
'DBMS > ORACLE Admin' 카테고리의 다른 글
Commit, Rollback (1) | 2024.07.14 |
---|---|
DB buffer cache 영역 구성 (0) | 2024.07.13 |
Buffer Cache - HashTable (0) | 2024.07.12 |
Reserved Pool & Chunk (0) | 2024.07.11 |
Flashback Database (0) | 2024.07.11 |