본문 바로가기
database/PostgreSQL

Buffer Replacement를 위한 Clock Sweep Algorithm

by 문파워 2019. 5. 29.

[PostgreSQL 9.6 성능이야기] 편,

스리슬쩍 공부한다꼬 책 보면서 요약

내용에 틀린 부분이 있을 수 있음!

 

- Victim

Share Buffer 내에 empty buffer 없다면 Share Buffer 내의 버퍼를 디스크에 기록해야 한다.

이때 디스크로 기록되는 버퍼를 Victim 버퍼라고 한다.

 

- Buffer Replacement Algorithm

Victim 버퍼를 선정하는 중요한 알고리즘으로 

Share Buffer 의 목적이 Disk read 를 최소화해서 성능을 향상하기 위한 것이므로,   효율적으로 버퍼를 관리하기 위해 사용된다

 

- Clock Sweep Algoritm

PostgreSQL은 Buffer Replacement 를 위해서 Clock Sweep 알고리즘을 사용한다

Not Frequently Used, NFU 알고리즘의 일종으로, 덜 사용된 버퍼를 Victim 버퍼로 선정하는 알고리즘이다.

버퍼를 시계방향으로 탐색하면서 Victim버퍼를 찾는다.

 

- BM_MAX_USAGE_COUNT (default 5)

버퍼를 액세스 할 때마다 state의 usage_count+=1 ; -- 1만큼 증가시킨다.

BM_MAX_USAGE_COUNT 에 정의된 수치만큼만 증가한다.

 

- Victim 버퍼로 선정

refcount와 usage_count가 모두 0 인 버퍼를 Victim  버퍼로 선정한다.

-- 만일 Victim 버퍼가 dirty버퍼이면 해당 버퍼 내용을 디스크에 기록한다.

 


 

- 공정한 경쟁

ORACLE의 터치 카운트 알고리즘에서 N초 이내에 동일 버퍼에 발생한 엑세스는 touch_count를 증가시키지 않는 것과 같다.

PostgreSQL에서 N초 이내에 동일한 버퍼에 대한 엑세스가 수십만번 발생하더라도 usage_count 는 5 (=BM_MAX_USAGE_COUNT) 이고

특정 시점에 아무리 액세스를 많이 해도 Clock Sweep 6차례 회전하기 전에 다시 액세스되지 않는다면 해당 버퍼또한 Victim 버퍼로 선정된다.

 

 

 

.. 노랑색은 좀 더 살펴보기 ..

댓글