シンジ&アヤノの
実践データベース性能テストの極意:
Oracle Real Application Testingを使ってみよう
第3回 SQL Performance Analyzer~SQLパフォーマンスを比較して評価する~
第2回では、SQL Performance Analyzerを操作するにあたり、はじめに本番環境でSQLチューニングセットを作成し、そのSQLチューニングセットをエクスポートしてテスト環境にインポートするまでの手順について実施しました。
第3回では、次にそのSQLチューニングセットを使用して、SQL Performance Analyzerを動かし、システム変更前後でのSQLパフォーマンスを比較する手順について紹介します。
今回ご紹介するパートを全体のワークフロー図で示すと、以下(図1)のようになります。
※注意
本記事に記載している内容は、Oracle Enterprise Manager Cloud Control 12cを用いたReal Application Testing機能のおおまかな操作手順とその動作結果イメージを理解していただくことを目的としています。使用するOracle Enterprise Manager のバージョンによって、操作手順が異なることがあります。システムおよびパッケージの開発や実行環境で使用する際には、関連ドキュメントを参照の上、実施してください。また、本記事は単に情報として提供されるものであり、内容に誤りがないことの保証や弊社サポート部門へのお問い合わせはできませんのでご理解ください。
1. システム変更前のSQL実行
ターゲットの中からSQLチューニングセットをインポートした(SQLのパフォーマンス比較を実施するテスト環境)対象のデータベースインスタンスを選択し、[パフォーマンス] タブから、[SQL] → [SQLパフォーマンス・アナライザ]をクリックします。
データベース・ログイン画面に遷移したら、DBA権限を与えたSPA専用に作成したユーザー(本記事では「apps」ユーザー)でログインします。
SQLパフォーマンス・アナライザの画面で、「SQLパフォーマンス・アナライザ・ワークフロー」の中から、「ガイド付きワークフロー」をクリックします。
コラム:SPAワークフローの選択
|
◇ポイント◇実際に行うシステム変更の内容に合わせてワークフローを選択することで、画面上でそれぞれのケースに合わせた手順がナビゲートされます。
|
次に、システム変更前後のSQLパフォーマンス比較レポートの表示までのステップが表示された画面に遷移するので、ステップ1「SQLチューニング・セットに基づくSQLパフォーマンス・アナライザのタスクの作成」の「実行」欄をクリックします。
SQLパフォーマンス・アナライザの実行のために、使用するSQLチューニングセットを指定してタスクを作成します。
「名前」欄に、任意のタスク名「SPAT1」を入力し、SQLチューニング・セットの「名前」欄の右にある虫眼鏡をクリックします。
SQLチューニング・セットの一覧が表示されるため、前回インポートしたSQLチューニングセット「SPA_TEST01」を選択し、「選択」をクリックします。
前の画面に戻り、SQLチューニング・セットの名前が入力されていることが確認できます。次に「作成」をクリックします。
ガイド付きワークフローのステップ一覧の画面で、ステップ1「SQLチューニング・セットに基づくSQLパフォーマンス・アナライザのタスクの作成」の「ステータス」欄がチェックマーク(完了)に変更されていることが確認できます。次に、ステップ2「初期環境へのSQL試行の作成」の「実行」欄をクリックします。
システム変更前のSQL試行として任意の名前を「SQL試行名」に入力します。(本記事では、「SPAT1_BEFORE_CHANGE」としています。)
次に、「試行環境による結果の決定付け」の下にある「試行環境設定済み」にチェックを入れます。これは、SQLパフォーマンス比較のための測定をするにあたり、環境の設定が正しいあるべき状態であることを確認するためのものです。
次に、スケジュールは「即時」を選択した状態で、「発行」をクリックします。
コラム:SQL試行名の命名
|
◇ポイント◇SPAを実行する際のSQL試行名も、命名規則を設けて設定すると、あとあと比較や確認をするときにわかりやすく便利です。ちょっとした工夫ですが、煩雑にならないように管理するためには重要な事項と言えるでしょう。 ※ただし、SQL試行名は 「30byteまで」 という制限があります。 補足情報を追加したい場合は、「SQL試行の説明」欄(256byteまで)が使用できます。 |
SQL試行が作成されSQLが実行されます。ステータス欄が時計マーク(実行中)になっているので、「リフレッシュ」をクリックします。
ステータスがチェックマーク(完了)に変更されたことを確認します。
2. システム変更を実施
ステップ2「初期環境へのSQL試行の作成」が完了したら、ステップ3に移る前に、この環境に対して、アップグレードやパッチ適用、初期化パラメータ変更など、実際に計画されているシステム変更を実施します。
※システム変更については、SQL Performance Analyzerの手順とは別のものであるため、本記事では手順は割愛します。
システム変更を実施したら、システム変更前と同様に、データベース・インスタンスを起動している状態にします。(インデックス作成や、オプティマイザ統計の変更など、データベース・インスタンス停止を伴わない変更の場合は、あらためてデータベース・インスタンスを再起動する必要はありません。)
再びEnterprise Manager Cloud Control 12c で、対象のデータベースインスタンスを選択し、[パフォーマンス] タブから、[SQL] → [SQLパフォーマンス・アナライザ]をクリックすると、「SQLパフォーマンス・アナライザのタスク」のところに、ステップ2まで終了したさきほどのタスクが表示されているので、その名前「SPAT1」をクリックします。
3. システム変更後のSQL実行
ステップ3「変更された環境へのSQL試行の作成」の「実行」欄をクリックします。
システム変更前のときと同様に、SQL試行として任意の名前を「SQL試行名」に入力し(本記事では、「SPAT1_AFTER_CHANGE」としています)、「試行環境による結果の決定付け」の下にある「試行環境設定済み」にチェックを入れます。スケジュールは「即時」を選択した状態で、「発行」をクリックします。
ステップ3「変更された環境へのSQL試行の作成」が完了したことを確認したら、次にステップ4「ステップ2とステップ3を比較」の「実行」欄をクリックします。
4. システム変更前後のパフォーマンス比較
「試行1の名前」にステップ2で作成したSQL試行名「SPAT1_BEFORE_CHANGE」を、「試行2の名前」にステップ3で作成したSQL試行名「SPAT1_AFTER_CHANGE」をそれぞれ選択し、比較メトリックで「バッファ読取り」を選択し、スケジュールは「即時」を選択した状態で、「発行」をクリックします。
コラム:比較メトリックの選択
|
◇ポイント◇比較メトリックには、「バッファ読取り」の他にも、「経過時間」や「CPU時間」「物理I/O」「オプティマイザ・コスト」など複数の項目が用意されており、さまざまな観点でSQLワークロードを比較することができます。ただし純粋に「SQLの実行計画の変動有無や、変動した場合はその優劣」という観点で比較する場合は、「バッファ読取り」を使用するのがよいでしょう。(「経過時間」や「物理I/O」で比較した場合、たとえば、バッファキャッシュの状況や、DBインスタンスやDBサーバ自体の利用状況によって、誤差が生じるため、適切に判断がしにくいことがあります。) なお、比較メトリックに指定した項目以外についても、ステップ5でSQL単位では比較表示して確認することができます。 |
ステップ4「ステップ2とステップ3を比較」が完了したことを確認したら、次にステップ5「試行比較レポートの表示」の「実行」欄をクリックします。
「予測されるワークロードバッファ読取り」のところで全体のSQL合計でのパフォーマンスの優劣と、「SQL文の数」のところでSQL個別での「改善」「低下」「変更なし」の件数がそれぞれグラフ化されます。SQL試行2のほうが、全体のSQL合計で、「バッファ読取り」が多くなっていることが確認できます。問題となっているSQLを確認するために、「SQL文の数」の「低下」のグラフ部分をクリックします。
「低下」したSQLに限定して、リスト表示されます。詳細内容を見るために、SQL_IDをクリックします。
SQL文と各項目での比較結果、さらに下にスクロールすると、システム変更前とシステム変更後の実行計画が表示されており、比較することができます。
5. まとめ
第2回で作成したSQLチューニングセットを使用して、今回はSQL Performance Analyzerで、システム変更前後でのSQLパフォーマンスを比較する手順について紹介しました。いかがでしたでしょうか。システム変更前後でのSQLパフォーマンスの違いが、グラフィカルに確認でき、さらにSQL単位でドリルダウンすることで、各項目レベルで詳細に差分を確認できることを理解いただけたかと思います。
今回のポイントとして挙げた点をおさらいすると、以下のとおりです。
- SPAのワークフローは、『ガイド付きワークフロー』の手順を覚えておくと、 汎用的に使用できる
- SQL試行名は、識別しやすい命名規則を設けておくと管理しやすい
- SQL試行比較の比較メトリックは、「実行計画変動」の観点では『バッファ読取り』 を選択するのがよい
比較ができたら、次はパフォーマンスが低下したSQLについて、改善させましょう。 次回は、「SQL Performance Analyzer~SQLチューニング・アドバイザでチューニングする~」です。 是非ご覧ください。