技術ブログ
このエントリは (全部俺) Oracle ACE Director Tanel Poder Advent Calendar 2013 21日目の記事です。
Tanel Poderさんのエントリを翻訳しようと思ったのですが、翻訳作業に使用しているGoogle翻訳者ツールキットの調子がイマイチだった(今では改善されているかもしれません)ので、翻訳はあきらめて、 引き続きTPT Scriptについて説明したいと思います。
非常に有益なノウハウが詰め込まれたTPT Scriptsですが、非常に多くのスクリプト から構成されており、全てをチェックするのは一般に困難です。
[oracle@l64rw3 sql]$ find -type f -name "*.sql" |wc -l 841
実際、私も全てのスクリプトをチェックできていません・・・ 抜粋してチェックしてゆきたいのですが、 どの観点から絞り込んでゆくか? いくつかの観点が考えられるかと思いますが、いわゆるUNIXの流儀に従うと、常用するコマンドは短い名前のはず!ということで、?.sqlというスクリプトをチェックすることにします。
[oracle@l64rw3 scripts]$ find -type f -name "?.sql" |wc -l 16 [oracle@l64rw3 scripts]$ find -type f -name "?.sql" |sort ./ash/w.sql ./a.sql ./c.sql ./d.sql ./f.sql ./h.sql ./i.sql ./l.sql ./m.sql ./o.sql ./p.sql ./s.sql ./u.sql ./v.sql ./w.sql ./x.sql [oracle@l64rw3 scripts]$
16個ならば、なんとかなりそうです。 🙂
http://blog.tanelpoder.com/files/scripts/a.sql
V$SESSIONからアクティブなセッションを表示します。自セッション、バックグラウンドセッションは除外します。
SQL> @a
A-Script: Display active sessions...
  COUNT(*) SQL_ID        STATE   EVENT
---------- ------------- ------- ----------------------------------------------------------------
         1               WAITING target log write size
         1 atcsf1uudcvkd WAITING buffer busy waits
         1 154djmvjawrq3 ON CPU  On CPU / runqueue
         1               WAITING log file parallel write
http://blog.tanelpoder.com/files/scripts/c.sql
V$OPEN_CURSORとX$KGLOBから情報を取得し、指定したセッションがOPENしているカーソルに対応するライブラリキャッシュオブジェクトの情報を表示します。
SQL> @c 26
KGLHDADR         KGLHDPAR         TSTAMP            CC_OBJTYPE                     HEAPSIZE   KGLHDLDC   KGLHDEXC   KGLHDLKC   KGLOBPC0 DEC   KGLHDCLT   KGLHDIVC   KGLHDKMK OWNER                     SQL_TEXT                                 DB_LINK
---------------- ---------------- ----------------- ---------------------------- ---------- ---------- ---------- ---------- ---------- --- ---------- ---------- ---------- ------------------------- ---------------------------------------- -------------------------
000000007C19EFE8 000000007C19EFE8 20131217 16:37:27 NOT LOADED                         4072          2          3          1          0 NO        7564          0          0                           BEGIN
                                                                                                                                                                                                       DBMS_APPLICATION_INFO.SET_MODULE(:1,NULL
                                                                                                                                                                                                       ); END;
  : 
情報が膨大なので、pr.sqlで整形します。
SQL> @pr Pivoting output using Tom Kyte's printtab.... ============================== KGLHDADR : 000000007C19EFE8 KGLHDPAR : 000000007C19EFE8 TSTAMP : 20131217 16:37:27 CC_OBJTYPE : NOT LOADED HEAPSIZE : 4072 KGLHDLDC : 2 KGLHDEXC : 3 KGLHDLKC : 1 KGLOBPC0 : 0 DECODE(KGLHDKMK,0,'NO','YES') : NO KGLHDCLT : 7564 KGLHDIVC : 0 KGLHDKMK : 0 C_KGLNAOWN : C_KGLNAOBJ : BEGIN DBMS_APPLICATION_INFO.SET_MODULE(:1,NULL); END; C_KGLNADLK : ============================== :
http://blog.tanelpoder.com/files/scripts/d.sql
DICT(DICTIONARY)やDBA_TABLESを検索して、名称に指定された文字列を含むディクショナリを表示します。
例えば、AWR関連のディクショナリを表示したい場合は以下のようにします。
SQL> @d DBA_HIST Show data dictionary views and x$ tables matching the expression "DBA_HIST"... TABLE_NAME COMMENTS ------------------------------ -------------------------------------------------------------------------------- DBA_HIST_ACTIVE_SESS_HISTORY Active Session Historical Statistics Information DBA_HIST_APPLY_SUMMARY Streams/Goldengate/XStream Apply Historical Statistics Information DBA_HIST_ASH_SNAPSHOT DBA_HIST_BASELINE Baseline Metadata Information DBA_HIST_BASELINE_DETAILS Baseline Stats on per Instance Level : DBA_HIST_WAITCLASSMET_HISTORY Wait Class Metric History DBA_HIST_WAITSTAT Wait Historical Statistics Information DBA_HIST_WR_CONTROL Workload Repository Control Information DBA_HISTOGRAMS Synonym for DBA_TAB_HISTOGRAMS 122行が選択されました。 レコードが選択されませんでした。
それに加えて、該当するディクショナリを使用しているビュー(主にV$ビュー)も表示してくれます。 特定のX$表がどのV$ビューで使用されているかを確認したい場合に便利です。
SQL> @d BH Show data dictionary views and x$ tables matching the expression "BH"... TABLE_NAME COMMENTS ------------------------------ -------------------------------------------------------------------------------- GV$BH Synonym for GV_$BH V$BH Synonym for V_$BH TABLE_NAME USED_IN ------------------------------ ------------------------------ X$KJZNCBHANGS X$KCBBHS X$BH GV$BH X$KCBOBH X$KRCFBH X$KTFBHC X$KFCBH X$KFBH GV$BH V$BH V$BH V$BH 10行が選択されました。
http://blog.tanelpoder.com/files/scripts/f.sql
V$FIXED_VIEW_DEFINITIONから確認できるビュー定義(view_definition列)から、該当する文字列を含むV$ビューを表示します。d.sqlと同様に、特定のX$表がどのV$ビューで使用されているかを確認したい場合に便利です。
SQL> @f X$BH
Search for Fixed view (V$ view) text containing %X$BH%
VIEW_NAME                 TEXT
------------------------- ------------------------------------------------------------
GV$BH                     select bh.inst_id, file#, dbablk, class,
                          decode(state,0,'free',1,'xcur',2,'scur',3,'cr',
                          4,'read',5,'mrec',6,'irec',7,'write',8,'pi',
                          9,'memory',10,'mwrite',11,'donated', 12,'protected',
                          13,'securefile', 14,'siop',15,'recckpt', 16, 'flashfree',
                          17, 'flashcur', 18, 'flashna'), 0, 0, 0, bh.le_addr,
                          le_id1, le_id2, decode(bitand(flag,1), 0, 'N', 'Y'),
                          decode(bitand(flag,16), 0, 'N', 'Y'),
                          decode(bitand(flag,1536), 0, 'N', 'Y'),
                          decode(bitand(flag,16384), 0, 'N', 'Y'),
                          decode(bitand(flag,65536), 0, 'N', 'Y'), 'N', obj, ts#,
                          lobid,  bitand(OBJ_FLAG, 240)/16, decode(bitand(OBJ_FLAG,
                          48)/16, 1, 'KEEP', 2, 'NONE', 'DEFAULT'),
                          decode(bitand(OBJ_FLAG, 192)/64, 1, 'KEEP', 2, 'NONE',
                          'DEFAULT'), bh.con_id from x$bh bh, x$le le where
                          bh.le_addr = le.le_addr (+)
GV$PING                   WITH bh AS (SELECT b.inst_id, file#, dbablk block#, class
                          class#,
                          : 
http://blog.tanelpoder.com/files/scripts/h.sql
host " doskey /history /exename=sqlplus.exe | find /i /n "&1" | find /v "]@h " "
Windowsプラットフォーム限定のスクリプトです。doskeyが保持するコマンド履歴情報から、指定した文字列を含む情報を表示します。自分の環境では適切に動作しませんでした。このスクリプトが適切に動作するかは、doskeyが適切にするか依存すると思われます。
http://blog.tanelpoder.com/files/scripts/i.sql
http://co-sol.jp/techdb/2012/12/tpt_scripts_and_i_sql.htmlで説明しているので、参考にしてください。
http://blog.tanelpoder.com/files/scripts/l.sql
名称に指定した文字列を含むラッチの統計情報を表示します。
SQL> @l shared Display Latch stats from V$LATCH for latches matching %shared% ADDR NAME GETS MISSES IG IM SPINGETS WAIT_TIME ---------------- ---------------------------------------------------------------- ---------- ---------- ---------- ---------- ---------- ---------- 0000000060009B58 test shared non-parent l0 0 0 0 0 0 0 00000000600105B8 ksxp shared latch 0 0 0 0 0 0 0000000060034348 shared pool 17194520 29891 0 0 28009 2007788 0000000060034D48 shared pool simulator 492095 0 0 0 0 0 0000000060034DE8 shared pool sim alloc 2247 0 0 0 0 0 0000000060034F28 Shared B-Tree 45940 0 0 0 0 0 0000000060037E58 shared server configuration 8 0 1 0 0 0 0000000060038218 shared server info 1 0 0 0 0 0 8行が選択されました。
http://blog.tanelpoder.com/files/scripts/m.sql
自セッションの統計(待機イベント、統計情報)を表示します。内部的にse.sqlを呼び出しています。
SQL> @m
    SID EVENT                                     TIME_WAITED TOTAL_WAITS TOTAL_TIMEOUTS AVERAGE_WAIT   MAX_WAIT
------- ---------------------------------------- ------------ ----------- -------------- ------------ ----------
     42 SQL*Net message from client                     64.82          11              0       5.8929      64.81
        CPU Time                                          .05
        SQL*Net message to client                         .00          12              0            0          0
        Disk file operations I/O                          .00           1              0        .0003          0
http://blog.tanelpoder.com/files/scripts/o.sql
名称に指定した文字列を含むオブジェクトの情報を表示します。内部的にo2.sqlを呼び出しています。
SQL> @o ADVISOR owner object_name object_type status OID D_OID CREATED LAST_DDL_TIME ------------------------- ------------------------------ ------------------ --------- ---------- ---------- ----------------- ----------------- SYS AUTO_SPACE_ADVISOR_PROG PROGRAM VALID 16928 20131016 17:19:45 20131016 17:19:45 SYS CDB_ADVISOR_ACTIONS VIEW VALID 14142 20131016 17:15:54 20131016 17:15:54 SYS CDB_ADVISOR_COMMANDS VIEW VALID 14144 20131016 17:15:54 20131016 17:15:54 SYS CDB_ADVISOR_DEFINITIONS VIEW VALID 14146 20131016 17:15:54 20131016 17:15:54 SYS CDB_ADVISOR_DEF_PARAMETERS VIEW VALID 14148 20131016 17:15:54 20131016 17:15:54 SYS CDB_ADVISOR_DIR_DEFINITIONS VIEW VALID 14150 20131016 17:15:54 20131016 17:15:54 SYS CDB_ADVISOR_DIR_INSTANCES VIEW VALID 14152 20131016 17:15:54 20131016 17:15:54 SYS CDB_ADVISOR_DIR_TASK_INST VIEW VALID 14154 20131016 17:15:54 20131016 17:15:54 :
http://blog.tanelpoder.com/files/scripts/p.sql
名称に指定した文字列を含む初期化パラメータの情報を表示します。いわゆる隠しパラメータも表示します。
SQL> @p buffer NAME VALUE ---------------------------------------- ---------------------------------------- use_indirect_data_buffers FALSE _trace_buffers ALL:256 _skgxp_udp_timed_wait_buffering 1024 _datapump_metadata_buffer_size 131072 _datapump_tabledata_buffer_size 262144 _datapump_compressbas_buffer_size 0 _lm_postevent_buffer_size 256 db_block_buffers 0 _db_block_buffers 24500 _clear_buffer_before_reuse FALSE _data_warehousing_scan_buffers TRUE buffer_pool_keep buffer_pool_recycle _trace_buffer_wait_timeouts 0 _buffer_busy_wait_timeout 100 :
http://blog.tanelpoder.com/files/scripts/s.sql
指定したセッションの待機情報と実行中SQLのSQL_IDを表示します。
SQL> @s 26
    SID SQLID_AND_CHILD      STATUS   STATE   EVENT                                          SEQ# SEC_IN_WAIT BLOCKING_SID P1                 P2                 P3                 P1TRANSL
------- -------------------- -------- ------- ---------------------------------------- ---------- ----------- ------------ ------------------ ------------------ ------------------ ------------------------------------------
     26 bvr7ppsyp19qw 0      ACTIVE   WORKING On CPU / runqueue                              5746           5 NOT IN WAIT
SQL> @s 26
    SID SQLID_AND_CHILD      STATUS   STATE   EVENT                                          SEQ# SEC_IN_WAIT BLOCKING_SID P1                 P2                 P3                 P1TRANSL
------- -------------------- -------- ------- ---------------------------------------- ---------- ----------- ------------ ------------------ ------------------ ------------------ ------------------------------------------
     26 bvr7ppsyp19qw 0      ACTIVE   WORKING On CPU / runqueue                              5746          12 NOT IN WAIT
SQL> @s 26
    SID SQLID_AND_CHILD      STATUS   STATE   EVENT                                          SEQ# SEC_IN_WAIT BLOCKING_SID P1                 P2                 P3                 P1TRANSL
------- -------------------- -------- ------- ---------------------------------------- ---------- ----------- ------------ ------------------ ------------------ ------------------ ------------------------------------------
     26 bvr7ppsyp19qw 0      ACTIVE   WORKING On CPU / runqueue                              5746          15 NOT IN WAIT
http://blog.tanelpoder.com/files/scripts/u.sql
現行のセッションに関する、V$SESSIONとV$PROCESSの情報を結合して表示します。
SQL> @u
USERNAME                SID            OSUSER           MACHINE            PROGRAM              MODULE               ACTION                                                           SPID         SQL_ID        SQL_HASH_VALUE   LASTCALL STATUS   LOGON_TIME
----------------------- -------------- ---------------- ------------------ -------------------- -------------------- ---------------------------------------------------------------- ------------ ------------- -------------- ---------- -------- -----------------
                         '1,1'         oracle           l64rw3.domain      (PMON)                                                                                                     4380                                    0    5342428 ACTIVE   20131016 21:22:47
                         '238,1'       oracle           l64rw3.domain      (PSP0)                                                                                                     4384                                    0    5342428 ACTIVE   20131016 21:22:47
                         '2,1'         oracle           l64rw3.domain      (VKTM)                                                                                                     4388                                    0    5342428 ACTIVE   20131016 21:22:48
                         '239,1'       oracle           l64rw3.domain      (GEN0)                                                                                                     4394                                    0    5342425 ACTIVE   20131016 21:22:48
    :
http://blog.tanelpoder.com/files/scripts/v.sql
名称に指定した文字列を含むビューについて、ビュー定義のSQLを表示します。
SQL> @v SQLTEXT
Show SQL text of views matching "%SQLTEXT%"...
VIEW_NAME                      TEXT
------------------------------ ----------------------------------------------------------------------------------------------------
V_$SQLTEXT                     select "ADDRESS","HASH_VALUE","SQL_ID","COMMAND_TYPE","PIECE","SQL_TEXT","CON_ID" from v$sqltext
V_$SQLTEXT_WITH_NEWLINES       select "ADDRESS","HASH_VALUE","SQL_ID","COMMAND_TYPE","PIECE","SQL_TEXT","CON_ID" from
                               v$sqltext_with_newlines
GV_$SQLTEXT                    select "INST_ID","ADDRESS","HASH_VALUE","SQL_ID","COMMAND_TYPE","PIECE","SQL_TEXT","CON_ID" from
                               gv$sqltext
GV_$SQLTEXT_WITH_NEWLINES      select "INST_ID","ADDRESS","HASH_VALUE","SQL_ID","COMMAND_TYPE","PIECE","SQL_TEXT","CON_ID" from
                               gv$sqltext_with_newlines
DBA_HIST_SQLTEXT               select dbid, sql_id, sql_text, command_type,
                               decode(con_dbid, 0, dbid, con_dbid),
                               con_dbid_to_id(decode(con_dbid, NULL, 0, con_dbid)) con_id
                               from WRH$_SQLTEXT
CDB_HIST_SQLTEXT               SELECT "DBID","SQL_ID","SQL_TEXT","COMMAND_TYPE","CON_DBID","CON_ID" FROM
                               CDB$VIEW("SYS"."DBA_HIST_SQLTEXT")
6行が選択されました。
VIEW_NAME                      TEXT
------------------------------ ----------------------------------------------------------------------------------------------------
GV$SQLTEXT                     select inst_id,kglhdadr, kglnahsh, kglnasqlid, kgloboct, piece, name, con_id  from x$kglna where
                               kgloboct != 0
V$SQLTEXT                      select  ADDRESS, HASH_VALUE, SQL_ID, COMMAND_TYPE , PIECE,  SQL_TEXT, CON_ID from GV$SQLTEXT where
                               inst_id = USERENV('Instance')
GV$SQLTEXT_WITH_NEWLINES       select inst_id,kglhdadr, kglnahsh, kglnasqlid, kgloboct, piece, name, con_id  from x$kglna1 where
                               kgloboct != 0
V$SQLTEXT_WITH_NEWLINES        select  ADDRESS, HASH_VALUE, SQL_ID, COMMAND_TYPE, PIECE,          SQL_TEXT, CON_ID  from
                               GV$SQLTEXT_WITH_NEWLINES where inst_id = USERENV('Instance')
http://blog.tanelpoder.com/files/scripts/w.sql
snapper.sqlを呼び出し、5秒間の負荷状態をレポートします。
SQL> @w
What's going on right now?!
Sampling SID all with interval 5 seconds, taking 1 snapshots...
-- Session Snapper v3.64 by Tanel Poder ( http://blog.tanelpoder.com )
---------------------------------------------------------------------------------------------
Active% | SQL_ID          | SQL_CHILD | EVENT                               | WAIT_CLASS
---------------------------------------------------------------------------------------------
   100% | bvr7ppsyp19qw   | 0         | ON CPU                              | ON CPU
     2% |                 | 0         | control file parallel write         | System I/O
---------------------------------------------------------------
Active% | EVENT                               | WAIT_CLASS
---------------------------------------------------------------
   100% | ON CPU                              | ON CPU
     2% | control file parallel write         | System I/O
------------------------------------------------------------------------------------------
Active% |    SID | SQL_ID          | EVENT                               | WAIT_CLASS
------------------------------------------------------------------------------------------
   100% |     26 | bvr7ppsyp19qw   | ON CPU                              | ON CPU
     2% |    243 |                 | control file parallel write         | System I/O
-------------------------
Active% | SQL_ID
-------------------------
   100% | bvr7ppsyp19qw
     2% |
--  End of ASH snap 1, end=2013-12-17 17:27:48, seconds=5, samples_taken=44
PL/SQLプロシージャが正常に完了しました。
http://blog.tanelpoder.com/files/scripts/x.sql
dbms_xplan.display_cursor(null,null,'ALLSTATS LAST +PEEKED_BINDS +PARALLEL +PARTITION +COST +BYTES') を実行し、直近で実行されたSQLの実行計画と実行統計を表示します。
SQL> SELECT * FROM DUAL; D - X SQL> @x Display execution plan for last statement for this session from library cache... PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------- SQL_ID 9g6pyx7qz035v, child number 0 ------------------------------------- SELECT * FROM DUAL Plan hash value: 272002086 ---------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| ---------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 2 (100)| | 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| ---------------------------------------------------------------- 14行が選択されました。
実行統計を表示するためには、statistics_levelをALLに設定するか、SQLに /*+ gather_plan_statistics */ ヒントを指定する必要があることに注意してください。
SQL> show parameter statistics NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ optimizer_use_pending_statistics boolean FALSE statistics_level string TYPICAL timed_os_statistics integer 0 timed_statistics boolean TRUE SQL> ALTER SESSION SET statistics_level='ALL'; セッションが変更されました。 SQL> SELECT * FROM DUAL; D - X SQL> @x Display execution plan for last statement for this session from library cache... PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------------- SQL_ID 9g6pyx7qz035v, child number 1 ------------------------------------- SELECT * FROM DUAL Plan hash value: 272002086 --------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| A-Rows | A-Time | Buffers | --------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | | 2 (100)| 1 |00:00:00.01 | 3 | | 1 | TABLE ACCESS FULL| DUAL | 1 | 1 | 2 | 2 (0)| 1 |00:00:00.01 | 3 | --------------------------------------------------------------------------------------------------------- 13行が選択されました。
http://blog.tanelpoder.com/files/scripts/ash/w.sql
内部的にashtop.sqlを呼び出しています。ashtop.sqlの動作を含め後日説明予定です。
SQL> @ash/w
What's going on? Showing top timed events from last minute...
    Total
  Seconds     AAS %This   SESSION EVENT
--------- ------- ------- ------- ----------------------------------------------------------------
        5      .1   71% | ON CPU
        1      .0   14% | WAITING db file async I/O submit
        1      .0   14% | WAITING log file parallel write
Showing top SQL and wait classes from last minute...
    Total
  Seconds     AAS %This   SQL_ID        SESSION WAIT_CLASS
--------- ------- ------- ------------- ------- ----------------------------------------------------------------
        4      .1   57% |               ON CPU
        2      .0   29% |               WAITING System I/O
        1      .0   14% | bvr7ppsyp19qw ON CPU