PostgreSQL 16이 나왔습니다

Wed, 20 Sep 2023 11:33:47 +0900

2023년 9월 14일, PostgreSQL 글로벌 개발 그룹은 세계에서 가장 진보적인 공개 소스 데이터베이스의 가장 최신 버전인 PostgreSQL 16의 출시를 알립니다.

PostgreSQL 16은 향상된 쿼리 병렬화, 대용량 데이터 로드 및 논리적 복제 기능이 눈에 띄게 성능을 개선했습니다. 이번 배포판에는 더 많은 SQL/JSON 구문과 워크로드에 대한 새로운 모니터링 통계, 대규모 집단의 정책 관리를 위한 접근 제어 규칙을 정의하는 유연성을 포함하여 개발자와 관리자 모두를 위한 많은 기능들이 포함되었습니다.

PostgreSQL Core Team 멤버인 Dave Page는 "관계형 데이터베이스 패턴이 진화함에 따라 PostgreSQL은 규모에 맞는 데이터 검색 및 관리기능을 향상시키고 있습니다."라고 말했습니다. "PostgreSQL 16은 사용자에게 워크로드를 스케일업 및 스케일아웃할 수 있는 많은 방법을 제공하는 동시에 통찰력을 얻고 데이터 관리를 최적화할 수 있는 새로운 방법도 제공합니다."

신뢰성과 견고성으로 유명한 혁신적인 데이터 관리 시스템인 PostgreSQL은 글로벌 개발자 커뮤니티에서 35년 이상 공개 소스로 개발하고 있습니다. 이렇게 해서 모든 규모의 조직에서 사용하는 공개 소스 관계형 데이터베이스가 되었습니다.

성능 향상

PostgreSQL 16은 새로운 쿼리 플랜 최적화를 통해 기존 PostgreSQL 기능의 성능을 향상시켰습니다. 이번 최신 배포판에서 쿼리 플래너는 FULL과 RIGHT 조인을 병렬화하고 SELECT DISTINCT 쿼리에 대한 증분 정렬을 사용하고 윈도우 함수 실행을 최적화하여 효율적으로 실행할 수 있습니다. 또한 RIGHT와 OUTER "anti-joins"을 도입하여 사용자가 결합된 테이블에 존재하지 않는 행을 식별할 수 있도록 합니다.

이번 배포판에는 단일 작업과 동시 작업 모두에서 COPY를 이용한 대량 로드에 대한 개선 사항이 포함되어 있으며, 특정 테스트에서는 성능이 최대 300%가량 향상된 것으로 나타났습니다. PostgreSQL은 libpq를 사용하는 클라이언트에서 로드 밸런싱을 지원하고, 테이블 전체 프리징 작업을 줄이기 위해 VACUUM 방법을 개선했습니다. 또한 PostgreSQL 16은 x86과 ARM 아키텍처에서 SIMD를 사용하여 CPU를 가속화해 ASCII 및 JSON 문자열을 처리할 때 성능을 향상시키고 배열 및 서브 트랜잭션 검색을 수행할 수 있습니다.

논리적 복제

논리적 복제를 통해 PostgreSQL 사용자는 PostgreSQL 논리적 복제 프로토콜을 해석할 수 있는 다른 PostgreSQL 인스턴스 또는 구독자에게 데이터를 스트리밍할 수 있습니다. PostgreSQL 16에서 사용자는 스탠바이 인스턴스에서 논리적 디코딩을 수행할 수 있고, 이는 스탠바이가 논리적 변경 사항을 다른 서버에 게시할 수 있음을 의미합니다. 이것은 개발자들에게 새로운 워크로드 배포 옵션을 제공합니다. 예를 들어, 더 바쁜 기본 작업이 아닌 대기 작업을 사용하여 변경 사항을 논리적으로 다운스트림 시스템에 복제합니다.

또한 논리적 복제에 대한 몇가지 성능이 PostgreSQL 16에서 개선되었습니다. 현재 구독서버는 병렬 작업자를 사용하여 대규모 트랜잭션을 적용할 수 있습니다. PRIMARY KEY가 없는 테이블의 경우, 구독서버는 데이터를 찾기 위해 시퀀스 스캔 대신 B-트리 인덱스를 사용할 수 있습니다. 특정 조건에서는 초기 테이블 동기화 때 이진 양식을 사용하여 속도를 높일 수도 있습니다.

PostgreSQL 16의 논리적 복제에는 사용자에게 새 논리적 구독을 생성할 수 있는 권한을 부여하는 새롭게 정의된 pg_create_subscription 롤이 추가되었고, 몇 가지 액세스 제어 기능이 향상되었습니다. 마지막으로 이번 배포판에서는 양방향 논리 복제 지원을 추가하여 서로 발행서버의 두 테이블 간에 데이터를 복제할 수 있는 기능을 도입했습니다.

개발자 경험

PostgreSQL 16은 SQL/JSON 표준 규약을 따르는 JSON_ARRAY(), JSON_ARRAYAGG(), IS JSON 과 같은 생성자와 술어 구문을 추가했습니다. 또한 이번 배포판에서는 0x1538, 0o12470, 및 0b1010100111000과 같은 십진수가 아닌 정수 리터럴과 밑줄(_)을 천단위 구분자로 (예: 5_432_000)쓸 수 있는 기능도 포함했습니다.

PostgreSQL 16을 사용하는 개발자들은 psql 클라이언트 프로토콜에 여러 개의 명령어를 추가함으로써 혜택을 얻을 수 있을 것입니다. 또한, 매개변수화된 쿼리(예: SELECT $1 + $2)를 실행한 후 변수를 대체하기 위해 \bind를 사용할 수 있습니다.

PostgreSQL 16은 문자 정렬 규칙을 제공하는 텍스트 대조에 대한 일반적인 지원 기능을 향상시켰습니다. PostgreSQL 16은 기본적으로 ICU를 지원하고 환경설정에 따라 기본 ICU 로케일을 결정하며 사용자 지정 ICU 대조 규칙을 정의할 수 있도록 빌드되었습니다.

모니터링

데이터베이스 워크로드의 성능을 조정하는데 있어 핵심적인 측면은 I/O 작업이 시스템에 미치는 영향을 이해하는 것입니다. PostgreSQL 16은새로운 pg_stat_io 뷰를 통해 이러한 데이터를 분석하는 방법을 간소화할 수 있도록 지원합니다. 이 뷰는 shared_buffer hits 및 I/O 지연 시간과 같은 주요 I/O 통계를 추적합니다.

또한 이번 배포판에서는 테이블 또는 인덱스가 마지막으로 검색된 시간을 나타내는 타임스탬프를 기록하는 컬럼을 pg_stat_all_tables에 추가했습니다. PostgreSQL은 매개 변수화된 문에 전달된 값을 기록하여 auto_explain을 더 쉽게 읽을 수 있도록 하고, pg_stat_activity의 수행 쿼리 획일화 알고리즘의 정확도를 향상시켰습니다.

접근통제 및 보안

PostgreSQL 16은 액세스 제어를 위한 세분화된 옵션을 제공하고 다른 보안 기능을 강화했습니다. 이번 배포판에는 사용자와 데이터베이스 이름에 대한 정규 표현식 일치와 외부 구성 파일에 대한 "include" 를 허용하는 등 pg_hba.conf와 pg_ident.conf파일의 관리 기능을 향상시켰습니다.

이번 배포판에서는 클라이언트가 서버에서 어떤 인증 매개 변수를 받아들일 것인지 지정할 수 있는 require_auth와 PostgreSQL이 클라이언트의 운영 체제에서 제공하는 CA(신뢰할 수 있는 인증 기관) 저장소를 사용해야 한다는 것을 나타내는 sslrootcert="system"을 포함한 여러보안 지향 클라이언트 연결 매개 변수가 추가되었습니다. 또한 이번 배포판은 Kerberos 자격 증명 위임을 지원하므로 postgres_fdw나 dblink와 같은 확장모듈을 인증된 자격 증명을 사용하여 신뢰할 수 있는 서비스에 연결할 수 있습니다.