2023년 9월 14일 PostgreSQL Global Development Group은 최신 버전의 PostgreSQL 16을 출시하였습니다. PostgreSQL 16의 주요 기능은 아래와 같습니다.
📢 PostgreSQL 릴리즈 현황은 DB 인사이드 | PostgreSQL Setup - Version & Utility에서 확인할 수 있습니다.
성능개선
- 새로운 Query Planner 최적화로 PostgreSQL 기능의 성능 향상
- FULL OUTER JOIN 및 RIGHT OUTER JOIN의 병렬 처리 가능
- 집계 함수(ex. string_agg, array_agg) 사용 시 DISTINCT 또는 ORDER BY와 함께 사용할 경우, 쿼리에 대한 더 최적화된 실행 계획 생성
enable_presorted_aggregate
파라미터로 제어 가능
- SELECT DISTINCT 쿼리에 증분 정렬 활용
- Window Function의 최적화
- ANTI-JOIN 개선(RIGHT, OUTER)
- COPY를 사용한 대량 로드(Bulk Loading)의 개선 → 일부 경우에서는 최대 300% 성능 향상
- 전체 테이블 동결(Freeze)의 필요성을 줄이는 Vacuum 개선
- RANGE Caching 및 LIST Partition Lookup과 같은 기능을 도입하여 분할된 테이블에 대량의 데이터를 로드하고 Vacuum 및 Analyze를 통해 Shared Buffer 사용량을 보다 효율적으로 제어 가능
- RANGE 및 LIST 파티션 조회 성능 향상
- Vacuum과 Analyze를 통해 Shared Buffer 사용량 분석 가능
VACUUM BUFFER_USAGE_LIMIT
,ANALYZE BUFFER_USAGE_LIMIT
옵션 추가- vacuumdb --buffer-usage-limit
- 기본값은 autovacuum을 제어하는
vacuum_buffer_usage_limit
에 의해 설정
- x86 및 ARM 아키텍처에서 SIMD를 사용하는 CPU 가속 도입
- ASCII 및 JSON 문자열을 처리, 배열 및 하위 트랜잭션 검색 시 성능 향상
Logical Replication
- Standby Server에서 Logical Replication 수행 가능
- Physical Replication Standby Server에서 Logical Replication 지원
- pg_log_standby_snapshot() Function 생성
- Primary Server 대신 Standby Server를 이용하여 변경 사항을 다른 Standby Server에 게시(Publication) 가능
- Logical Replication 성능 향상
- 구독(Subscription)은 Parallel Worker를 사용하여 대규모 트랜잭션 적용 가능
- Primary Key가 없는 테이블의 경우 구독(Subscription)은 순차적 탐색(Sequential Scan) 대신 B-Tree 인덱스를 사용하여 Row 탐색 가능
- 특정 조건에서는 Binary 형식을 사용하여 초기 테이블 동기화 속도 향상 가능
- pg_create_subscription Role 생성
- Superuser가 아닌 CREATE 권한이 있는 사용자가 CREATE SUBSCRIPTION 가능
- 양방향 Logical Replication에 대해 지원
- 서로 다른 게시(Publication)의 두 테이블 간에 데이터를 복제하는 기능 도입
사용 편의성
- JSON_ARRAY(), JSON_ARRAYAGG(), IS JSON과 같은 생성자(Predicate)와 표준 SQL/JSON의 더 많은 구문 추가
- Subquery Alias 지정 불필요
- 천 단위 구분 기호로 Underscore 사용 가능 (ex. 5_432_000)
- psql의
\bind
명령어가 추가되어 매개변수를 포함한 쿼리 수행 가능 - 텍스트 정렬에 대한 지원 향상
- libpq를 사용하는 Client의 Load Balancing 지원
load_balance_hosts
옵션 추가(Value : random / disable)
Monitoring
- I/O Access Pattern을 세부적으로 분석할 수 있는
pg_stat_io
도입 - pg_stat_all_tables View에 테이블이나 인덱스가 마지막으로 스캔된 시간을 기록하는 컬럼 추가
- last_seq_scan
- last_idx_scan
- pg_stat_all_tables View에 새로운 Page로 이동하는 업데이트 된 Row 발생에 대한 통계 기록
- n_tup_newpage_upd
- 매개변수화된 명령문에 전달된 값을 로깅하여 auto_explain 읽기 쉽게 만들고 pg_stat_statements 및 pg_stat_activity에서 사용하는 쿼리 추적 알고리즘의 정확성을 향상
- pg_locks View에 추측 잠금 정보(Speculative Lock) 추가
- 추측성 삽입 잠금은 Transaction ID와 추측성 삽입 토큰으로 구성
- Transaction ID는 transactionid 컬럼에 표시
- 추측성 삽입 토큰이 objid 컬럼에 표시
- 추측성 삽입 잠금은 Transaction ID와 추측성 삽입 토큰으로 구성
보안
- pg_hba.conf 및 pg_ident.conf 파일 관리 향상
- 보안 기능 향상
- GRANT group_name TO user_name이 ADMIN OPTION으로 수행되도록 허용
- 기존에는 CREATEROLE 권한 필요
- GRANT 사용 시 WITH ADMIN TRUE/FALSE 구문 허용
- 기존에는 WITH ADMIN OPTION만 지원
- 관리자는 보다 구체적인 Role을 정의하고 이에 따라 권한을 할당하여 권한 관리의 간소화
PostgreSQL 16 비호환성
- Primary Key에 대해 NULL NOT DISTINCT 인덱스 허용하지 않음
- 시스템 카탈로그에서 인덱스를 처리하지 않도록 REINDEX DATABASE 및 reindexdb 변경
- REINDEX SYSTEM과 reindexdb --system은 사용가능
- pg_walinspect에서 pg_get_wal_records_info_till_end_of_wal(), pg_get_wal_stats_till_end_of_wal() 함수 제거
- force_parallel_mode 파라미터를 debug_parallel_query로 이름 변경
- ON SELECT를 사용하여 수동으로 CREATE VIEW 하는 기능 제거
- vacuum_defer_cleanup_age 파라미터 제거
- hot_standby_feedback 및 Replication Slot이 추가되었으므로 불필요
- promote_trigger_file 파라미터 제거
- pg_ctl promote 또는 pg_promote()를 사용하면 되므로 불필요
- Read-Only 서버 변수 lc_collate, lc_ctype 제거
- Collation과 locale은 Database 마다 다를 수 있으므로 Read-Only 서버 변수로 사용하는 것을 부적절
글 | DB 기술기획팀
'엑셈 경쟁력 > DB 인사이드' 카테고리의 다른 글
DB 인사이드 | PostgreSQL 16 Release - New Feature (3) (2) | 2023.12.27 |
---|---|
DB 인사이드 | PostgreSQL 16 Release - New Feature (2) (0) | 2023.11.30 |
DB 인사이드 | PostgreSQL Extension - PG_STAT_MONITOR (0) | 2023.09.21 |
DB 인사이드 | PostgreSQL HOT - 3. Fillfactor와 HOT Update (1) | 2023.08.31 |
DB 인사이드 | PostgreSQL Replication - Slot (2) | 2023.07.26 |
댓글