본문 바로가기
database/PostgreSQL

Shared Buffer 동작 원리

by 문파워 2019. 5. 29.

2020/11/26 - [database/PostgreSQL] - {PostgreSQL} 2장.1.Shared buffer 구조


 

[PostgreSQL 9.6 성능이야기] 편,

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

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

 

 

- Shared Buffer 구성

 

 공유 리소스

디렉토리, 해시 세그먼트, 해시 테이블은 모두 Shared Bufferr 내에 존재하는 공유 리소스이다

 

- LW락 (Light Weight, ORACLE 에서는 Latch 라고 표현.)

공유 리소스는 LW락을 이용해서 보호한다. 즉, Backend 프로세스가 공유 메모리를 액세스하기 위해서는 LW락을 획득해야 한다.

테이블 내의 데이터를 보호하는 락과는 다른 개념.

 

- 버퍼 파티션 (NUM_BUFFER_PARTITIONS)

해시 테이블을 관리하는 LW락이 1개라면, 해시 테으블을 액세스하는 대다수 프로세스는 LW락을 대기하게 된다.

PostgreSQL은 이 문제점을 해결하기 위해서 해시 테이블을 N개의 버퍼 파티션으로 나누고,

버퍼 파티션마다 1개의 LW락을 할당하는 방식을 사용한다

 

 

엘리먼트 구성요소

엘리먼트 KEY 구성요소

 BufferLockupEnt 구조체
Buffer Tag 구조체

int                                            버퍼 디스크립터 배열 인덱스

RelFileNode 구조체

forkNum (Frok 번호)

:오브젝트 유형을 의미

: 0 - 테이블 또는 인덱스

: 1 - FSM

: 2 - VM

blockNum (블록 번호)

spcNode 테이블 스페이스 번호
dbNode 데이터베이스 번호
relNode 오브젝트 번호

 

.

.

.

댓글