카테고리 없음

postgresql 메모리구조

dbavayne 2022. 12. 20. 17:15

postgresql 메모리 아키텍처

oracle          postgresql

data buffer cache = shared buffers
redo log buffer    = wal buffers
트랜잭션 커밋여부    clog buffers

shared buffers 
1. hash table  - 데이터가 메모리에 로드되어 있는지 
변수는 sharedbufhash 이고 변수의 구조체는 HTAB 이다. 
hctl , dir 이 중요하다.
hctl -freelist 정보를 포함 
hash segment - buffer hash partition / dir / segment / hash element 포함
buffer hash partition = 헤시 엘리먼트 추가시 락을 설정하는 역할
dir - 각 세그먼트의 시작위치를 가르킴 dir개수 = 세그먼트 개수
segment - 버킷 헤더들의 배열
hash element - 해시테이블 엔트리의 개별적인 파트

input parameter로 buffertag를 사용하여 hashvalue 생성한다.
- hashvalue를 input값으로 and연산해 해키버킷생성 > 해키테이블 연결

*buffertag(spcNode, dbNode, relNode, forkNum, blockNum)

hash element pool = hash element 집합


2. buffer pool - 메모리상에 저장하는 장소

버퍼 디스크립터- 헤더에 해당하며 버퍼 블록 슬롯에 대응하는 메타 데이터 포함 

버퍼 블록 - 실제 데이터가 저장된 배열 

buffer strategy contrl - free buffer를 관리 


* clock sweep 알고리즘
> 사용빈도가 가장 낮은 것을 선택하는 알고리즘 
> free buffer가 존재하지않으면 victim buffer를 선정한다. 
> 첫번째 buffer id부터 순차적 진행, 해당 buffer id의 usage_count를 확인
> usage_count가 0 인것을 victim buffer로 선정
> victim buffer는 디스크에 써내려지고 usage_count가 1로 변경

wal buffers

wal segment file(xlog)- max_wal_size, min_wal_size에 의해 개수가 정해짐

pg_xlogdump
> wal 파일의 트랜잭션 로그별 유틸리티

clog buffers(shared memory에 할당)

commit log의 약자로 트랜잭션id에 할당된 커밋상태를 저장

트랜잭션 상태 - 
00-in_progress 
01-committed  
02-aborted      
03-sub_commited