본문 바로가기
엑셈 경쟁력/DB 인사이드

DB 인사이드 | PostgreSQL New Feature - 17 Release (1)

by exemtech 2024. 12. 30.

 

2024년 9월 28일 PostgreSQL Global Development Group은 최신 버전의 PostgreSQL 17을 출시하였습니다. PostgreSQL 17 출시에 따른 주요 기능을 소개합니다.

📢 PostgreSQL 릴리즈 현황은 DB 인사이드 | PostgreSQL Setup - Version & Utility에서 확인할 수 있습니다.

 

 

PostgreSQL New Feature는 시리즈로 구성됩니다.

  1. PostgreSQL 17 주요 기능 설명과 파라미터, 시스템 카탈로그 변화
  2. PostgreSQL 17 성능 최적화(Shared Buffer Flush, NOT NULL과 NULL 조회 최적화, 조건절에 따른 실행계획 최적화)
  3. PostgreSQL 17 Vacuum 성능 향상
  4. PostgreSQL 17 증분백업(Incremental Backup)

 

본 문서에서는 PostgreSQL 17의 주요 기능을 나열한 후, PostgreSQL 17에서 변화가 있는 파라미터, 기본 확장 모듈(Extension), 시스템 카탈로그에 대한 내용을 기술합니다.

 

 

PostgreSQL 17 주요 기능

PostgreSQL 17에서 여러 기능이 성능 개선과 추가되었습니다. 그 중 PostgreSQL 17의 주요 기능은 아래와 같습니다.

주요기능 설명
Vacuum 성능 개선 ● Daed tuple 저장 구조가 Radix Tree 구조로 변경됨에 따라 메모리 사용량 최대 20배 감소.
● Vacuum 처리 속도 향상 및 Vacuum에 의한 WAL 생성량 감소
증분백업(Incremental Backup 지원) ● pg_basebackup Utility를 통한 증분백업 지원
● 증분 백업을 전체 백업으로 재구성하기 위한 pg_combinebackup Utility 추가
Checkpoint 통계 정보 제공 ● Checkpointer 프로세스의 통계 정보를 저장하기 위한 pg_stat_checkpoint View 생성
● pg_stat_bgwriter View의 일부 컬럼이 pg_stat_checkpointer View로 이동
Logical Replication 개선 ● pg_createsubscriber Utility 추가로 Physical Replication을 이용하여 Logical Replication으로 변환
● 초기 데이터를 복사하지 않고 바로 동기화 단계만 수행 가능
Wait Event 관련 View 생성 ● pg_wait_events View 생성으로 pg_stat_activity와 매칭하여 세션의 대기 상태 및 대기 이유 확인 가능
● PostgreSQL 17에서는 Wait Event에 대한 설명만 제공하며, 추후 Release 될 버전에서는 Wait Event에 대한 통계 정보를 제공할 것으로 추측 됨.
EXPLAIN의 확장 ● EXPLAIN에서 사용할 수 있는 옵션 추가(SERIALIZE, MEMORY)
● track_io_timing=on 파라미터 설정 시 BUFFER옵션을 사용하면 I/O 시간 확인 가능

 

 

PostgreSQL 17 파라미터의 변화

pg_settings Catalog 기준 PostgreSQL 16과 파라미터를 비교하여 PostgreSQL 17의 파라미터 변화를 확인합니다.

파라미터 삭제

파라미터 이름 설명
trace_recovery_messages 복구 관련 디버깅 정보를 로그로 기록하는 기능으로 더 이상 필요하지 않아서 제거(on으로 설정 시 출력 되었던 로그는 DEBUG1~DEBUG4의 로그로 계속 출력)
db_user_namespace 데이터베이스 별로 사용자 네임스페이스를 시뮬레이션 하는 기능으로, 거의 사용되지 않았기 때문에 제거 (대체 수단 없음)
old_snapshot_threshold snapshot too old 오류 문제를 방지 하기 위해 사용되었으나, 해당 기능이 더 이상 필요하지 않아서 제거

파라미터 추가

파라미터 이름 카테고리 기본값 설명
allow_alter_system Version and Platform Compatibility
> Other Platforms and Clients
on ALTER SYSTEM 명령어 실행 허용 여부(ON/OFF)
commit_timestamp_buffers Resource Usage > Memory 32 Commit Timestamp 캐시의 전용 버퍼 풀 크기(Unit:8kB)
enable_group_by_reordering Query Tuning
> Planner Method Configuration
on GROUP BY 키의 재 정렬 활성화 여부(ON/OFF)
event_triggers Client Connection Defaults
> Statement Behavior
on Event Trigger 활성화 여부(ON/OFF)
io_combine_limit Resource Usage
> Asynchronous Behavior
16 데이터 읽기 및 쓰기 크기에 대한 제한(Unit:8kB)
max_notify_queue_pages Resource Usage > Disk 1048576 NOTIFY/LISTEN Queue에 할당 가능한 최대 페이지 수
multixact_member_buffers Resource Usage > Memory 32 MultiXact 멤버 캐시를 위한 전용 버퍼 풀 크기(Unit:8kB)
multixact_offset_buffers Resource Usage > Memory 16 MultiXact Offset 캐시를 위한 전용 버퍼 풀 크기(Unit:8kB)
notify_buffers Resource Usage > Memory 16 LISTEN/NOTIFY 메시지 처리 캐시를 위한 전용 버퍼 풀 크기(Unit:8kB)
restrict_nonsystem_relation_kind Client Connection Defaults
> Statement Behavior
  특정 종류의 비시스템(non-system) 관계에 대한 접근을 금지
serializable_buffers Resource Usage > Memory 32 직렬화 가능한 트랜잭션 캐시의 전용 버퍼 풀 크기(Unit:8kB)
subtransaction_buffers Resource Usage > Memory 32 서브트랜잭션을 처리하는 캐시의 전용 버퍼 풀 크기(Unit:8kB)
summarize_wal Write-Ahead Log > Summarization off walsummarizer 프로세스를 시작하여 증분 백업 활성화 여부(ON/OFF)
● 증분 백업(Incremental Backup)을 사용하기 위해서는 ON으로 설정 필요하며, 활성화 시 walsummarizer 프로세스가 호출되고, pg_wal/summaries 디렉토리에 WAL summary 저장
synchronized_standby_slots Replication > Primary Server   Logical WAL Sender 프로세스가 대기할 스트리밍 복제 대기 서버의 복제 슬롯 이름
sync_replication_slots Replication > Standby Servers off Standby Server가 Primary Server에서 설정된 논리적 장애 조치 Replication Slot을 동기화하여, 장애 조치 후 원활한 복제 및 데이터 전송을 가능하게 할지 여부(ON/OFF)
trace_connection_negotiation Developer Options off 인증 전 연결 핸드셰이크에 대한 세부 정보를 로그에 기록할지 여부(ON/OFF)
transaction_buffers Resource Usage > Memory 32 트랜잭션 상태를 관리하는 캐시를 위한 전용 버퍼 풀의 크기 설정(Unit:8kB)
transaction_timeout Client Connection Defaults
> Statement Behavior
0 세션 내에서 트랜잭션이 실행될 수 있는 최대 시간 설정(ms)
wal_summary_keep_time Write-Ahead Log > Summarization 14400 WAL Summary 파일을 보관할 기간 설정(min)

 

 

 

PostgreSQL 17 시스템 카탈로그의 변화

PostgreSQL 16의 시스템 카탈로그를 비교하여 PostgreSQL 17의 변화를 확인합니다.

pg_attribute

변경 내역 컬럼 이름 설명
컬럼 속성 변경 attstattarget 해당 컬럼의 NOT NULL 조건이 제거되었고, 기본 통계 정보 수집 대상을 16 버전까지는 음수(-1)로 표시했지만, 17 버전부터는 NULL로 표시

pg_collation

변경 내역 컬럼 이름 설명
컬럼 이름 변경 colliculocale → colllocale  

pg_database

변경 내역 컬럼 이름 설명
컬럼 추가 dathasloginevt 로그인 이벤트 트리거가 정의 되어 있는 지 여부(F/T)를 표시 하며, pg_event_trigger 테이블의 불필요한 조회를 피하기 위한 목적으로 사용
컬럼 이름 변경 daticulocale → datlocale  

pg_replication_slots

변경 내역 컬럼 이름 설명
컬럼 추가 dathasloginevt Replication Slot이 Logical Slot인 경우 failover 후 새로운 Primary Server에서 Logical Replication를 다시 시작할 수 있도록 활성화 할지 여부(F/T) Physical Slot의 경우에는 항상 F로 표시
inactive_since Replication Slot이 비활성화된 시간을 표시. Slot이 현재 사용 중일 경우 NULL 표시
invlidation_reason conflicting 컬럼이 True인 경우 Replication Slot이 무효화 된 이유를 표시
● NULL : Slot이 무효화 되지 않은 경우
● wal_removed : 필요한 WAL이 제거된 경우
● rows_removed : 필요한 행(row)가 제거된 경우
● wal_level_insufficient : 잘못된 wal_level 파라미터 설정으로 Primary Server가 Logical Decoding을 수행할 수 없는경우
synced Primary Server에서 동기화 된 Logical Slot (Boolean)

pg_stat_bgwriter

변경 내역 컬럼 이름 설명
컬럼 삭제 buffers_backend pg_stat_io 컬럼과 중복
buffers_backend_fsync pg_stat_io 컬럼과 중복
buffers_checkpoint pg_stat_chekcpointer 카탈로그로 이동 (buffers_written)
checkpoints_timed pg_stat_chekcpointer 카탈로그로 이동 (num_timed)
checkpoints_req pg_stat_chekcpointer 카탈로그로 이동 (num_requested)
checkpoint_write_time pg_stat_chekcpointer 카탈로그로 이동 (write_time)
checkpoint_sync_time pg_stat_chekcpointer 카탈로그로 이동 (sync_time)

pg_stat_checkpointer

PostgreSQL 17 버전에서 새로 생긴 카탈로그로 Checkpointer에 대한 통계 정보를 표시하며, pg_stat_bgwriter에 포함된 일부 정보가 통합되었습니다.

변경 내역 컬럼 이름 설명
카탈로그 생성 num_timed 시간 초과로 인한 예정된 체크포인트 횟수. (완료된 체크포인트와 Skip된 체크포인트를 모두 포함)
num_requested 요청된 체크포인트가 수행된 횟수
restartpoints_timed 시간 초과 또는 수행 실패 후 예정된 재시작 지점의 수
restartpoints_req 요청된 재시작 지점의 수
restartpoints_done 수행된 재시작 지점의 수
write_time 체크포인트 처리 중 파일이 디스크에 기록되는 단계에서 소요된 총 시간(ms)
sync_time 체크포인트 처리 중 파일이 디스크에 동기화되는 단계에서 소요된 총 시(ms)
buffers_written 체크포인트 과정에서 디스크에 기록된 버퍼의 수
stats_reset 통계 정보가 마지막으로 초기화된 시간

pg_stat_progress_copy

변경 내역 컬럼 이름 설명
컬럼 추가 tuples_skipped 잘못된 데이터가 포함된 튜플이 건너뛰어진(Skip) 수. COPY 구문에서 ON_ERROR 옵션에 stop 이외의 값이 설정된 경우에만 카운터 증가

pg_stat_progress_vacuum

변경 내역 컬럼 이름 설명
컬럼 추가 dead_tuple_bytes maintenance_work_mem 설정에 따라 인덱스 Vacuum 수행 전 저장할 수 있는 Dead Tuple의 양
indexes_total Vacuum 처리된 인덱스의 총 수
indexes_processed 처리된 인덱스의 수. 인덱스 Vacuum 또는 인덱스 정리(Cleaning)의 경우 증가
컬럼 이름 변경 max_dead_tuples
  → max_dead_tuple_bytes
 
num_dead_tuples
  → num_dead_item_ids
 

pg_stat_slru

변경 내역 변경 전 변경 후 설명
name 컬럼 값 변경 CommitTs commit_timestamp 트랜잭션 Commit Timestamp 저장
MultiXactmember multixact_member 다중 트랜잭션(MultiXact)의 Member(각각의 트랜잭션 ID) 저장
MultiXactOffset multixact_offset 다중 트랜잭션에 포함된 멤버(트랜잭션 ID)의 Offset 정보 저장
Notify notify LISTEN / NOTIFY 기능과 관련된 알림 정보 저장
Serial serializable 직렬화 가능한 트랜잭션에 대한 정보 저장
Subtrans subtransaction 서브트랜잭션과 부모 트랜잭션 간의 관계 관리
Xact transaction 트랜잭션 상태와 관련된 정보 저장

pg_stat_subscription

변경 내역 컬럼 이름 설명
컬럼 추가 worker_type Subscription Worker 프로세스의 유형(apply, parallel apply, table synchronization)

pg_stats

변경 내역 컬럼 이름 설명
컬럼 추가 range_length_histogram 비어 있지 않고(non-Empty) NULL이 아닌 Range Type 값의 길이에 대한 히스토그램(subtype_diff 범위 함수 사용)
range_empty_frac 열(Column)의 값이 빈(Empty) 범위인 항목의 비율(Range Type이 아닌 경우 NULL)
range_bounds_histogram 비어 있지 않고(non-Empty) NULL이 아닌 범위 값들의 하한과 상한에 대한 히스토그램(Range Type이 아닌 경우 NULL)

pg_subscription

변경 내역 컬럼 이름 설명
컬럼 추가 subfailover 연관된 Replication Slot은 Standby 서버와 동기화 되도록 활성화할지 여부(Boolean)

pg_wait_events

PostgreSQL 17 버전에서 새로 생긴 카탈로그로 대기 이벤트에 대한 설명을 제공하며, pg_stat_activity.wait_event_type, pg_stat_activity.wait_event와 조인하여 사용할 수 있습니다.

변경 내역 컬럼 이름 설명
카탈로그 생성 type Wait Event 유형
name Wait Event 이름
description Wait Event 설명

pg_stat_statements

변경 내역 컬럼 이름 설명
컬럼 추가 local_blk_read_time Query가 Local 블록을 읽는 데 소요된 총 시간(ms). 단, track_io_timing이 활성화 되어 있어야 하며, 비활성화 시 0
local_blk_write_time Query가 Local 블록을 쓰는 데 소요된 총 시간(ms). 단, track_io_timing이 활성화 되어 있어야 하며, 비활성화 시 0
jit_deform_count Query에 의해 JIT 방식으로 컴파일 된 튜플 변형 함수의 총 수
jit_deform_time Query에 의해 JIT 방식으로 컴파일 하는데 소요된 총 시간(ms)
stats_since Query에 대한 통계 수집이 시작된 시간
minmax_stats_since Query 실행 계획과 실행 시간에 대한 최소/최대 통계 수집이 시작된 시간 (min_plan_time, max_plan_time, min_exec_time, max_exec_time 컬럼)
컬럼 이름 변경 blk_read_time
 → shared_blk_read_time
 
blk_write_time
→ shared_blk_write_time
 

pg_stat_activity

PostgreSQL 17 버전에서 새로 생긴 대기 이벤트에 대한 내용이 wait_event_type 컬럼과 wait_event 컬럼에 추가/삭제되었습니다.

변경 내역 wait_event_type wait_event 설명
컬럼 값 삭제 LWLock OldSnapshotTimeMap  
컬럼 값 추가 Activity ReplicationSlotsyncMain Slot 동기화 작업자가 메인 루프에서 작업을 기다리고 있는 상태
ReplicationSlotsyncShutdown Slot 동기화 작업자가 종료될 때까지 기다리고 있는 상태
WalSummarizerWal WAL Summarizer가 추가적인 WAL 로그가 생성되길 기다리고 있는 상태
Client WaitForStandbyConfirmation Standby Server에서 WAL 로그가 수신 되고 디스크에 플러시 될 때까지 기다리는 상태
IO WalSummaryRead WAL Summary 파일에서 필요한 데이터를 읽을 때까지 기다리는 상태
WalSummaryWrite WAL Summary 파일에 데이터를 기록하는 작업이 완료되기를 기다리는 상태
IPC CheckpointDelayComplete Checkpoint 작업이 완료되지 않도록 차단하는 백엔드 프로세스가 끝나기를 기다리는 상태
CheckpointDelayStart Checkpoint 작업이 시작되기 전에, 이를 차단하는 백엔드 프로세스가 종료되기를 기다리고 있는 상태
MultixactCreation MultiXact를 생성하는 작업이 끝나기를 기다리는 상태
WalSummaryReady 새로운 WAL Summary 정보가 생성되기를 기다리고 있는 상태
LWLock DSMRegistry 동적 공유 메모리 레지스트리를 읽거나 업데이트하는 작업이 완료되기를 기다리는 상태
DSMRegistryDSA 동적 공유 메모리 레지스트리에서 동적 공유 메모리 할당기에 접근하는 작업이 완료되기를 기다리는 상태
DSMRegistryHash 동적 공유 메모리 레지스트리 내의 공유 해시 테이블에 접근하려는 작업이 완료되기를 기다리고 있는 상태
InjectionPoint Injection Point와 관련된 정보를 읽거나 업데이트하는 작업을 기다리고 있는 상태
ParallelVacuumDSA 병렬 Vacuum에 필요한 동적 공유 메모리 공간을 할당 받는 작업이 완료되기를 기다리는 상태
SerialControl 공유된 pg_serial 상태를 읽거나 업데이트하는 작업이 완료되기를 기다리는 상태
WaitEventCustom 사용자 정의 대기 이벤트와 관련된 정보를 읽거나 업데이트하는 작업이 완료되기를 기다리고 있는 상태
WALSummarizer WAL Summary 상태를 읽거나 업데이트하는 작업이 완료되기를 기다리고 있는 상태
Timeout WalSummarizerError WAL Summarizer에서 오류가 발생한 후, 시스템이 해당 오류를 처리하기 위해 대기하는 상태

 

 

 

PostgreSQL 17 기본 확장 모듈(Extension)의 변화

PostgreSQL 16의 기본 확장 모듈을 비교하여 PostgreSQL 17의 변화를 확인합니다.

확장 모듈(Extension) 삭제

확장 모듈 이름 설명
adminpack pgAdmin III의 end-of-life로 관련 확장 모듈 제거
old_snapshot old_snapshot_threshold 파라미터 제거로 인해 관련 확장 모듈 제거

 

 

 

 

기획 및 글 | 플랫폼기술연구팀

댓글