2024년 9월 28일 PostgreSQL Global Development Group은 최신 버전의 PostgreSQL 17을 출시하였습니다. PostgreSQL 17 출시에 따른 주요 기능을 소개합니다.
📢 PostgreSQL 릴리즈 현황은 DB 인사이드 | PostgreSQL Setup - Version & Utility에서 확인할 수 있습니다.
PostgreSQL New Feature는 시리즈로 구성됩니다.
- PostgreSQL 17 주요 기능 설명과 파라미터, 시스템 카탈로그 변화
- PostgreSQL 17 성능 최적화(Shared Buffer Flush, NOT NULL과 NULL 조회 최적화, 조건절에 따른 실행계획 최적화)
- PostgreSQL 17 Vacuum 성능 향상
- 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 파라미터 제거로 인해 관련 확장 모듈 제거 |
기획 및 글 | 플랫폼기술연구팀
'엑셈 경쟁력 > DB 인사이드' 카테고리의 다른 글
DB 인사이드 | PostgreSQL New Feature - 17 Release (2) (0) | 2024.12.30 |
---|---|
DB 인사이드 | PWI - Shared Buffer > Wait Event (0) | 2024.11.27 |
DB 인사이드 | PWI - Shared Buffer > 동작원리 (0) | 2024.10.25 |
DB 인사이드 | PWI - LOCK > Other Locks (0) | 2024.09.25 |
DB 인사이드 | PWI - LOCK > Row-level Lock(2) (0) | 2024.08.05 |
댓글