본문 바로가기

Database/DB

DBMS core architecture 2

Buffer manager

- 버퍼 캐시를 관리하는 메인 메모리 영역,

- Replacement algorithm ( victim frame selection을 위한 dirty bits를 유지 관리 ) ==  페이징 교체 알고리즘   

 

 

1. 페이징 교체 알고리즘

1.1 victim frame selection

-  메모리는 프레임(frame) 단위

- 디스크의 페이지가 메모리에 올라오면 free frame에 할당하는데 만일 모든 프레임이 사용 중이라면 비어 있는 프레임 확보 필요. 이 작업을 victim frame selection이라 한다. 

- 프레임에 있는 페이지가 dirty 상태라면 디스크에 변경된 내역을 저장

- dirty 상태가 아니라면 프레임 clear()

 

Oracle, mysql(innodb) : LRU 알고리즘 사용

Ms sql, postgreSQL : Clock 알고리즘 사용

 

 

1.1.1 LRU Buffer Replacement algorithm

Free frame이 사용되면 LUR list의 앞으로 이동, 가장 마지막에 있는 프레임이 victim frame으로 선택되어 교체된다. 

1.1.2 Clock Buffer Replacement Algoithm

1. 버퍼 프레임을 시계 형태로 차례로 나열하고 현재의 시곗바늘은 가장 첫 번째 프레임을 가리키도록 초기화. 각 프레임의 참조 횟수를 0으로 초기화

2. 프레임이 사용되면 참조 횟수를 증가

3. Victim frame selection시 시곗바늘을 차례로 이동하며, 참조 횟수가 0보다 크면 -1 연산

4. 참조 횟수가 0인 프레임을 victim frame으로 교체

 

 

2. 메모리 아키텍처 비교

2. 1. 버퍼 리스트 관리 객체 구조

Chunks : 실제 데이터 로드 단위

page_hash : 해당 페이지가 로드되어 있는지 판단을 위한 버킷 주소 테이블

flush_list : block 리스트

Free : 미사용 block 리스트

LRU : 사용 중인 block 리스트

 

 

2. 2 리두 로그 메커니즘

 

In-memory undo에 Undo data block의 물리적인 변경 사항을 change vector를 저장하며, 

Change vector들을 병합하여 redo를 생성, 일정 단위마다(3초 or 버퍼 단위) redo log file에 추가

 

2. 2. 1 postgreSQL 리두

- 블록의 변경 사항을 xlog 레코드에 기록

- xl_rmid (리소스 매니저 id), xl_info(트랜잭션 정보 - insert/delete/update)를 기록

- checkpoint : 트랜잭션의 구분 지점 ( 트랜잭션의 시작 지점일 수도 중간지점일 수도 있다 )

- checkpoint단위로 리두가 기록되며, checkpoint 사이의 변경된 정보만 저장된다.

 

 

2. 2. 2 Mysql 리두

- 모든 변경 사항을 mtr(change vector) 구조로 저장

 

2. 3 트랜잭션 상태 보관 메커니즘

WAL( write ahead logging) - 트랜잭션을 먼저 로그로 기록하고, 데이터에 반영, 

데이터베이스의 갑작스러운 중지에 대응, 트랜잭션의 복제가 가능(클러스터)

 

트랜잭션 각각의 상태를 CLog파일에 저장, CLog 버퍼로 관리

 

 

 

 

 

참고 자료

http://www.datanet.co.kr/news/articleView.html?idxno=115592

http://wiki.gurubee.net/pages/viewpage.action?pageId=26739627

https://www.slideshare.net/pgday_seoul/pgdayseoul-2017-3-postgresql-wal-buffers-clog-buffers-deep-dive

'Database > DB' 카테고리의 다른 글

postGIS 쿼리 튜닝  (0) 2021.04.24
postgreSQL core  (2) 2020.06.15
DBMS core architecture 1  (0) 2020.06.12
postgreSQL 튜닝  (0) 2020.06.11
ERROR: cannot change sequence "*****"  (0) 2020.06.03