Oracle Database

SQL Health Check(SQLHC)の概要と取得方法

SQLの性能調査で苦労していませんか?

「調査する上で、どの情報を取得したらいいかわからない。」

「必要な情報が取れていなかった。」

などの経験があるのではないでしょうか。

そんなあなたにオススメしたいのがSQLHC(SQL Health Chech)です。

SQLレポートよりも情報量が多く、調査する上で十分な情報量を取得できます。

SQL実行計画の問題調査に必要な情報

実行計画変動による性能問題を調査するためには、以下の情報が必要です。

  • 取得情報
    • 実行計画(実行統計/実行計画変動履歴)
    • オブジェクト統計情報(取得日/統計情報の内容)
    • オブジェクト定義(テーブル/索引)
    • 初期化パラメータ
    • AWRレポート
  • ヒアリング項目
    • 統計情報収集オプション(ESTIMATE PERCENT/ヒストグラムなど)
    • パーティション表ならパーティションメンテと統計収集のタイミング
    • 昨日と今日でデータ件数の違いは?
    • システム変更(初期化パラメータの変更など)
    • ER図

従来は、特定SQLの調査に必要な情報を個別に取得していたが、
SQLHCでは、特定SQLの調査に必要な主な情報を一括で取得可能です。

SQLHCとは

SQLHCはオラクル提供の、SQLレスポンス調査情報取得ツールで、下記サイトからダウンロード可能です(製品ではない)。

(My Oracle Support SQLチューニング・ヘルスチェック・スクリプト(SQLHC)(ドキュメントID:1542531.1))

インストールは不要で、Zipファイルを解凍するだけです。

ファイルサイズも110KB前後と小さく、Database構築と合わせて配置しておくのがおススメです。

障害発生してから持ち込むとなると、本番環境への持ち込み申請等が発生する可能性がるので、構築段階やテスト段階で配置し、テスト時のパフォーマンス検証のときから使ってますよ〜っといった形であらかじめ配置しておくのがオススメ。

SQL*Plusから、ワンコマンドでSQLスクリプトを実行するだけで、SQLチューニングに必要な情報を網羅的に取得してくれます。

取得情報は複数のhtmlファイルに見やすく整形されて出力され、
出力結果は1つのzipファイルに格納されます。(スクリプトを実行したディレクトリに出力される)

CPU負荷:1コア使用率90%前後、実行時間2~3分程度(※検証環境で測定)

SQLHCの実行手順

  1. 以下のSQLを実行(SYSユーザ)し、対象SQLのSQL_IDの特定
SQL> select SQL_ID, SQL_FULLTEXT, LAST_ACTIVE_TIME
from v$sqlarea where SQL_FULLTEXT like ‘実行した処理のSQL文の一部’;
  1. オプションライセンスの保有に応じて、スクリプトの実行(※)
SQL> START sqlhc.sql [D|T|N] 対象SQLのsql_id;

※10g環境および11gR1環境で情報を取得する際は、スクリプトを実行するセッションで、以下のパラメータを設定してからスクリプトの実行をお願いします。

  • Diagnostics Packあり:D
  • Tuning/Diagnostics Packあり:T
  • Tuning PackもDiagnostics Packもなし:N
    (Nのみ、カーソルをキャッシュさせるため、該当の処理の再実行が必要です)
SQL> ALTER SESSION set “_cursor_plan_unparse_enabled”=FALSE;

※STARTコマンドはSQL*Plus の@(アットマーク)コマンドと同じ機能です(STARTの場合はファイルパスとの間に空白が必要)。

スクリプトを配置したディレクトリでの実行してください。

SQLHCで出力される情報一覧

取得情報説明
SQL文SQLテキスト全文
実行計画(キャッシュ)共有プールから実行計画を取得
※statistics_;eve;=all の場合は実行統計も取得
実行軽買う履歴(AWR)AWRから実行計画取得、実行計画変動履歴(変動日時)
SQLベースラインSPM使用時のベースラインの承認状況
SQL統計(キャッシュ)SQL実行回数、実行時間、バッファ読込、ディスク読込
SQL統計履歴(AWR)
ASH(キャッシュ)実行計画のフェーズ別のサンプリング数
ASH(AWR)
オブジェクト統計情報表、索引、列(ヒストグラム)の統計情報詳細
統計情報収集履歴統計情報の収集日時を履歴表示
システム統計システム統計の詳細
オブジェクト定義表、索引
初期化パラメータSQL実行時の初期化パラメータ

SQLHC実行時の注意点

実行統計の採取について

実行計画が出力される

「sqlhc_YYYYMMDD_HH24MISS__3_execution_plans.html」

に以下の注意が記載されています。

Current Execution Plans (last execution)
Captured while still in memory. Metrics below are for the last execution of each child cursor.
If STATISTICS_LEVEL was set to ALL at the time of the hard-parse then A-Rows column is populated.

このため、実行統計を確認するためにはハードパースの際、STATISTICS_LEVELがALLに設定されている必要があります。

10053トレースについて

SQLHCを採取する際、ハードパースが行われていれば10053トレースが同時に採取されます。(11gR2以降)

【参考ドキュメント】
▼SQL Tuning Health-Check Script (SQLHC) の概要と使用方法(KROWN:159918) (ドキュメントID 1762398.1)

ファイル出力場所について

関連ファイルをzipにまとめる際、設定されたADRの場所を確認せず、ORACLE_HOMEのlog配下を確認するため、ファイルがコピーされないケースがあります。

そのため、ADR($ORACLE_BASE/diag/rdbms///trace)配下のファイルも必要に応じて手動でコピーしてください。

まとめ

一度、このSQLHCの情報量になれてしまうと、他のシステムの性能調査で

「SQLHCがあればなぁ」

なんて思うこともしばしば。

まずは、自分で使ってみることっから始め、徐々に各システムで導入してもらうように布教活動して欲しいところです。

新・門外不出のOracle現場ワザ 〜エキスパートが明かす運用・管理の極意【電子書籍】[ 五十嵐建平, 大塚信男, 小田圭二, 村方仁, 谷敦雄, 宮崎博之, 神田達成 ]
created by Rinker
tomii0422

Share
Published by
tomii0422

This website uses cookies.