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 오브젝트 번호 |
.
.
.
'database > PostgreSQL' 카테고리의 다른 글
{PostgreSQL} 2장.2.Shared Buffer에서 버퍼 읽기 (0) | 2020.11.26 |
---|---|
{PostgreSQL} 2장.1.Shared buffer 구조 (0) | 2020.11.26 |
{PostgreSQL} 1장. 아키텍쳐 개요 (0) | 2020.11.26 |
Bulk IO 처리를 위한 IO전략과 Ring Buffer (0) | 2019.05.29 |
Buffer Replacement를 위한 Clock Sweep Algorithm (0) | 2019.05.29 |
댓글