ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

Oracle Database の STS(SQL Tuning Set) を活用して、SQL の 性能統計 や 実行計画 を キャプチャする。

表題の通り、STS(SQL Tuning Set) を使って、
SQL の 性能統計 や 実行計画 を キャプチャするやで彡(゚)(゚)

まず DBMS_SQLTUNE.CREATE_SQLSETファンクション を実行して、STS を作成しまする。

VAR v_sts_name VARCHAR2(30);
EXEC :v_sts_name := DBMS_SQLTUNE.CREATE_SQLSET;

PL/SQL procedure successfully completed.

PRINT v_sts_name

V_STS_NAME
--------------------------------
STS_5

上記の時点で STS は空です。この空の STSSQL を ロードするやで彡(゚)(゚)

STSSQL をロードするやり方は幾つかあるんですが、今回は
DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSETプロシージャを使用して、
共有プール上のカーソル・キャッシュを定期ポーリングする方法でやってみます。
下記の例だとカーソル・キャッシュを6秒毎に1分間ポーリングしてます。

BEGIN
  -- カーソル・キャッシュの定期ポーリング(6秒毎1分間)
  DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET (
    :v_sts_name,                         -- sqlset_name
    60,                                  -- time_limit
    6,                                   -- repeat_interval
    'MERGE',                             -- capture_option
    DBMS_SQLTUNE.MODE_REPLACE_OLD_STATS, -- capture_mode
    'parsing_schema_name NOT IN (
      ''SYS'', ''SYSTEM'', ''SYSMAN''
    )',                                  -- basic_filter
    NULL
  );
END;
/

PL/SQL procedure successfully completed.

STS にキャプチャされた SQL の各種統計は、
DBMS_SQLTUNE.SELECT_SQLSETテーブル・ファンクションで見れるで(`・ω・)Ъ

SET LINESIZE 170;
COL SQL_ID FOR A15
COL SQL_TEXT FOR A30 TRUNC
COL PARSING_SCHEMA_NAME FOR A15
COL MODULE FOR A10 TRUNC
SELECT PARSING_SCHEMA_NAME
     , MODULE
     , SQL_ID
     , PLAN_HASH_VALUE
     , SQL_TEXT, EXECUTIONS
     , ELAPSED_TIME
     , CPU_TIME
     , BUFFER_GETS
     , DISK_READS
  FROM TABLE(DBMS_SQLTUNE.SELECT_SQLSET(:v_sts_name))
 ORDER BY 1, 2, 3, 4;

★6種類の sql_id/plan_hash_value が STS にキャプチャされていて、各種性能統計も確認できる。★
PARSING_S MODULE     SQL_ID          PLAN_HASH_ SQL_TEXT            EXECUTIONS ELAPSED_TIME   CPU_TIME BUFFER_GETS DISK_READS
--------- ---------- --------------- ---------- ------------------- ---------- ------------ ---------- ----------- ----------
AYSHIBAT  DBMS_SCHED ax51s81797wdk   3432972933 SELECT ABS(MAX(PRIV         22       149512       8630          22          5
AYSHIBAT  SQL*Plus   bpvjtmt8rrky4   2824937026 SELECT /                    19      1429922    1293970        5105         16
DBSNMP    JDBC Thin  bnk69f12mthy2            0 begin dbms_applicat     139354     40132300   33623176        3618        600
DBSNMP    JDBC Thin  gj5r9jj2xad7f   2529664852                          31929      5628797    5631380          76          0
DBSNMP    emagent_SQ 4mua4wc69sxyf    702510694                           1598     43455392     989359         100          0
DBSNMP    emagent_SQ g1n7yg84rqj0y   1662736584                           1598       635315     636398         233          0

6 rows selected.

STS に取り込まれた SQL の 実行計画は
DBMS_XPLAN の DISPLAY_SQLSETファンクションで見れるやで彡(^)(^)

SET PAGESIZE 300;
SET LINESIZE 170;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_SQLSET(:v_sts_name, 'ax51s81797wdk', NULL));

★STS に 取り込まれた sql_id="ax51s81797wdk" の実行計画が確認できる。★
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------
SQL Tuning Set Name: STS_5
SQL Tuning Set Owner: AYSHIBAT
SQL_ID: ax51s81797wdk
SQL Text: SELECT ABS(MAX(PRIVILEGE)) FROM SYS.SYSTEM_PRIVILEGE_MAP WHERE NAME =
          :B1
--------------------------------------------------------------------------------

Plan hash value: 3432972933

------------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                        |       |       |     1 (100)|          |
|   1 |  SORT AGGREGATE             |                        |     1 |    25 |            |          |
|   2 |   FIRST ROW                 |                        |     1 |    25 |     1   (0)| 00:00:01 |
|   3 |    INDEX FULL SCAN (MIN/MAX)| I_SYSTEM_PRIVILEGE_MAP |     1 |    25 |     1   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------


18 rows selected.

マニュアル(↓)も見とくんやで! ↑の事項はだいたい載っとるで 彡(-)(-)

Oracle Databaseパフォーマンス・チューニング・ガイド
11gリリース2 (11.2)
B56312-06
17.4 SQLチューニング・セットの管理
http://docs.oracle.com/cd/E16338_01/server.112/b56312/sql_tune.htm#i34915
Oracle Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
140 DBMS_SQLTUNE
SQLチューニング・セット・サブプログラム
http://docs.oracle.com/cd/E16338_01/appdev.112/b56262/d_sqltun.htm#CHDGHEAG

STSの中身は↓(SQLSET_ROWオブジェクト・タイプ)で確認できます。

SQLSET_ROWオブジェクト・タイプ
http://docs.oracle.com/cd/E16338_01/appdev.112/b56262/d_sqltun.htm#CACCIEIG

STS を使うには、Tuning Pack 又は RAT(Real Application Testing) の
オプション・ライセンスが要ります。(`・ω・)ゞ

Oracle Databaseライセンス情報
11gリリース2 (11.2)
B56284-10
Oracle Tuning Pack
http://docs.oracle.com/cd/E16338_01/license.112/b56284/options.htm#CIHFIHFG
 > Oracle Tuning Packに含まれる機能は、次のとおりです。
 > :
 > SQLチューニング・セット ★
 > :
Oracle® Databaseライセンス情報
11gリリース2 (11.2)
B56284-10
Oracle Real Application Testing
http://docs.oracle.com/cd/E16338_01/license.112/b56284/options.htm#CJAGBGHH
 > Oracle Real Application Testingオプションに含まれる機能は、次のとおりです。
 > :
 > SQLチューニング・セット(STS) ★

Qiitaにも投稿してみますた。

Oracle Database の STS(SQL Tuning Set) を活用して、SQL の 性能統計 や 実行計画 を キャプチャする。
http://qiita.com/ora_gonsuke777/items/d2965a105feebac9f25a