GN⁺: PostgreSQL 17 출시
(postgresql.org)- PostgreSQL 17은 주요 성능 향상, 메모리 관리 개선, 저장소 접근 최적화, 고동시성 작업 부하 개선, 대량 로딩 및 내보내기 속도 향상, 인덱스 쿼리 실행 개선 등을 포함
시스템 전반의 성능 향상
- 정상적인 작업에 필수적인 PostgreSQL vacuum 프로세스의 내부 메모리 구조를 개선하여 메모리 사용량을 최대 20배 줄임
- vacuum 속도 향상 및 공유 리소스 사용 감소로 워크로드에 더 많은 리소스 사용 가능
- I/O 계층의 성능을 지속적으로 개선함
- Write-Ahead Log(WAL) 처리 개선으로 높은 동시성 워크로드에서 최대 2배 더 나은 쓰기 처리량을 보임
- 새로운 스트리밍 I/O 인터페이스로 순차 스캔(테이블에서 모든 데이터 읽기) 속도와 ANALYZE 명령의 실행 계획 통계 업데이트 속도를 높임
- 쿼리 실행에도 성능 향상 효과를 확장함
- B-tree 인덱스(PostgreSQL의 기본 인덱스 방법)를 사용하는 IN 절이 포함된 쿼리의 성능을 개선함
- BRIN 인덱스에서 병렬 빌드를 지원함
- 쿼리 계획 수립을 위한 여러 개선 사항 포함
- NOT NULL 제약 조건에 대한 최적화
- 공통 테이블 표현식(WITH 쿼리) 처리 개선
- bit_count 함수에 AVX-512를 사용하는 등 계산 가속을 위한 SIMD(Single Instruction/Multiple Data) 지원 확대
강력한 개발자 경험을 더 확장
- PostgreSQL은 JSON 지원을 추가한 최초의 관계형 데이터베이스였음 (2012)
- PostgreSQL 17에서는 SQL/JSON 표준 구현을 더욱 확장함
- JSON_TABLE을 통해 JSON 데이터를 표준 PostgreSQL 테이블로 변환 가능
- SQL/JSON 생성자(JSON, JSON_SCALAR, JSON_SERIALIZE) 및 쿼리 함수(JSON_EXISTS, JSON_QUERY, JSON_VALUE) 지원
- JSON 데이터를 PostgreSQL 기본 데이터 타입(숫자, 불리언, 문자열, 날짜/시간)으로 변환하는데 중점을 둔 jsonpath 표현식 추가
- MERGE 명령에 RETURNING 절과 뷰 업데이트 기능을 추가함
- 대량 로딩 및 데이터 내보내기 기능 향상
- COPY 명령을 사용하여 큰 행을 내보낼 때 최대 2배의 성능 개선
- 소스와 대상 인코딩이 일치할 때 COPY 성능 개선
- 삽입 오류가 발생해도 가져오기를 계속할 수 있는 ON_ERROR 옵션 추가
- 파티션 및 원격 PostgreSQL 인스턴스에 분산된 데이터 관리 기능 확장
- 파티션 테이블에서 ID 열과 제외 제약 조건 사용 지원
- postgres_fdw를 사용하여 EXISTS 및 IN 하위 쿼리를 원격 서버로 푸시할 수 있음
- 내장된 플랫폼 독립적이고 불변인 데이터 정렬 제공자 포함
- C 데이터 정렬과 유사한 정렬 의미론을 제공하지만 SQL_ASCII 대신 UTF-8 인코딩 사용
- 이 새로운 데이터 정렬 제공자를 사용하면 텍스트 기반 쿼리가 PostgreSQL 실행 위치에 관계없이 동일한 정렬 결과를 반환함
고가용성 및 주요 버전 업그레이드를 위한 논리적 복제 개선
- 논리적 복제는 실시간으로 데이터를 스트리밍하는 데 사용됨
- 이전 버전에서는 주요 버전 업그레이드 시 논리적 복제 슬롯을 삭제해야 했고, 이로 인해 업그레이드 후 구독자에게 데이터를 다시 동기화해야 했음
- PostgreSQL 17부터는 논리적 복제 슬롯을 삭제할 필요가 없어 업그레이드 프로세스가 단순해짐
- 논리적 복제에 대한 장애 조치 제어 기능을 포함하여 고가용성 환경에서 더욱 탄력적으로 배포할 수 있음
- pg_createsubscriber 명령줄 도구를 도입하여 물리적 복제본을 새로운 논리적 복제본으로 변환할 수 있음
보안 및 운영 관리를 위한 더 많은 옵션
- PostgreSQL 17은 데이터베이스 시스템의 전반적인 수명 주기를 사용자가 관리하는 방법을 더욱 확장함
- ALPN을 사용할 때 직접 TLS 핸드셰이크를 수행할 수 있는 sslnegotiation이라는 새로운 TLS 옵션 추가
- 유지 관리 작업을 수행할 수 있는 권한을 부여하는 pg_maintain 사전 정의 역할 추가
- PostgreSQL에 포함된 백업 유틸리티인 pg_basebackup이 이제 증분 백업을 지원하고 전체 백업을 재구성하기 위한 pg_combinebackup 유틸리티를 추가함
- pg_dump에 덤프 파일을 생성할 때 포함할 객체를 선택할 수 있는 --filter라는 새로운 옵션이 포함됨
- 모니터링 및 분석 기능 향상
- EXPLAIN에서 로컬 I/O 블록 읽기 및 쓰기에 소요된 시간을 표시함
- SERIALIZE 및 MEMORY라는 두 가지 새로운 옵션 포함: 네트워크 전송을 위한 데이터 변환에 소요된 시간과 사용된 메모리 양을 확인하는 데 유용함
- 인덱스 정리 진행 상황을 보고함
- pg_wait_events 시스템 뷰를 추가하여 pg_stat_activity와 결합하면 활성 세션이 대기하는 이유에 대한 인사이트를 제공함
Hacker News 의견
-
PostgreSQL 17의 새로운 릴리스에 대한 축하와 함께 여러 개선 사항 언급
- 진공 작업의 메모리 구조 개선으로 메모리 사용량 최대 20배 감소
- 백업 유틸리티
pg_basebackup
의 증분 백업 지원 및pg_combinebackup
유틸리티 추가 - 외부 데이터 래퍼(FDW)의 개선으로 원격 서버에서 EXISTS 및 IN 서브쿼리 처리 가능
-
JSON 기능의 유용성에 대한 의견
- 관계형 데이터베이스에서 JSON 기능의 유용성 강조
- 데이터에서 JSON을 생성할 수 있는 기능의 중요성 언급
- JSON_TABLE 기능을 배우고 싶다는 기대감 표출
-
JSON_TABLE 기능의 활용 경험 공유
- JSON 응답을 jsonb 열에 저장하고 뷰를 작성해 파싱하는 방식의 유용성 강조
- 새로운 PostgreSQL 기능 문서에서 이 방식을 확인하고 기쁨을 느낌
-
PostgreSQL 17의 성능 향상 및 UX 기능 개선 언급
- 파티셔닝된 테이블에서 ID 열 및 배제 제약 조건 지원
- 플랫폼 독립적이고 불변적인 정렬 제공자 추가로 텍스트 기반 쿼리의 일관된 정렬 결과 보장
-
변경 로그에 대한 인상
- UUIDv7 PR이 포함되지 않아 아쉬움
-
오픈 소스 소프트웨어에 대한 신뢰 문제로 Oracle에서 MSSQL로 전환한 경험 공유
- "비즈니스 소프트웨어에 오픈 소스를 신뢰할 수 없다"는 상사의 주장
-
Postgres의 지속적인 개선에 대한 감사와 Incremental View Maintenance(IVM) 확장 기능의 정식 지원 희망
-
PostgreSQL의 주요 버전 업그레이드 지원에 대한 기대
-
Postgres의 시스템 버전 테이블 도입 희망
-
Postgres의 JSON 통합 개선이 새로운 웹 프레임워크 패러다임을 가능하게 할 것이라는 기대