logo
문의하기
서비스리소스블로그아카데미
logo
문의하기
logo

데이터와 IT 흐름을 읽는 시선,
뉴스레터 EXEM View 구독하기

Subscribe

주식회사 엑셈

서울시 강서구 마곡중앙8로5길 40

Tel 02-6203-6300 ㅣ Fax 02-6203-6301

ⓒ EXEM Co., Ltd. All Rights Reserved.
개인정보 처리방침서비스 이용약관
  • 서비스

    • Database
    • Application
    • AIOps
    • LLMOps
    • Big Data
    • All-in-One
    • Consulting
  • 신청

    • 세미나
    • 사옥 투어
  • 회사

    • 기업 소개
    • 채용 안내
    • IR
    • 오시는 길
  • 자료

    • 제품 브로슈어
    • 제품 살펴보기
    • 도서 실습자료
  • awsaws
  • microsoftmicrosoft
  • oracleoracle
  • naver-cloudnaver-cloud
PostgreSQL New Feature - 17 Release (1)
PostgreSQL New Feature - 17 Release (1)

PostgreSQL New Feature - 17 Release (1)

2024년 9월 28일 PostgreSQL Global Development Group은 최신 버전의 PostgreSQL 17을 출시하였습니다. PostgreSQL 17 출시에 따른 주요 기능을 소개합니다.
📢 PostgreSQL 릴리즈 현황은 PostgreSQL Setup - Version & Utility에서 확인할 수 있습니다.
 
PostgreSQL New Feature는 시리즈로 구성됩니다.
  1. PostgreSQL 17 주요 기능 설명과 파라미터, 시스템 카탈로그 변화
  1. PostgreSQL 17 추가, 개선 기능
  1. PostgreSQL 17 Vacuum 성능 향상
  1. 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_checkpointer 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 시간 확인 가능
pg_maintin Role과 MAINTAIN 권한 생성
● 데이터베이스 전체 유지 관리를 수행하는 권한을 가진 pg_maintain Role 생성 ● 데이터베이스 특정 Object에 대한 유지 관리를 수행하는 권한을 가진 MAINTAIN 권한 생성
 

PostgreSQL 17 파라미터의 변화

pg_settings 시스템 카탈로그 기준 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
요청된 체크포인트가 수행된 횟수 (WAL 생성량에 의해 체크포인트가 실행된 횟수)
ㅤ
restartpoints_timed
타임아웃 또는 수행 실패 후 예정된 재시작 지점의 수
ㅤ
restartpoints_req
요청된 재시작 지점의 수 (WAL 생성량에 의해 재시작 지점의 수)
ㅤ
restartpoints_done
수행된 재시작 지점의 수
ㅤ
write_time
체크포인트 처리 중 파일이 디스크에 기록되는 단계에서 소요된 총 시간(ms) (파일 쓰기 소요 시간)
ㅤ
sync_time
체크포인트 처리 중 파일이 디스크에 동기화되는 단계에서 소요된 총 시(ms)
ㅤ
buffers_written
체크포인트 과정에서 디스크에 기록된 버퍼의 수
ㅤ
stats_reset
통계 정보가 마지막으로 초기화된 시간
 

pg_stat_progress_copy

변경 내역
컬럼 이름
설명
컬럼 추가
tuples_skipped
잘못된 데이터가 포함된 Tuple이 건너뛰어진(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 방식으로 컴파일 된 Tuple 변형 함수의 총 수
ㅤ
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 파라미터 제거로 인해 관련 확장 모듈 제거
 

pgrowlocks Extension 출력 내용 변경

pgrowlocks Function 수행 시 modes 컬럼의 출력 내용이 변경되었습니다.
PostgreSQL 16 이하
PostgreSQL 17
Key Share
For Key Share
Share
For Share
For No Key Update
For No Key Update
No Key Update
No Key Update
For Update
For Update
Update
Update
 
 

 
 
함께 보면 좋은 아티클
PostgreSQL New Feature - 17 Release (2) | 엑셈
PostgreSQL New Feature 17 Release 알아보기
PostgreSQL New Feature - 17 Release (2) | 엑셈
https://ex-em.com/ko/academy/PostgreSQL-NewFeature-5
PostgreSQL New Feature - 17 Release (2) | 엑셈
PostgreSQL New Feature - 16 Release (3) | 엑셈
PostgreSQL New Feature 16 Release 알아보기
PostgreSQL New Feature - 16 Release (3) | 엑셈
https://ex-em.com/ko/academy/PostgreSQL-NewFeature-3
PostgreSQL New Feature - 16 Release (3) | 엑셈
Table of Contents
PostgreSQL 17 주요 기능PostgreSQL 17 파라미터의 변화파라미터 삭제파라미터 추가PostgreSQL 17 시스템 카탈로그의 변화pg_attributepg_collationpg_databasepg_replication_slotspg_stat_bgwriterpg_stat_checkpointerpg_stat_progress_copypg_stat_progress_vacuumpg_stat_slrupg_stat_subscriptionpg_statspg_subscriptionpg_wait_eventspg_stat_statementspg_stat_activityPostgreSQL 17 기본 확장 모듈(Extension)의 변화확장 모듈(Extension) 삭제pgrowlocks Extension 출력 내용 변경