V$SQL_PLANでCRUD表モドキを作ってみる(番外編)

ピボットテーブルの縦横を入れ替える

テーブルの数とSQL文の数はたいていの場合後者の方が多いので、ピボットテーブルの横軸(列ラベル)にテーブル名(OBJECT_NAME)、縦軸(行ラベル)にSQL_IDを指定するのが自然だと思うのですが、列ラベルの高さは一番長いテーブル名の長さに合わせるため無駄に高くなってしまいます。

見やすさを追求するためには、下図のように列ラベルと行ラベルをドラッグ&ドロップで入れ替えてしまうというのも一つの工夫です。

PIVOT2

SQL_IDは13バイト全部を表示させる必要はありませんし、テーブル名が縦に並んでいる方が圧倒的に見やすいのではないでしょうか?

必要に応じてどちらを列ラベルに指定した方がよいかを考えて指定しましょう。

DBA_HIST_SQL*は上位◯個のSQL文しか格納しない

前回の投稿で本番業務への影響をできるだけ小さくするため、V$SQL_*の代わりにDBA_HIST_SQL_*を使った方がよいと書いたのですが、一つ注意点があります。

V$SQL_*の情報はすべてDBA_HIST_SQL*に保存されるのではなく、上位SQL(Top SQL)のみがフィルタリングされて格納されます。(これはDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGSで指定する「TOPNSQL」で変更することが可能です。デフォルト「30」)

AWRはパフォーマンス問題を解決するための情報を取得するので、問題となりそうな一部のSQLの情報しか保持しません。従ってDBA_HIST_SQL_*によって得られる情報は網羅性に欠けるということを念頭に置いて下さい。