PostgreSQL 16 쿼리 플래너의 새로운 기능
- PostgreSQL 16은 쿼리 플래너에 많은 개선을 도입하여 많은 SQL 쿼리들이 이전 버전보다 더 빠르게 실행됨.
- PG16 릴리스 노트에서 이러한 플래너 개선 사항을 볼 수 있지만, PostgreSQL 릴리스마다 변경 사항이 많아 각 변경 사항에 대한 자세한 설명을 제공하기 어려움.
- 이 블로그 포스트에서는 PostgreSQL 16 쿼리 플래너에서 이루어진 10가지 개선 사항에 대한 깊은 분석을 제공하며, PG15와 PG16 플래너 출력의 비교와 함께 변경된 사항에 대한 예제를 제공함.
PostgreSQL 16 쿼리 플래너의 10가지 개선 사항
-
증분 정렬: PostgreSQL 13에서 처음 도입된 증분 정렬은 일부 결과 집합이 이미 하나 이상의 선행 열로 정렬되어 있는 경우 이를 활용하여 나머지 열에 대해서만 정렬을 수행함.
-
정렬된 데이터를 사용하는 집계: PostgreSQL 16 쿼리 플래너는 이제 집계 노드에 정렬된 순서대로 행을 공급하는 계획을 형성하려고 시도함.
-
메모이제이션: PostgreSQL 14에서 처음 도입된 메모이제이션 계획 노드는 중복된 값 조회를 피하기 위해 캐시 계층으로 작동함.
-
안티 조인: PostgreSQL 16은 안티 조인을 수행할 때 더 작은 테이블을 해시할 수 있도록 함.
-
병렬 해시 조인: PostgreSQL 16은 FULL 및 RIGHT 조인 유형에 대한 병렬 해시 조인을 지원함.
-
윈도우 함수 최적화: PostgreSQL 16은 ROWS 모드를 사용할 때 RANGE 모드보다 빠른 윈도우 함수를 사용할 수 있도록 함.
-
항상 증가하는 윈도우 함수 최적화: PostgreSQL 16은 ntile(), cume_dist(), percent_rank() 등의 윈도우 함수에 대한 최적화를 확장함.
-
파티션 테이블에서의 조인 제거: PostgreSQL 16은 파티션 테이블에서 LEFT JOIN 제거 최적화를 허용함.
-
DISTINCT 쿼리에 대한 Limit 사용: PostgreSQL 16 쿼리 플래너는 모든 행이 동일한 값을 포함하고 있음을 감지할 수 있을 때 결과의 중복 제거를 위한 계획 노드를 포함하지 않음.
-
Merge Join에 대한 규칙 완화: PostgreSQL 16 쿼리 플래너는 Merge Join을 고려할 때 행의 순서가 정확히 일치하는 대신 최소한 하나의 선행 열이 올바르게 정렬되어 있는지 확인함.
GN⁺의 의견
- PostgreSQL 16의 쿼리 플래너 개선은 데이터베이스 성능 향상에 중요한 역할을 함. 특히 증분 정렬과 메모이제이션 같은 기능은 복잡한 쿼리를 더 효율적으로 실행할 수 있게 해줌.
- 이러한 개선 사항들은 PostgreSQL을 사용하는 개발자와 데이터베이스 관리자에게 매우 유용할 것이며, 특히 대규모 데이터를 다루는 시스템에서 성능 개선을 체감할 수 있을 것임.
- PostgreSQL 커뮤니티의 지속적인 혁신과 개선 노력은 오픈 소스 데이터베이스 기술의 발전을 이끌고 있으며, 이는 사용자와 기업에게 더 나은 데이터 관리 솔루션을 제공함.