나그네소

PG_HINT(Postgresql Comunity) 본문

Open Source DB/PostgreSQL Comunity

PG_HINT(Postgresql Comunity)

나그네소티 2022. 10. 27. 19:16

Postgresql는 Hint가 기본 적으로 제공 하지 않고 있다.  다만 이를 해결 하기 위하여 pg_hint library을
제공 하고 있고 이를 이용하면 사용이 가능 하다. (pg_hint)

 

1. EDB Hint 방법

EDB 에서는 Postgresql Comunity pg_hint를 지원 하는지 않는다.
edb에서는 pg_hint library를 제공 하지 않는다. 다만 일반 RDBM의 hint와 유사하게 제공을 하고 있다. 가지수는
많지는 않다.
 

2. PG_HINT 설치 방법

tar.gz으로 파일 설치 방법 (postgresql 9.6 이하 버젼)
예전 버전을 9.6 이하 version으로 설치 할 때 tar.gz을 받아 make해서 설치 하는 방법이다.
 

2-1) Source Make

# gunzip pg_hint_plan96-1.1.3.tar.gz # tar xvf pg_hint_plan96-1.1.3.tar
# make PG_CONFIG=/usr/local/pgsql/bin/pg_config
# make PG_CONFIG=/usr/local/pgsql/bin/pg_config install

2-2) postgresql.conf 등록

shared_preload_libraries = 'pg_hint_plan‘
posgresql.conf 파일에 아래의 내용을 기록 저장 후 postgresql 재 기동 합니다. 

 

2-3) 개별 session에서 pg_hint 로드

postgres=# LOAD 'pg_hint_plan';
 

2-4) 사용법

Example Link : https://pghintplan.osdn.jp/pg_hint_plan.html

example)
create table t1(c1 int, c2 int);
create index t1_idx1 on t1 (c1);
create index t1_idx2 on t1 (c1,c2);

explain (costs false)
select * from t1 where c1 = 1;
--------------------
Seq Scan on t1
   Filter: (c1 = 1)


/*+ IndexScan(t1 t1_idx1) */
explain (costs false)
select * from t1 where c1 = 1;
--------------------------------
Index Scan using t1_idx1 on t1
   Index Cond: (c1 = 1)

: pg_hint을 주어 처리 시 Index Scan 타는 것을 확인 할 수 있다.

 

3. yum으로 pg_hint 설치 (postgresql 10.x 이상)

Postgresql 10.x version 이상 부터는 yum으로 설치하여 사용 한다.

 

3-1) Down Load

download link : https://osdn.net/projects/pghintplan/releases/

$>ls
pg_hint_plan13-1.3.7-1.el7.x86_64.rpm
: pg_hint down 받은 버젼 과 postgresql version이 동일해야 한다.
 

3-2) Install

[postgres:/home/postgres] sudo rpm -ivh pg_hint_plan13-1.3.7-1.el7.x86_64.rpm
준비 중...                         ################################# [100%]
Updating / installing...
1:pg_hint_plan13-1.3.7-1.el7       ################################# [100%]

>> 오류 사항
version이 다르면 아래와 같은 오류 발생 한다.
[postgres:/home/postgres] sudo rpm -ivh pg_hint_plan13-1.3.7-1.el7.x86_64.rpm
[sudo] postgres의 암호:
오류: Failed dependencies:
    postgresql13-server is needed by pg_hint_plan13-1.3.7-1.el7.x86_64

3-3) postgresql.conf 추가

shared_preload_libraries = 'pg_hint_plan‘
$> pg_ctl restart

: conf에 추가하고 재기동 하지 않으면 pg_hint가 적용 되지 않는다.

 

3-4) Extenstion 추가

- mydb=> select name from pg_available_extensions where name like '%hint%';
     name     
--------------
pg_hint_plan
: pg_hint을 설치 하지 않으면 pg_available_extensions 항목 자체가 보이지 않는다.

- mydb=# create extension pg_hint_plan;
CREATE EXTENSION

3-5) Hint Query 수행

example)
create table t1(c1 int, c2 int);
create index t1_idx1 on t1 (c1);
create index t1_idx2 on t1 (c1,c2);

explain (costs false)
select * from t1 where c1 = 1;
--------------------
Seq Scan on t1
   Filter: (c1 = 1)


/*+ IndexScan(t1 t1_idx1) */
explain (costs false)
select * from t1 where c1 = 1;
--------------------------------
Index Scan using t1_idx1 on t1
   Index Cond: (c1 = 1)

 

4. EDB 사용법

EDB는 pg_hint을 지원 하지 않고 일반적인 DBMS의 Hint을 제공 하고 있다. 다만 종류수가 정말 없다.
없는 건지도 모르고 안된다고 한참 헤맷다. (reading 없음)

 

4-1) 지원되는 Hint 리스트

Link : https://www.enterprisedb.com/docs/epas/latest/epas_compat_ora_dev_guide/05_optimizer_hints/

 

4-2) EDB Example

create table t1(c1 int, c2 int);
create index t1_idx1 on t1 (c1);
create index t1_idx2 on t1 (c1,c2);

mydb=> explain (costs false) select /*+ index(t1 t1_idx1) */ * from t1 where c1 = 1;
             QUERY PLAN             
------------------------------------
Bitmap Heap Scan on t1
   Recheck Cond: (c1 = 1)
   ->  Bitmap Index Scan on t1_idx1
         Index Cond: (c1 = 1)
(4개 행)

작업시간: 0.367 ms
mydb=> /*+ IndexScan(t1 t1_idx1) */
mydb-> explain (costs false) select  * from t1 where c1 = 1;
             QUERY PLAN             
------------------------------------
Bitmap Heap Scan on t1
   Recheck Cond: (c1 = 1)
   ->  Bitmap Index Scan on t1_idx2
         Index Cond: (c1 = 1)
 

'Open Source DB > PostgreSQL Comunity' 카테고리의 다른 글

Postgresql ODBC 사용법  (0) 2022.11.08
Postgres Sql Tuning  (1) 2022.11.02
postgresql comunity 개념  (0) 2022.09.15