13P by neo 21일전 | favorite | 댓글 1개
  • 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 통합 개선이 새로운 웹 프레임워크 패러다임을 가능하게 할 것이라는 기대