성능이 최대 300%라고?: PostgreSQL 16 버전 소식

postgreSQL
postgreSQL

2023년 9월 14일 - PostgreSQL 글로벌 개발 그룹은 오늘 세계에서 가장 고도로 발전한 오픈소스 데이터베이스인 PostgreSQL 16 버전을 공식적으로 발표했습니다.

PostgreSQL 16은 쿼리 병렬 처리, 대량 데이터 로딩, 논리 복제 등에서 성능 향상을 이루었습니다. 이번 릴리스에는 개발자와 관리자 모두를 위한 다양한 기능들이 포함되어 있으며, SQL/JSON 문법 확장, 작업부하를 모니터링하기 위한 새로운 통계, 그리고 대규모 시스템에서 정책을 관리하기 위한 접근 제어 규칙을 더 유연하게 설정할 수 있습니다.

관계형 데이터베이스 패턴이 변화함에 따라 PostgreSQL은 대규모 데이터의 검색과 관리에서 성능을 계속 향상시키고 있습니다.

라고 PostgreSQL 코어 팀 멤버인 Dave Page가 말했습니다.

PostgreSQL 16은 사용자들에게 작업부하를 확장하는 더 많은 방법을 제공하면서, 데이터를 관리하는 새로운 방법으로 통찰력을 얻을 수 있게 해줍니다.

PostgreSQL은 25년 이상의 오픈소스 개발 경험을 바탕으로 높은 신뢰성과 견고성을 자랑하며, 모든 규모의 조직에서 선호되는 오픈소스 관계형 데이터베이스가 되었습니다.

목차

💡

이 글은 PstgreSQL 16 베타 버전 업데이트 소식을 번역하여 각색되었습니다.

PostgreSQL 16 Released!
September 14, 2023 - The PostgreSQL Global Development Group today announced the release of PostgreSQL 16, the latest version of …

성능 개선

PostgreSQL 16은 새로운 쿼리 플래너 최적화를 통해 기존 PostgreSQL 기능의 성능을 향상시켰습니다. 이번 릴리스에서는 쿼리 플래너가 FULLRIGHT 조인을 병렬로 수행할 수 있으며, DISTINCT 또는 ORDER BY 절을 사용하는 집계 함수에 대한 더 최적화된 계획을 생성할 수 있습니다. 또한, SELECT DISTINCT 쿼리에 대한 증분 정렬을 사용하고, 윈도우 함수를 더 효율적으로 실행할 수 있습니다. 이 릴리스는 또한 RIGHTOUTER "안티 조인"을 개선하여, 조인된 테이블에 없는 행을 식별할 수 있게 했습니다.

이번 릴리스에는 COPY 명령을 사용한 대량 로딩에 대한 개선 사항이 포함되어 있으며, 단일 및 동시 작업에서 테스트 결과 최대 300%까지 성능이 향상된 경우도 있습니다. PostgreSQL 16은 libpq를 사용하는 클라이언트에 대한 로드 밸런싱 지원을 추가하고, 전체 테이블 동결의 필요성을 줄이는 백업 전략에 개선을 도입했습니다. 또한, PostgreSQL 16은 x86과 ARM 아키텍처에서 SIMD를 사용한 CPU 가속을 도입하여 ASCII와 JSON 문자열 처리, 배열과 하위 트랜잭션 검색 등에서 성능을 향상시켰습니다.

💡

이번 버전에서는 쿼리 플래너 최적화를 통해 기존의 PostgreSQL 기능성을 개선하였습니다. 특히 이번 버전에서는 FULLRIGHT joins, 그리고 다양한 aggregate 함수에 대한 병렬 처리가 가능해졌습니다. 또한, COPY 명령을 사용한 대량 데이터 로딩 성능도 최대 300%까지 향상되었습니다. SIMD를 이용한 CPU 가속 기능도 새로 도입되어 ASCII와 JSON 문자열 처리, 배열 및 하위 트랜잭션 검색에서 성능을 향상시켰습니다.

논리 복제

논리 복제는 사용자가 PostgreSQL 논리 복제 프로토콜을 해석할 수 있는 다른 PostgreSQL 인스턴스나 구독자에게 데이터를 스트리밍할 수 있게 해줍니다. PostgreSQL 16에서는 사용자가 대기 인스턴스에서 논리 복제를 수행할 수 있습니다. 즉, 대기가 다른 서버에 논리적 변경을 게시할 수 있습니다. 이는 개발자에게 새로운 작업부하 분배 옵션을 제공합니다. 예를 들어, 더 바쁜 주 서버 대신 대기를 사용하여 하류 시스템에 논리적 변경을 복제할 수 있습니다.

게다가, PostgreSQL 16은 논리 복제에 대한 여러 성능 개선을 도입했습니다. 구독자는 이제 병렬 작업자를 사용하여 큰 트랜잭션을 적용할 수 있습니다. 기본 키가 없는 테이블의 경우, 구독자는 순차 스캔 대신 B-트리 인덱스를 사용하여 행을 찾을 수 있습니다. 특정 조건 하에서 사용자는 이진 포맷을 사용하여 초기 스냅샷을 빠르게 생성하고 적용할 수 있습니다.

💡

논리 복제를 통해 다른 PostgreSQL 인스턴스나 구독자로 데이터를 스트리밍할 수 있습니다. 이제는 스탠바이 인스턴스에서 논리 복제를 수행할 수 있어, 기존의 프라이머리보다 덜 바쁜 스탠바이를 사용하여 다운스트림 시스템에 로직 변경을 복제할 수 있습니다.

개발자 경험

PostgreSQL 16은 SQL/JSON 표준에서 더 많은 문법을 추가했습니다. JSON_ARRAY(), JSON_ARRAYAGG(), IS JSON과 같은 생성자와 조건이 포함됩니다. 이 릴리스에서는 천의 자리 구분자로 밑줄을 사용할 수도 있게 됐습니다(예: 5_432_000), 그리고 십진수가 아닌 정수 리터럴도 지원합니다. 예를 들면 0x1538, 0o12470, 0b1010100111000과 같은 것들이죠.

PostgreSQL 16을 사용하는 개발자들은 psql에서 새로운 명령어를 사용할 수 있게 됐습니다. 이 중에는 \bind가 있는데, 이를 통해 사용자는 파라미터화된 쿼리를 준비하고 \bind를 사용해 변수를 대체할 수 있습니다(예: SELECT $1::int + $2::int \bind 1 2 \g).

PostgreSQL 16은 텍스트 정렬에 대한 일반적인 지원도 개선했습니다. PostgreSQL 16은 기본적으로 ICU 지원을 내장하고, 환경에서 기본 ICU 로캘을 결정하며, 사용자가 맞춤 ICU 정렬 규칙을 정의할 수 있게 해줍니다.

💡

SQL/JSON 표준에서 더 많은 문법이 추가되었고, 수치형 리터럴에 천 단위 구분자를 사용할 수 있게 되었습니다. psql에서는 새로운 명령어들이 추가되어, 더욱 편리한 쿼리 관리가 가능해졌습니다.

모니터링

데이터베이스 작업 부하의 성능을 튜닝하는 중요한 측면 중 하나는 시스템에 대한 I/O 작업의 영향을 이해하는 것입니다. PostgreSQL 16은 pg_stat_io라는 새로운 키 I/O 지표의 원천을 소개합니다. 이를 통해 I/O 접근 패턴의 세밀한 분석이 가능해집니다.

게다가 이 릴리스는 pg_stat_all_tables 뷰에 테이블이나 인덱스가 마지막으로 스캔된 시각을 나타내는 새로운 필드를 추가했습니다. PostgreSQL 16은 또한 auto_explain을 더 읽기 쉽게 만들고, pg_stat_statementspg_stat_activity에서 사용하는 쿼리 추적 알고리즘의 정확도도 개선했습니다.

💡

I/O 작업의 영향을 이해하는 것은 데이터베이스 워크로드의 성능을 조정하는 데 있어 중요한 부분입니다. 이에 pg_stat_io가 새로 추가되어 I/O 액세스 패턴의 세밀한 분석이 가능해졌습니다.

## 접근 제어 및 보안

PostgreSQL 16은 접근 제어에 대한 더 세밀한 옵션을 제공하고 다른 보안 기능도 강화했습니다. 이 릴리스는 pg_hba.confpg_ident.conf 파일의 관리를 개선했고, 사용자 및 데이터베이스 이름에 대한 정규 표현식 일치와 외부 구성 파일에 대한 include 지시어를 허용합니다.

이 릴리스는 require_auth와 같은 여러 보안 지향적인 클라이언트 연결 파라미터를 추가했습니다. 이것은 클라이언트가 서버로부터 어떤 인증 파라미터를 수용할 것인지 지정할 수 있게 해줍니다. 또한 sslrootcert="system"은 PostgreSQL이 클라이언트의 운영 체제에서 제공하는 신뢰할 수 있는 인증 기관(CA) 저장소를 사용해야 함을 나타냅니다. 추가적으로, 이 릴리스는 postgres_fdwdblink와 같은 확장 프로그램이 인증된 자격 증명을 사용해 신뢰할 수 있는 서비스에 연결할 수 있도록 Kerberos 자격 증명 위임을 지원합니다.

💡

보다 세밀한 액세스 제어 옵션과 다양한 보안 기능이 개선되었습니다. 특히, pg_hba.confpg_ident.conf 파일의 관리가 향상되었으며, 클라이언트 측에서 서버로부터 받아들일 수 있는 인증 파라미터를 지정할 수 있는 require_auth 등이 추가되었습니다.


함께 읽으면 좋은 글

당신이 IT 종사자라면 옵시디언(Obsidian) 노트 앱을 꼭 써야하는 이유
노트 작성과 정보 관리는 개발자, 학자, 작가, 그리고 일반인들에게 필수적인 작업입니다. 어쩌면 당신은 Evernote, Notion, 또는 기본 메모 앱을 사용하고 있을지 모릅니다. 하지만 오늘은 특별한 노트앱, 옵시디언(Obsidian)에 대해 이야기해보려 합니다. 이 앱이 왜 주목받고 있는지, 그리고 당신이 이를 사용해야 하는 이유에 대해서 깊게 들어가보겠습니다. 옵시디언(Obsidian)의 기본
웹에서 GPU를 쓴다고? WebGPU: WebGPU란?
들어가며 웹의 세계에서 GPU를 이용해야 할 이유가 점점 늘고 있다. 그래픽 처리, 데이터 분석, 심지어는 웹 기반 게임까지, 이러한 다양한 분야에서 GPU의 힘은 무시할 수 없다. 하지만 웹에서 GPU를 이용하는 방법에는 여러가지 제약이 따른다. 이제 그 해결책으로 주목받고 있는 것이 바로 WebGPU입니다. 본 글에서는 WebGPU의 개념부터 실제 사용법, 그리고 WebGL과의