EDB version 11 새로운 기능

3 분 소요

Overview

PostgreSQL 11 버전에서는 160가지 이상의 새로운 기능 추가와 버그 픽스가 이루어졌다.

분석 쿼리의 성능 향상

아래 조건을 충족시 parallel query가 적용되는 범위 확장

  • Hash Join 연산
  • Append 연산
  • on SELECT INTO 구문
  • CTAS, CREATE INDEX, CREATE MV 구문 등에도 적용된다

파티션 테이블의 기능 강화

  • 해시(HASH partition) 파티션 지원
  • 파티션 테이블에 PRIMARY KEY, UNIQUE KEY 생성 가능
  • 각 파티션에 자동으로 인덱스 생성 가능
  • 파티션 테이블에 대한 FOREIGN KEY 생성 가능
  • 어느 파티션에도 해당하지 않는 값에 대한 디폴트 파티션 지정 가능

Ver 11에서 폐지된 기능들 (✔️ 이관시 챙겨야 할 사항)

  • CREATE FUNCTION 구문에서의 WITH 절 비호환
  • 시스템 카탈로그 뷰에서 추가되고 삭제된 컬럼들이 존재

새로운 기능 자세히 보기

1. 좀더 다양한 상황에서 병렬 쿼리(parallel query) 사용이 가능해졌다.

  • 해시 조인이 발생하는 상황
  • UNION ALL 구문 같은 append 처리
  • CTAS 구문
  • MV(Materialized View) 생성 구문
Parameter Description
max_parallel_workers_per_gather 하나의 쿼리당 수행 가능한 최대 worker 프로세스 개수를 설정하는 값. 기본 설정값은 0이 므로 Parallel 처리를 원한다면 0보다 큰 값으로 설정한다. 이 값은 세션 레벨에서도 변경할 수 있다.
dynamic_shared_memory_type 서버가 사용해야 하는 동적 공유 메모리 구현을 설정하는 값. enum 타입의 값으로 플랫폼에 따라 유닉스 계열 OS에는 posix, System V 공유 메모리 형식의 OS에는 sysv, 윈도우의 경우는 windows, 이 기능 비활성을 하려면 none으로 설정한다.
   
explain select count(*) from t_random inner join s_random on t_random.s = s_random.s;

Version 11 Version 11

Version 10 Version 11

병렬 처리가 실행될 수 있는 상황과 조건에 대한 더 자세한 내용은 PostgreSQL 공식 웹사이트의 관련 글 참조.

explain select count(*) from t_random UNION ALL select count(*) from s_random ; 

Version 11 Version 11

Version 10 Version 11

explain create table para_1 as select count(*) from t_random ; 

2. B-tree 타입의 인덱스에 한해서 병렬 쿼리를 통한 CREATE INDEX가 가능해졌다.

numberic 타입의 랜덤 더미 데이터 100만 건을 작성한다.

CREATE TABLE t_demo (data numeric) tablespace tbs_master;
 
CREATE OR REPLACE PROCEDURE insert_data(buckets integer)
LANGUAGE plpgsql
AS $$
   DECLARE
      i int;
   BEGIN
      i := 0;
      WHILE i < buckets
      LOOP
         INSERT INTO t_demo SELECT random()
            FROM generate_series(1, 1000000);
         i := i + 1;
         RAISE NOTICE 'inserted % buckets', i;
         COMMIT;
      END LOOP;
      RETURN;
   END;
$$;
 
CALL insert_data(100);
Parameter Description
max_parallel_maintenance_workers 11 버전부터 도입된 파라미터로 정수값을 사용하며 B-tree 타입의 인덱스를 빌드할 때 영향을 주고 max_worker_processes에서 정의된 풀 숫자에 제한을 받기 때문에 그 이상은 부여할 수 없다. 디폴트 값은 2.
   

병렬로 인덱스를 빌드할 때 영향을 주는 두 파라미터 값을 확인한다.

SHOW max_worker_processes;
SHOW max_parallel_maintenance_workers;

인덱스 작성.

CREATE INDEX idx1 ON t_demo (data);

max_parallel_maintenance_workers를 0으로 변경한 후 인덱스 작성.

SET max_parallel_maintenance_workers TO 0;
CREATE INDEX idx2 ON t_demo (data);

병렬 쿼리를 통한 B-tree 타입의 인덱스 생성에 관한 글.

3. 해시 파티션 지원

PostgreSQL 11 버전부터 해시 파티션도 지원 시작. EDB에서는 10버전부터 오라클과의 호환성 차원에서 해시 파티션이 이미 가능함.

참고 링크

카테고리:

업데이트: