このチュートリアルでは、SQL Performance Analyzerを使用して、SQLを事前にチューニングする方法を説明します。
約40分
このチュートリアルでは、以下について説明します。
| 概要 | ||
| 前提条件 | ||
| 環境のセットアップ | ||
| Guided Workflowの実行 | ||
| SQL Tuning Advisorの実行 | ||
| 再生トライアルとチューニング済みSQLとの比較 | ||
| Exadata導入のシミュレーション | ||
| クリーンアップ | ||
| まとめ | ||
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注:各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
SQL Performance Analyzerを使用すると、SQL実行計画の構造に影響を与えるすべてのデータベース環境の変更に対して、潜在的なパフォーマンス問題を予測および防止できます。 この変更には以下が含まれますが、これらがすべてではありません。
DBAはSQL Performance Analyzerを使用して、もっとも複雑な環境でも、上述の変更によって引き起こされるSQLパフォーマンスの変更(実行計画、統計情報)を予知できます。 開発のライフ・サイクルを通じて進化するアプリケーションに対し、データベース・アプリケーション開発者は、たとえばスキーマ、データベース・オブジェクト、再作成されたアプリケーションなどの変更をテストして、潜在的なパフォーマンスへの影響を抑えることができます。
また、SQL Performance AnalyzerはSQLパフォーマンス統計情報との比較もできます。
このチュートリアルでは、パッチの適用前後でSQLワークロードのパフォーマンスを比較するタスクを作成します。 アプリケーションへのパッチ適用により生じるあらゆるSQLリグレッションは、SQL Tuning Advisorでチューニングされます。これにより、システムのSQLワークロードに対して実質的な改善が施されたことを確認できます。 最後に、Exadataストレージ・サーバーの導入をシミュレートして、ワークロードに与える可能性のある影響を確認します。
このチュートリアルを始める前に、次の手順を完了している必要があります。
| 1. | Oracle Database 11gがインストールされていること。 |
|
| 2. | spa.zipファイルをダウンロードし、作業ディレクトリに解凍していること。 |
|
最初に、SQL Performance Analyzerが使用する環境をセットアップする必要があります。 以下の手順を実行します。
| 1. | ターミナル・ウィンドウを開き、SQLファイルが含まれるディレクトリで次のコマンドを入力します。 setup_demo.shスクリプトは適切なデータベース・オブジェクトを作成し、このチュートリアルで使用するデータをロードします。 このスクリプトの実行には数分かかる場合があります。 cd <your working directory>/spa ./setup_demo.sh
|
| 2. | これで、run_workload_50q.shスクリプトを実行して、先ほどロードしたデータに対するワークロードを生成できるようになりました。 以下のスクリプトを実行します。 ./run_workload_50q.sh 2 注: '2'は、スクリプト内で問合せが実行される回数を示しています。 このスクリプトの実行には数分かかる場合があります。
|
| 3. | この他に、create_sts.sqlスクリプトを実行して、先ほど実行したワークロードのSQL Tuning Setを作成する必要があります。 以下のコマンドを実行します。 sqlplus apps/apps @create_sts
|
Guided Workflowでは、SQL Performance Analyzerタスクを作成し、手動で作成した再生トライアルを使用して、いくつかのカスタムの試験を実行します。 ここでは、新しいパッチセットをインストールしたばかりであるため、いずれかのSQLの効率が低下しているかどうかを確認します。 以下の手順を実行します。
| 1. | ブラウザを起動し、次のURLを入力します。 http://<hostname>:1158/em ユーザー名にsystemを入力し、パスワードを指定し、「Login」をクリックします。
|
| 2. | 「Software and Support」タブをクリックします。
|
| 3. |
Real Application Testingの下の「SQL Performance Analyzer」を選択します。
|
| 4. | SQL Performance Analyzer Workflowsの下の「Guided Workflow」を選択します。
|
| 5. |
最初に実行するタスクは、SQL Tuning Setに基づいたSQL Performance Analyzerタスクの作成です。 このタスクの「Execute」アイコンをクリックします。
|
| 6. | NameにOBE1を入力し、SQL Tuning Setで懐中電灯型のアイコンをクリックします。
|
| 7. |
SQL Tuning Setで「HR_WORKLOAD」を選択し、「Select」をクリックします。
|
| 8. |
「Create」をクリックして、SQL Performance Analyzeタスクを作成します。
|
| 9. | これで初期の環境のSQL Tuning Setを作成および再生でき、変更を加えた後に比較するための基準を作成できます。 Guided Workflowの2番目の手順で、「Execute」アイコンをクリックします。 SQL Tuning Setを再生すると、SQL Tuning Set内のSQLはアプリケーションを再起動することなく、環境に対して1つずつテストを実行します。
|
| 10. | NameにOBE_BEFORE_CHANGEを入力し、「Trial environment established」のチェック・ボックスにチェックを入れて、「Submit」をクリックします。
|
| 11. |
ジョブが実行されます。 ジョブが完了するまで、「Refresh」を数回クリックします。 ジョブの実行には1~2分かかる場合があります。
|
| 12. | 緑色のチェックが表示されたら、ジョブは完了です。
|
| 13. | 次に、変更を実行する必要があります。 このシナリオでは、ここでパッチセットを適用します。 ターミナル・ウィンドウに戻り、make_changes.shスクリプトを実行します。 ./make_changes.sh
|
| 14. | これで、パッチセットを適用したSQL Tuning Setを再生し、比較を実行できるようになりました。 Guided Workflowの3番目の手順で、「Execute」アイコンをクリックします。
|
| 15. | NameにOBE_AFTER_CHANGEを入力し、「Trial environment established」のチェック・ボックスにチェックを入れて、「Submit」をクリックします。
|
| 16. | ジョブが実行されます。 ジョブが完了するまで、「Refresh」を数回クリックします。 これで、2つの再生ジョブを比較できる状態になりました。 Guided Workflowの4番目の手順で、「Execute」アイコンをクリックします。
|
17. |
Trial 1 NameにOBE_BEFORE_CHANGEが選択されており、またTrial 2 NameにOBE_AFTER_CHANGEが選択されていることを確認します。 Comparison Metricで「Buffer Gets」を選択し、「Submit」をクリックします。
|
18. |
4番目のタスクが完了したら、5番目の手順の「Execute」アイコンをクリックして、比較レポートを表示します。
|
19. |
パッチセットを適用すると、多くのSQLは改善されますが、ここでは小さなリグレッションが発生しています。 Regressionの棒グラフをクリックします。
|
20. |
詳細を検証する必要のあるSQL文が4つあります。 ブレッドクラムをクリックして、前のウィンドウに戻ります。
|
Guided Workflow時に効率の低下したSQLに対し、SQL Tuning Advisorを実行できます。 以下の手順を実行します。
| 1. | SQL Performance Analyzer Task Reportページで、「Run SQL Tuning Advisor」をクリックします。
|
| 2. | Tuning Task NameにOBE_TUNE_REGRESSED_SQLと入力し、「OK」をクリックします。
|
| 3. | チューニング・タスクの作成に成功しました。 「Advisor Central」ブレッドクラムをクリックします。
|
| 4. | ジョブが完了するまで待ちます。 これには、数分かかる場合があります。 ジョブが完了したら、「OBE_TUNE_REGRESSED_SQL」リンクをクリックします。
|
| 5. | SQL Tuning Result Summaryを見ると、4つのSQL文が調査され、それぞれの文に対して推奨されるSQLプロファイルが見つかったことが分かります。 「Show all results」をクリックして、詳しい調査結果を確認します。
|
| 6. | 各SQL文に対し、SQLプロファイルが推奨されたことが確認できます。 「Implement All SQL Profiles」をクリックします。
|
| 7. | 実装を確定するため、「Yes」をクリックします。
|
| 8. | SQLプロファイルが作成されました。 「Advisor Central」ブレッドクラムをクリックします。
|
これで、チューニングされたSQLに対して再生トライアルを比較し、リグレッションがないかどうかを確認できます。 以下の手順を実行します。
| 1. | 「SQL Performance Analyzer」リンクを選択します。
|
| 2. | SQL Performance Analyzer Tasksで、「OBE1」リンクを選択します。
|
| 3. | SQL Trialsで、「Create SQL Trial」をクリックします。
|
| 4. | NameにOBE_AFTER_TUNE_REGRESSED_SQLを入力し、「Trial environment established」のチェック・ボックスにチェックを入れて、「Submit」をクリックします。
|
| 5. | SQL再生ジョブの作成に成功しました。 ジョブが完了するまで、「Refresh」をクリックします。 これで、OBE_BEFORE_CHANGEトライアルとOBE_AFTER_TUNE_REGRESSED_SQLトライアルとの比較レポートを実行できるようになりました。 「Run SQL Trial Comparison」をクリックします。
|
| 6. | Trial 1 Nameで「OBE_BEFORE_CHANGE」を選択し、Trial 2 Nameで「OBE_AFTER_TUNE_REGRESSED_SQL」を選択します。 Comparison Metricで「Buffer Gets」を選択し、「Submit」をクリックします。
|
| 7. | 比較結果が作成されました。 新しく作成された比較レポートのメガネ・アイコンをクリックします。
|
| 8. | この時点で何もリグレッションがないことが確認できます。 また、パフォーマンスが87%改善されるため、チューニング済みSQLを使用してパッチセットを適用しても問題ありません。
|
Oracle Exadataは、データベース・サーバーからストレージへのデータベース処理のオフロード機能をはじめとした、データベース認識型のストレージ・サービスを提供します。また、SQL処理やデータベース・アプリケーションから透過的にこのサービスを提供します。 11g Release 2で導入されたSQL Performance Analyzerの新機能は、既存のワークロードに対してExadataを使用した場合の影響をシミュレートする機能です。 Oracle DatabaseとExadataは緊密に統合されているため、Exadataストレージ・サーバーを物理的に用意しなくても、Exadataの影響をシミュレートすることができます。 Exadataによってワークロードがどのように実行されるかを確認するには、以下の手順を実行します。
| 1. | 「SQL Performance Analyzer」リンクを選択します。
|
| 2. | ターミナル・ウィンドウを使用し、DBAユーザーとしてSQL*Plusセッションを開始したら、flush.sqlスクリプトを実行して各種のSGAキャッシュを空にします。 sqlplus / as sysdba
|
| 3. | Oracle Enterprise Managerに戻り、「Exadata Simulation」をクリックします。
|
| 4. | Task NameにCOMPARE_EXADATAと入力し、SQL Tuning SetにAPPS.HR_WORKLOADと入力したら、「Submit」をクリックします。
|
| 5. | SQL Performance Analyzerタスクが実行されます。 「Refresh」をクリックしてタスクの進捗を見守るか、またはタスクが完了するまでそのまま待ちます。
|
| 6. | タスクが完了したら、「COMPARE_EXADATA」リンクをクリックします。
|
| 7. | 一方ではExadataシミュレーションが無効化され、もう一方ではExadataの使用がシミュレートされた状態で、2つのSQLトライアルが調査されたことが分かります。 また、2つのSQLトライアルを比較したレポートも提供されています。 新しく作成された比較レポートのメガネ・アイコンをクリックします。
|
| 8. | 比較レポートを確認すると、このワークロードに対してExadataを使用した場合、ストレージとデータベース・インスタンス間で転送されるデータ量が大幅に削減されることが分かります。
|
| 9. | ページ下部までスクロールし、Top 10 SQL Statements Based on Impact on Workloadの最後に表示されたSQL文へのリンクをクリックします。
|
| 10. | SQL Textラベルの隣のプラス・ボタンをクリックします。
|
| 11. | これで、完全なSQL文が表示されました。 このSQL文は2つの表を結合し、非常に限られた属性値を持つレコードのみを返しています。
|
| 12. | 下方向にスクロールして、Plan Comparisonセクションを表示します。 Exadataを使用しない場合、全表スキャン(TABLE ACCESS FULL)が2回実行されていることが分かります。 非定型の問合せをサポートするための索引は定義されていない場合もあるため、データウェアハウス環境ではこれは非常によくあることです。 Exadataを使用した場合、フィルタ条件がExadataストレージ・サーバーに対して直接適用されていることが分かります(TABLE ACCESS STORAGE FULL)。 これによって、フィルタ条件に合った行のみがデータベース・サーバーに返されるため、この文に対するI/Oインターコネクト・バイトが大幅に少なくなります。
|
| 13. | ページ上部にある「SQL Performance Analyzer Task Report」ブレッドクラムをクリックし、比較レポートに戻ります。
|
| 14. | Exadataを使用すると、このワークロードに対してストレージからデータベース・サーバーへ返される情報量が激減することが確認できました。 これにより、データベース・サーバーはより効率的にワークロードを処理できるようになるため、全体的なパフォーマンスも向上すると考えられます。
|
次の手順を実行して、環境をクリーンアップします。
| 1. | ターミナル・ウィンドウに戻り、reset_demo.shスクリプトを実行します。 ./reset_demo.sh
|
| 2. | この時点で、このOBEチュートリアルを再度実行できます。 ただし、その際には、環境のセットアップのトピックにある手順1を実行する必要はありません。 ワークロードを実行する手順2から開始できます。
|
このチュートリアルで学習した内容は、次のとおりです。
| Guided Workflowの実行 | ||
| 初期の環境を使用したSQL Tuning Setの再生 | ||
| パッチを適用し、変更された環境を使用したSQL Tuning Setの再生 | ||
| 再生の比較によるリグレッションの有無の確認 | ||
| SQL Tuning Advisorの実行によるリグレッションの原因であるSQLのチューニング | ||
| チューニング済みSQLに対する再生トライアルの比較によるリグレッションが残っていないかどうかの確認 | ||
| Exadata導入のシミュレーション | ||
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。