株式会社コーソル

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

技術ブログ

la.sql from TPT Scripts : Show which latch occupies a given memory address and its stats

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

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

la.sqlは指定してされたラッチのアドレスについて、ラッチの統計情報を出力します。 以下のように非常に単純なSQLです。親ラッチに対応するv$latch_parentと、子ラッチに対応するv$latch_childrenのいずれからも情報を取得できるようになっているため(*1)、指定するアドレスとして、親ラッチと子ラッチに対応しています。

--------------------------------------------------------------------------------
--
-- File name:   la.sql ( Latch Address )
-- Purpose:     Show which latch occupies a given memory address and its stats
--
-- Author:      Tanel Poder
-- Copyright:   (c) http://www.tanelpoder.com
--              
-- Usage:       @la <address_in_hex>
--              @la 50BE2178
--
--------------------------------------------------------------------------------
column la_name heading NAME format a40
column la_chld heading CHLD format 99999

select 
    addr, latch#, 0 la_chld, name la_name, gets, immediate_gets igets, 
    misses, immediate_misses imisses, spin_gets spingets, sleeps, wait_time
from v$latch_parent ←(*1)
where addr = hextoraw(lpad('&1', (select vsize(addr)*2 from v$latch_parent where rownum = 1) ,0)) ←(*2)
union all
select 
    addr, latch#, child#, name la_name, gets, immediate_gets igets, 
    misses, immediate_misses imisses, spin_gets spingets, sleeps, wait_time 
from v$latch_children ←(*1)
where addr = hextoraw(lpad('&1', (select vsize(addr)*2 from v$latch_children where rownum = 1) ,0)) ←(*2)
/

細かいテクニックですが、

where addr = hextoraw(lpad('&1', (select vsize(addr)*2 from v$latch_children where rownum = 1) ,0)) ←(*2)

が泣かせる感じです。V$ビューにおけるラッチのアドレスはプラットフォームにより64bit幅(16進表記で16文字)の場合と 32bit幅(16進表記で8文字)の場合があります。その一方で、診断ソースによっては、64bitプラットフォームであっても上位の0が省略され、32bit幅(16進表記で8文字)で出力される場合があります。(*2)のように、vsizeでサイズを取得し、lpadで上位を0埋めしてくれると、いちいち上位の0を補う必要がなく、便利です。

プロフィール

On7tWW6m1Ul4

渡部 亮太

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

カテゴリー

アーカイブ