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