생계/PostgreSQL2025. 7. 7. 10:56
반응형

Postgresql Memory 는 어떻게 구성되어 있는지 알아보자 

아래는 Postgresql 의 메모리 구조이다.

출처 : https://dbsguru.com/postgresql-architecture-memory-components/

크게 보면 오라클의 SGA 처럼 인스턴스 전체에서 공유해서 사용하는 Share memory 와 각 backend 프로세스가 
독립적으로 사용하는 local memory , 그리고 OS cache 가 있다.
 
1. shared memory

- shared buffers : 디스크에서 읽은 데이터블록을 캐싱하는데 사용되는 메모리
 디폴트 : {DBInstanceClassMemory / 32768}
 m타입 2xlarge 의 경우 => 32GB / 32768 = 1,049,088 개의 블록을 사용
 실제 메모리 할당값은 1,049,088 * 8k = 8,392,704KB≈8GB

- wal buffers : 디스크에 쓰기전에 WAL 레코드를 보관하는데 사용되는 메모리 
  이값이 2048 이면 2048 개의 8k block 을 사용한다는 의미. 
  실제 할당값은 2048 * 8k = 16MB

- clog buffers : 트랜잭션의 커밋/롤백 상태를 추적하는 내부 시스템 캐시 , 설정불가 

* 오라클과 다르게 postgresql에서는 트랜잭션과 별도로 커밋상태를 관리하는 버퍼가 존재한다.

* shared memory 는 보통 전체 인스턴스 메모리의 1/4 정도를 할당한다.

 
2. Local memory (per backend)

work_mem : 임시 디스크파일을 사용하기 전에 정렬 및 해시 작업에 사용. 
temp buffers : 세션별 임시 테이블 데이터를 위한 버퍼 
maintenance_work_mem  : vacuum, create index 등 유지관리 작업에서 사용하는 최대 메모리 
  *   세션단위 설정 : show maintenance_work_mem;
                              set maintenance_work_mem  ='1024MB';
    
3. OS free memory 
effective_cache_size : 쿼리 플래너에게 운영체제와 postgresql 이 사용할수있는 디스크 캐시의 총량 추정치
   {DBInstanceClassMemory / 16384}

반응형
Posted by 돌고래트레이너