줄기세포

[Tibero] SQL 플랜 본문

DB/Tibero

[Tibero] SQL 플랜

줄기세포(Stem_Cell) 2022. 2. 21. 09:20

1. SQL플랜

쿼리 플랜은 optimizer에 의해서 생성되고 V$SQL_PLAN 에 저장된다.
V$SQL_PLAN에 없는 새로운 쿼리문이 들어오면, optimizer는 플랜을 생성하는데, 이 과정을 hard parsing이라고 부른다.
optimizer가 플랜을 생성하지 않고 V$SQL_PLAN의 계획을 재사용하는 것은 soft parsing이라 부른다.

 

쿼리를 수행하면서 플랜을 보기 위해서는 아래 명령어를 입력하면 볼 수 있다.

SQL> SET AUTOT[RACE] {OFF|ON|TRACE[ONLY]} [옵션절];

쿼리 수행 시 TRACE 정보가 ON 상태면, V$SQL_PLAN에 저장된 정보를 표시해준다.


 

2. tbsql 툴에서 쿼리플랜 및 통계정보 보는 방법

SQL> SET AUTOT[RACE] {OFF|ON|TRACE[ONLY]} [옵션절];

옵션절에 적절한 조합으로 trace 정보는 아래 세가지로 구성되어 있다.

   - EXPLAIN(플랜 노드 정보) : Execution Plan

   - STATISTICS(수행 후 전체 통계 정보)

   - PLANSTAT(플랜 노드 별 수행 정보) : Executio Stat

 
실제 수행
여부

수행결과
표시
실행계획
(Execution 
Plan)
실행통계
수행정보
(Execution
Stat)
비고
(0) set autot off
O
O
 
 
 
(기본값)
(1) set autotrace on
O
O
O
O
 
 
(2) set autotrace on explain
O
O
O
 
 
 
(3) set autotrace on statistics
O
O
 
O
 
 
(4) set autotrace on planstat
O
O
 
 
O


(5) set autotrace on explain planstat
O
O
O
 
O
 
(6) set autotrace traceonly
O
 
O
O
 
 
(7) set autotrace trace(only) exp(lain)
 
 
O
 
 
 
(8) set autotrace trace(only) stat(istics)
O
 
 
O
 
 
(9) set autotrace trace planstat
O
 
 
 
O
 
(10) set autot on explain statistics planstat
O
O 
O
O 
O 
모든걸 다 켠다

실제 수행 여부: DB에서 실제로 수행이 되는지 여부로 DB 리소스를 사용하게 된다.

                    화면으로 결과를 표출하는 것은 아니기 때문에 헷갈릴 수 있다.

실행계획 (Execution Plan) : Optimizer가 생성한 계획.

실행통계 : 쿼리 수행 중 변경, 사용된 리소스 통계를 보여줌

수행정보 (Execution Stat) : 실행계획 별로 times, rows, starts를 얼마나 사용했는지 나타내준다. <-V$SQL_PLAN_STATISTICS 의 정보를 가져오는 것 같다.

 

traceonly를 켰을 때  (실행계획, 실행통계 표출)
SQL> set autot on explain statistics planstat
SQL> select sum(quantity), product_id  from ORDER_ITEMS where unit_price >100 group by product_id;

---- 실행결과 ----
SUM(QUANTITY) PRODUCT_ID
------------- ----------
           .....
          500        287
          106        288

232 rows selected.

SQL ID: 8dm23fpdbvsxm
Child number: 10919
Plan hash value: 3631694354

---- 실행계획 ----
Execution Plan
--------------------------------------------------------------------------------
   1  GROUP BY (SORT) (Cost:23, %%CPU:0, Rows:66) 
   2    TABLE ACCESS (FULL): ORDER_ITEMS (Cost:23, %%CPU:0, Rows:66) 


Predicate Information
--------------------------------------------------------------------------------
   2 - filter: ("ORDER_ITEMS"."UNIT_PRICE" > 100) (0.100)

---- 실행통계 ----
NAME                                VALUE
------------------------------ ----------
db block gets                           1
consistent gets                        14
physical reads                          0
redo size                               0
sorts (disk)                            0
sorts (memory)                          1
rows processed                        232

---- 수행정보 ----
Execution Stat
--------------------------------------------------------------------------------
   1  GROUP BY (SORT) (Time:.43 ms, Rows:232, Starts:1) 
   2    TABLE ACCESS (FULL): ORDER_ITEMS (Time:.12 ms, Rows:608, Starts:1) 

* 실행통계
db block gets : 현재의 블록이 요구된 횟수
consistent gets : consistent mode에서 읽은 논리 블록 수를 누적한 시스템 통계정보
physical reads : 디스크로부터 읽은 데이터 블록의 총 개수
redo size : redo log가 만들어진 크기 (size)
sorts (disk) : disk에서 일어난 sort 수
sorts (memory) : memory에서 일어난 sort 수
 rows processed : 연산을 하는 동안 처리한 row 수

 


참고> 접속한 유저가 plustrace role이 없다면, 아래와 같은 오류가 난다.

plustrace role이 초기 설치에는 존재하지 않을 것이기 때문에,

아래처럼 $TB_HOME/scripts/ 경로의 plustrace.sql 을 dba 권한을 가진 유저로 수행한다.

[tibero@test ~]$ cd $TB_HOME/scripts/

[tibero@test /db/tibero6/scripts]$ ls -alrt | grep plustrace
-rw-r--r--.  1 tibero dba    227 Nov 25 11:30 plustrace.sql

[tibero@test /db/tibero6/scripts]$ tbsql sys/tibero @plustrace.sql
tbSQL 6  
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Connected to Tibero.

Role 'PLUSTRACE' dropped.

Role 'PLUSTRACE' created.

Granted.

Granted.

Granted.

Granted.

SQL> grant plustrace to [USER];

plustrace.sql 내부는 이렇게 생겼다.

plustrace.sql
drop role plustrace;
create role plustrace;

grant select on vt_autotracestat to plustrace;
grant select on v$sql_plan to plustrace;
grant select on v$sql_plan_statistics to plustrace;
grant plustrace to dba with admin option;

그냥 grant 옵션을 sql plan을 보려는 user에게 부여해도 된다.

grant select on vt_autotracestat to [USER];
grant select on v$sql_plan to [USER];
grant select on v$sql_plan_statistics to [USER];

 


 

 

 

3. Tibero Studio에서 보는 방법

A> DBA권한을 활성화 하는 방법은 TiberoStudio.ini 파일을 메모장으로 열어서 빨간색 부분처럼 true로 변경한다.(기본값: false)

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-logLevel=info
-isDBA=true
-vmargs
-Xms256m
-Xmx1024m

B> DBA - SQL Monitor를 활성화 하면 된다.

Comments