Note-Notice
➽|PostgreSQL : 메모리 동작방식
↘ 메모리 구성 - Shared / Local Memory 일반

- Shared Memory
- 모든 세션이 공유해서 사용하는 공간
- 모든 세션이 공유해서 사용하는 공간
- Local Memory
- Client 별로 개별/전용으로 할당되는 공간
- SQL문 처리에 필요한 공간
- Connection 다량 발생 시 Local Memory 사용량 증가하게됨
- OS Memory 공간 고려가 필요
↘ 동작방식 : Shared Memory
title: Shared Memory - 데이터베이스 기동 시의 공용 메모리 공간
- Shared Memory는 Client의 요청으로 생성된 모든 Backend 프로세스에 의해 공유되는 영역
- 참고 : 클라이언트가 데이터베이스 접속요청 시, Backend 프로세스를 위한 Local Memory를 할당한다.
- 참고 : 클라이언트가 데이터베이스 접속요청 시, Backend 프로세스를 위한 Local Memory를 할당한다.
↳ Shared Buffers
title: 데이터와 데이터의 변경사항을 Block 단위로 저장하고 공유되는 공간-
Shared Buffers

- 데이터와 데이터의 변경사항을 Block 단위로 저장 / 논리적 I/O를 수행 (None-물리I/O)
- 상기 Block == Shared Buffers에 기록되는 단위 ⇒> Page Size, 8Kb(Default)
Parameter : shared_buffers
- Client로 부터 요청된 데이터와 변경 요청된 데이터를 저장하고 있음
- 물리적 I/O를 수행하지 않아 빠르게 처리할 수 있다.
- 데이터와 데이터의 변경사항을 Block 단위로 저장 / 논리적 I/O를 수행 (None-물리I/O)
-
동작방식
- Client로 부터 데이터요청 →>
- Shared Buffers에 데이터 존재 X, 디스크에 있는 테이블로 부터 데이터 Read,
Shared Buffers에 적재(Load) 후 Client로 전달 - Shared Buffers에 데이터 존재 O, 버퍼의 데이터를 Read하여 Client로 전달
- Shared Buffers에 데이터 존재 X, 디스크에 있는 테이블로 부터 데이터 Read,
- 동일/다른 세션에 상관없이, 요청한 데이터가 shared buffers에 존재할 경우,
메모리에 적재된 데이터(Page)를 공유/재활용 하는 형태
- Client로 부터 데이터요청 →>
≫ CMD : CHECK
- 확인 : 환경파일
# PGDATA=PostgreSQL Database Path cat ${PGDATA}/postgresql.conf | grep -F "shared_buffers"
- 확인 : SHOW COMMANDS
# PG CONNECT : psql -U postgres SHOW shared_buffers;
- 확인 : SQL QUERY
--# PG CONNECT : psql -U postgre --# setting Unit : Page Count , Page * Block(8kb) SELECT name , setting FROM pg_settings WHERE name = 'shared_buffers' ;
≫ CMD : TEST
- Shared Buffers 역할 확인 - pgbenchtest
-
Test Database 생성 및 확인
# psql -U postgre -d postgres CREATE DATABASE pgbenchtest; \l
-
pgbench 실행
# pgbench 통한 Instance workload 수행 which pgbench pgbench -i -s 10 -U postgre pgbenchtest
-
Shared buffers 정보 확인
# postgre 접속 및 Shared_buffers 사용 확인 psql -U postgre -d pgbenchtest select DATNAME , BLKS_HIT , BLKS_READ from pg_catalog.pg_stat_database ;
-
shared buffers read Test 및 확인
--# pgbenchtest의 None Access 데이터 Read 수행 / 이후 Buffer 사용 확인 select count(*) from public.pgbench_accounts ;

-
↳ Wal Buffers
title: Client로 부터 요청된 데이터변경에 대한 트랜잭션 정보를 저장!, DB복구에 사용(Wal Files)-
Wal Buffers

- Wal Buffers는 Client로 부터 요청된 변경된 데이터와 트랜잭션 정보를 저장
- Wal Writer 프로세스에 의해 Wal Files에 저장된다.
- Wal Files는 DB 복구 시 사용되며 데이터 무결성을 보장한다.
Parameter : wal_buffers
-
동작방식
- 데이터베이스의 변경사항을 Wal Buffers 상에 순차적으로 저장(FIFO)한다.
- 세션의 USER정보/테이블정보, 변경되는 데이터 정보 등의 기록
- 많은 트랜잭션 발생 시 저장 / 주기적으로 저장 (COMMIT)
- 데이터베이스의 변경사항을 Wal Buffers 상에 순차적으로 저장(FIFO)한다.
≫ CMD : CHECK
- 확인 : 환경파일
# PGDATA=PostgreSQL Database Path cat ${PGDATA}/postgresql.conf | grep -F "wal_buffers"
- 확인 : SHOW COMMANDS
# PG CONNECT : psql -U postgres SHOW wal_buffers;
- 확인 : SQL QUERY
--# PG CONNECT : psql -U postgre --# setting Unit : Page Count , Page * Block(8kb) SELECT name , setting FROM pg_settings WHERE name = 'wal_buffers' ;