[운영 종료] TmaxTibero Tech Blog

티맥스티베로 공식 블로그는 https://tmaxtibero.blog/ 로 이전되었습니다.

티맥스티베로 공식 블로그 이전 자세히보기

튜닝

[Tibero] SQL Tuning (5)

TmaxTiberotech 2023. 6. 1. 16:50

Tuning 대상 식별 도구

본 문서에서는 SQL, 시스템 등 실행 쿼리에 대한 정보를 확인할 수 있는 도구들에 대해

안내합니다.

​​

1. 동적성능 뷰 (DPV, Dynamic Performance Veiws)

DBMS 조작 시 필요한 정보인 DBMS의 상태와 성능확인, 모니터링 등을 위한 뷰 입니다.

 

SQL 관련 시스템 관련
v$sqlarea
v$sqlstats
v$sql_plan
v$sql_plan_statistics
v$sysstat
v$session
v$pgastat, v$sgastat, v$osstat
v$system_event, v$latch
v$librarycache
 

 

2. Autotrace

수행중인 쿼리의 실행 계획이나 통계 정보를 보여줍니다.

Autotrace는 티베로(Tibero)에서 제공하는 SQL문장을 처리하는 대화용 유틸리티

'tbSQL 유틸리티' 안에서만 사용할 수 있습니다.

 

SQL> set autot[race]
          {off|on|trace[only]}
          [exp[lain]] [stat[istics]] [plans[tat]]

 

또한 Autotrace는 동적성능뷰 (DPV) 결과를 가공해 제공합니다.

  • Explain: v$sql_plan
  • Statistics: vt_autotracestat (from v$sysstat)
  • Planstat: v$sql_plan_statistics

​​

2.1. 수행예제

select emp.name emp_name,
  dept.name dept_name
from emp, dept
where emp.dept = dept.id
     and emp.name=‘홍길동’;

2.1.1. 예제1

실행결과 (On/Traceonly)

 

SQL> set autot on
SQL> /
EMP_NAME DEPT_NAME
---------- ----------
홍길동 인사팀
1 row selected.

실행계획 (Explain)

 

SQL ID: 2278
Plan Hash Value: 3043701884
Execution Plan
------------------------------------------------------------
1 HASH JOIN (Cost:52, %CPU:0, Rows:1)
2    TABLE ACCESS (FULL): EMP (Cost:26, %CPU:0, Rows:1)
3    TABLE ACCESS (FULL): DEPT (Cost:26, %CPU:0, Rows:1)
Predicate Information
------------------------------------------------------------
1 - access: ("EMP"."DEPT" = "DEPT"."ID") (1.000)
2 - filter: ("EMP"."NAME" = '홍길동') (1.000)

실행통계 (Statistics)

 

NAME              VALUE
---------------- --------------
db block gets            2
consistent gets       28
physical reads          0
redo size                  0
sorts (disk)               0
sorts (memory)        0
rows processed       1

2.1.2. 예제2

실행결과 (On/Traceonly)

 

SQL> set autot on explain planstat
SQL> /
EMP_NAME DEPT_NAME
---------- ----------
홍길동   인사팀
1 row selected.

 

실행계획 (Explain)

 

SQL ID: 2837
Plan Hash Value: 3043701884
Execution Plan
--------------------------------------------------------------------
1 HASH JOIN (Cost:52, %CPU:0, Rows:1)
2   TABLE ACCESS (FULL): EMP (Cost:26, %CPU:0, Rows:1)
3   TABLE ACCESS (FULL): DEPT (Cost:26, %CPU:0, Rows:1)
Predicate Information
--------------------------------------------------------------------
  1 - access: ("EMP"."DEPT" = "DEPT"."ID") (1.000)
  2 - filter: ("EMP"."NAME" = '홍길동') (1.000)
SQL ID: 2837
Plan Hash Value: 3043701884

 

노드별 실행 통계 (planstat)

 

Execution Stat
--------------------------------------------------------------------
1 HASH JOIN (Time:.03 ms, Rows:1, Starts:1)
2   TABLE ACCESS (FULL): EMP (Time:.06 ms, Rows:1, Starts:1)
3   TABLE ACCESS (FULL): DEPT (Time:.04 ms, Rows:1, Starts:1)

​​

3. SQL trace

SQL 종류 및 실행 단계, physical disk read와 consistent read 횟수 등 수행하는 모든 SQL에

대해 추적 및 Trace 파일을 생성함으로써 수행 정보를 알 수 있습니다.

SQL Trace를 통해 DBMS를 사용하는 application에서 문제가 되는 원인 및 쿼리 종류 등을 쉽게

파악할 수 있습니다.

제공정보

  • Parse, execute, fetch counts
  • CPU and elapsed times
  • Physical reads and logical reads
  • Number of rows processed
  • Userid under which each parse occurred
  • execution plan 정보

SQL Trace 설정

인스턴스 레벨 세션 레벨
TB_SID.tip에 설정
GATHER_SQL_PLAN_STAT = Y | N
flag가 켜져 있는 경우, 모든 수행 query마다 statistics를 수집하게 되므로, 서버 운용 중에는 flag가 활성화되지 않도록 처리
세션 레벨에서 변경 가능
SQL> ALTER SESSION SET SQL_TRACE = [ TRUE | FALSE ];
SQL> execute dbms_system.set_sql_trace_in_session (sid, serial#, [true|false]);
 
  • 특정 세션을 sql trace로 모니터링 시 v$session 뷰의 SQL_TRACE 컬럼 정보가

      ‘ENABLED’로 보입니다.

  • SQL Trace로 모니터링이 끝나면 바로 sql trace를 종료합니다.
  • $TB_HOME/instance/{TB_SID}/log/sqltrace디렉토리에 trc 확장자로, tb_sqltrace_[PID]_[TID]_[SESSION_SERIAL_NO].trc 파일이 생성됩니다.

3.1. tbprof

SQL Trace를 통해 만들어진 TRC 파일은 수행 중 최소한의 성능 피해를 주기 위한 포맷으로

정보를 남기므로 바로 읽고 분석하기에는 불편함이 있습니다.

이 때 같은 SQL 수행 별로 통합하거나 사용자가 보기에 더 편한 포맷으로 변환해주는 툴인

'tbprof' 를 이용할 수 있습니다.

3.1.1. 사용방법

$ tbprof inputfile_name output_filename [SORT=sort_option] [PRINT=integer]

[AGGREGATE=YES|NO]

  • SORT: 결과를 정렬하는 방식으로 sort_option이 있는 경우 tbprof는 sort_option에 따라

                  결과들을 내림차순으로 정렬

  • AGGREGATE : 같은 SQL에 대한 정보를 합산할 것인지 결정

Example) $ tbprof tb_sqltrc_19693_19_8.trc test.prf sort=prsqry,exeqry,fchqry

3.1.2. 사용예시

실행쿼리

select emp.name emp_name, dept.name dept_name
from emp, dept
where emp.dept = dept.id and emp.name='홍길동'

전체통계

stage count cpu elapsed current query disk rows
------------------------------------------------------------------------------------------
parse 1 0.00 0.00 4 129 15 0
exec 1 0.00 0.00 0 0 0 0
fetch 1 0.00 0.00 1 17 16 1
-----------------------------------------------------------------------------------------
sum 3 0.00 0.00 5 146 31 1
rows execution plan
----------------------------------------------------------
     1 hash join (et=67, cr=0, cu=0, co=242, cpu=0, ro=1)
     1 table access (rowid) EMP(1661) (et=58, cr=1, cu=0, co=216, cpu=0, ro=1)
    1 index (range scan) IDX_EMP(1671) (et=14, cr=2, cu=0, co=215, cpu=0, ro=1)
101 table access (full) DEPT(1662) (et=329, cr=14, cu=1, co=26, cpu=0, ro=1)

 ↑ 결과row수       ↑Plan 노드타입                 ↑실행통계                 ↑옵티마이저 추정치      ↑노드별 통계

 

 

☞[Tibero] SQL Tuning (6)에서 계속됩니다.​

'튜닝' 카테고리의 다른 글

[Tibero] SQL Tuning (7)  (0) 2023.06.05
[Tibero] SQL Tuning (6)  (0) 2023.06.05
[Tibero] SQL Tuning (4)  (0) 2023.06.01
[Tibero] SQL Tuning (3)  (0) 2023.05.31
[Tibero] SQL Tuning (2)  (0) 2023.05.30