0.성능 최적화 및 모니터링
1.1 pg_stat_io 시스템 뷰
설명: 새로운 시스템 뷰로, 테이블, 인덱스, 기타 객체의 IO 통계를 제공합니다. 이를 통해 데이터베이스 관리자들은 IO 활동을 모니터링하고 성능 병목 현상을 파악할 수 있습니다.
SELECT * FROM pg_stat_io WHERE relname = 'my_table';
1.2 pg_checkpointer 백그라운드 작업 프로세스
설명: PostgreSQL 16에서 새롭게 도입된 백그라운드 프로세스로, 체크포인트 작업을 관리하여 데이터베이스 성능에 미치는 영향을 줄일 수 있습니다.
SELECT pg_stat_bgwriter();
1.3 SIMD 최적화
설명: 문자열 처리나 수치 연산 등 다양한 연산에서 SIMD 명령어를 활용하여 내부적으로 성능을 크게 향상시켰습니다.
1. 논리적 복제(Logical Replication)
PostgreSQL 16의 논리적 복제 기능은 매우 유연하게 개선되었습니다. 특히, 스탠바이 노드(복제본 노드)에서 논리적 복제를 실행할 수 있게 되면서, 다음과 같은 장점이 생겼습니다.
-
복제 인프라 유연성: 이전에는 논리적 복제를 위해 반드시 마스터 노드(원본 노드)에서만 설정할 수 있었는데, 이제는 스탠바이 노드에서도 설정이 가능해져 복제 인프라를 더 유연하게 구축할 수 있습니다. 이를 통해 고가용성(HA) 환경에서의 활용도가 높아졌습니다.
-
필터링 기능: 논리적 복제는 특정 테이블, 스키마, 또는 특정 조건에 맞는 데이터만 복제할 수 있도록 필터링할 수 있게 되었습니다. 예를 들어, 특정 스키마에 속한 테이블만 복제하거나, 특정 조건을 만족하는 레코드만 복제할 수 있습니다. 이를 통해 네트워크 트래픽과 스토리지 자원을 절약하면서도 필요한 데이터만을 선택적으로 복제할 수 있습니다.
-- 논리적 복제에서 필터링 모드를 설정할 수 있는 파라미터로,
-- 특정 테이블이나 스키마만 복제할 수 있도록 도와
SET logical_replication_mode = 'per-table';
-- 기존의 publication에 테이블, 스키마 또는 필터링 조건을 추가하거나 변경
ALTER PUBLICATION my_publication ADD TABLE my_table;
- 비슈퍼유저 subscription 생성: 이전 버전에서는 논리적 복제를 설정할 때 슈퍼유저 권한이 필요했지만, 이제는 비슈퍼유저도 subscription을 생성할 수 있게 되었습니다. 이는 더 세밀한 권한 관리와 함께 보안을 강화하는 데 큰 도움이 됩니다.
ALTER SUBSCRIPTION my_subscription SET (enabled = false);
2. 스토리지(Storage) 개선
PostgreSQL 16은 스토리지 관리의 효율성을 크게 향상시키는 여러 개선을 도입했습니
- 병렬 VACUUM: VACUUM 작업이 병렬로 실행될 수 있어 대규모 데이터베이스의 유지보수 시간이 크게 단축됩니다. 이는 테이블이 커질수록 더욱 중요한데, 병렬로 VACUUM을 실행하면 여러 워커 프로세스가 동시에 작업을 수행하여, 데이터 청소 작업을 더 빠르고 효율적으로 진행할 수 있습니다.
SET parallel_vacuum_workers = 4;
- 페이지 단위 프리징: PostgreSQL의 프리징(freezing) 메커니즘은 오래된 트랜잭션 ID가 데이터베이스 내에서 오버플로되지 않도록 하는 중요한 작업입니다. 이제는 VACUUM 과정에서 전체 테이블을 프리징하는 대신, 각 페이지를 독립적으로 프리징할 수 있어, 성능이 크게 개선되고 작업의 신속성이 보장됩니다.
- IO 통계: 새로운 IO 통계 기능은 데이터베이스의 성능 병목 현상을 더 잘 파악할 수 있도록 도와줍니다. PostgreSQL은 이제 데이터베이스의 각 테이블과 인덱스에 대한 IO(입출력) 통계를 수집하여 관리자가 성능을 최적화할 수 있는 더 많은 정보를 제공합니다. 이를 통해 특정 쿼리 또는 작업이 데이터베이스 IO를 어떻게 사용하는지에 대한 깊은 인사이트를 얻을 수 있습니다.
SELECT * FROM pg_stat_io WHERE relname = 'my_table';
- 새로운 SQL 기능
PostgreSQL 16은 개발자들이 더 많은 기능을 활용할 수 있도록 여러 가지 새로운 SQL 기능을 도입했습니다:
- JSON 기능 개선: JSON 데이터를 다루는 SQL 함수가 더 강력해졌습니다. 예를 들어, JSON 데이터를 필터링, 병합 또는 검색하는 데 사용되는 함수들이 개선되었고, 더 복잡한 JSON 데이터를 처리하는 것이 훨씬 쉬워졌습니다. 이는 특히 NoSQL과 같은 유연한 데이터 모델을 필요로 하는 애플리케이션에서 매우 유용합니다.
SELECT jsonb_insert('{"a": 1, "b": 2}', '{b}', '"c": 3', false);
- 병렬 해시 조인: 해시 조인(Hash Join)은 대용량 데이터셋 간의 조인을 빠르게 처리하기 위해 자주 사용됩니다. PostgreSQL 16에서는 이 해시 조인 작업을 병렬로 수행할 수 있어, 큰 데이터셋을 다룰 때의 쿼리 성능이 더욱 향상되었습니다. 이 기능은 특히 데이터 웨어하우징 작업이나 분석 쿼리에서 유용합니다.
SET hash_index_build_concurrent = true;
- 새로운 텍스트 정렬 옵션: PostgreSQL 16은 다양한 텍스트 정렬(collation) 옵션을 추가하여, 다국어 환경에서 텍스트 데이터를 더 정확하게 정렬할 수 있도록 지원합니다. 예를 들어, 지역별 언어 규칙에 따라 정렬 순서를 맞출 수 있습니다.
4. 보안 및 권한 관리
PostgreSQL 16에서의 보안과 권한 관리 개선 사항은 데이터베이스 관리의 복잡성을 줄이면서도 보안을 강화했습니다
- 슈퍼유저 권한 불필요: PostgreSQL 16에서는 슈퍼유저 권한이 없어도 특정 관리 작업을 수행할 수 있습니다. 이는 데이터베이스의 보안을 유지하면서도 운영 효율성을 높이는 데 기여합니다. 예를 들어, 특정 기능이나 작업을 수행하는 데 더 이상 슈퍼유저 권한이 필요하지 않게 됨으로써, 조직 내에서 최소 권한 원칙을 더욱 철저히 적용할 수 있습니다.
- Kerberos 자격 증명 위임: PostgreSQL 16은 Kerberos 인증을 사용하는 경우, 자격 증명을 다른 시스템에 위임할 수 있도록 지원합니다. 이는 복잡한 인증 체계를 가진 대기업 환경에서 매우 유용하며, 보안을 강화하면서도 인증 프로세스를 간소화할 수 있습니다.
5. 기타 성능 개선
PostgreSQL 16은 다양한 성능 최적화 기능을 추가했습니다
- 메모리 관리 개선: 메모리 사용을 더 효율적으로 최적화하여, 특히 대규모 데이터베이스에서의 성능이 향상되었습니다. 더 나은 캐시 관리와 최적화된 메모리 할당 메커니즘을 통해, 쿼리 처리 속도가 빨라지고 메모리 낭비가 줄어듭니다.
- SIMD 활용: 최신 CPU의 SIMD(Single Instruction, Multiple Data) 명령어를 활용하여 데이터 처리 성능을 극대화했습니다. SIMD는 하나의 명령어로 여러 데이터 요소를 동시에 처리할 수 있어, 특히 수학적 연산이나 대규모 데이터 처리에서 성능을 크게 향상시킵니다.
- 해시 인덱스 빌드 성능 향상: 해시 인덱스는 데이터베이스에서 빠른 검색을 가능하게 하는 중요한 도구인데, PostgreSQL 16에서는 해시 인덱스를 더 빠르게 생성할 수 있도록 최적화되었습니다. 이는 인덱스 생성 시간이 줄어들어, 더 빠른 쿼리 응답 시간을 제공합니다.
이 외에도 PostgreSQL 16은 많은 개선사항이 있지만, 위의 기능들은 가장 주목할 만한 것들입니다. 이 모든 개선 사항은 PostgreSQL 16이 더욱 강력하고 유연한 데이터베이스 관리 시스템으로 발전하는 데 기여합니다.