株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

sw.sql from TPT Scripts : Display current Session Wait info

このエントリは (全部俺) Oracle ACE Director Tanel Poder Advent Calendar 2013 4日目の記事です。

http://co-sol.jp/techdb/2013/12/advanced-oracle-troubleshooting-guide-part-2-no-magic-is-needed-systematic-approach-will-do-ja.html で使われていたsw.sqlについて説明を記載します。

引数に指定したセッションIDについて、現時点の待機情報を表示します。

与えられた引数は

 
FROM 
    v$session_wait 
WHERE 
    sid IN (&1)←★

という形で展開されるため、IN句に指定可能な形式であれば、なんでも指定可能です。

単一のSIDを指定できます。

SQL> @sw 26

    SID STATE   EVENT                                          SEQ# SEC_IN_WAIT P1                 P2                 P3                 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ------------------ ------------------ ------------------ ------------------------------------------
     26 WORKING On CPU / runqueue                                71           0

カンマ区切りで複数のSIDを指定できます。

SQL> @sw 1,2,3

    SID STATE   EVENT                                          SEQ# SEC_IN_WAIT P1                 P2                 P3                 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ------------------ ------------------ ------------------ ------------------------------------------
      2 WAITING VKTM Logical Idle Wait                            1     1112796 0                  0                  0
      1 WAITING pmon timer                                    42836           1 duration= 300      0                  0
      3 WAITING rdbms ipc message                             44312           0 timeout= 300       0                  0

ただし、空白を入れるとエラーとなります。クオートすればOKです。

SQL> @sw 1, 2, 3
    sid IN (1,)
              *
行40でエラーが発生しました。:
ORA-00936: 式がありません。
SQL> @sw "1, 2, 3"

    SID STATE   EVENT                                          SEQ# SEC_IN_WAIT P1                 P2                 P3                 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ------------------ ------------------ ------------------ ------------------------------------------
      2 WAITING VKTM Logical Idle Wait                            1     1113205 0                  0                  0
      1 WAITING pmon timer                                    42972           2 duration= 300      0                  0
      3 WAITING rdbms ipc message                             44448           1 timeout= 300       0                  0

サブクエリとして評価されるSELECT文を書くこともできます。クオートが必要です。

SQL> @sw "select sid from v$session where username = 'SYS'"

    SID STATE   EVENT                                          SEQ# SEC_IN_WAIT P1                 P2                 P3                 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ------------------ ------------------ ------------------ ------------------------------------------
     26 WORKING On CPU / runqueue                                79           0

SQL> @sw "select sid from v$session where username IS NULL"

    SID STATE   EVENT                                          SEQ# SEC_IN_WAIT P1                 P2                 P3                 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ------------------ ------------------ ------------------ ------------------------------------------
    252 WAITING AQPC idle                                     37088          12 0                  0                  0
      4 WAITING DIAG idle wait                                61080           0 component= 5       where= 1           wait
                                                                                                                      time(millisec)=
                                                                                                                      1000
        :
     13 WAITING rdbms ipc message                             25609         170 timeout= 30000     0                  0
    248 WAITING rdbms ipc message                             20944         169 timeout= 30000     0                  0
    240 WAITING rdbms ipc message                              1286         131 timeout= 180000    0                  0
      8 WAITING smon timer                                    48783           3 sleep time= 300    failed= 0          0

41行が選択されました。

i.sqlを実行済みの場合、mysidというSQL*Plus変数が自セッションのSIDとして定義済みであるため、これを使用できます。

SQL> define mysid
DEFINE MYSID           = "26" (CHAR)
SQL> @sw &mysid

    SID STATE   EVENT                                          SEQ# SEC_IN_WAIT P1                 P2                 P3                 P1TRANSL
------- ------- ---------------------------------------- ---------- ----------- ------------------ ------------------ ------------------ ------------------------------------------
     26 WORKING On CPU / runqueue                                28           0

SQL>

sw.sqlの結果として以下の列が返されます。情報がコンパクトにまとまっているので、使いやすいです。

sw_sid        sid
state         state
sw_event      event
seq#          seq#
sec_in_wait   seconds_in_wait
SW_P1         パラメータの説明(p1text)とp1
SW_P2         パラメータの説明(p2text)とp2
SW_P3         パラメータの説明(p3text)とp3
sw_p1transl   待機イベントの種類('cursor:%', 'enq%', 'latch%', 'library cache pin')
              に合わせて整形したp1 

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ