
Oracle SQLチューニング Season2(第10回)第2章 SQLチューニング対象選定方法(7/8)
SQLチューニング対象選定方法 の第7回目は(Case別)SQLチューニング対象選定方法の4回目 です。
「Case4. パッチプログラム関連性能改善対象選定」について解説していきます。
それでは早速スタートしましょう!!
2.3.4 Case4.バッチプログラム関連性能改善対象選定
■ ターゲット抽出スクリプト
複数のロジックと複数のSQLを持つバッチプログラム(PL/SQLで作成されたProcedure, Functionなど)の処理遅延が発生する場合、どのように対処すべきでしょうか?
バッチプログラムにTrace ON/OFFを設定し、テスト後に性能改善をすべきでしょうか?
この方法も性能問題を正確に把握して改善できる良い方法です。
このような場合も、Dictionary Viewの活用だけで十分な対応が可能です。
下記のスクリプトを見ると、インラインビューO部分にバッチプログラム名を入力すると、そのプログラムで実行するすべてのSQLに対するI/O発生量、抽出Row数、応答時間、実行回数などの情報が抽出されます。
これらの情報を使って実行時間が長くかかる部分のSQLを抽出して改善することができます。
[ 特定のProgram内で実行されたSQL抽出スクリプト ]
■ 活用例
複雑なロジックを持つバッチプログラムに対する性能問題を把握するため、実際のテストデータを生成して上記のスクリプトを活用した一連の過程を説明します。
バッチプログラムのテストデータ生成
バッチプログラムの実行履歴を確認するために、先に生成したPLSQL_BATCH_2プロシージャを実行します。
Dictionary Viewのうち V$SQLAREA、DBA_OBJECTS を活用すると、バッチプログラムの実行履歴を照会できます。
V$SQLAREA はSQLの実行履歴を確認することができるため、DBA_OBJECTS は Object(Function, Procedure)の情報を照会することができます。
V$SQL と V$SQLAREAのPROGRAM_IDカラム は、 DBA_OBJECTSのOBJECT_IDカラム と連結が可能で、PROCEDUREやFUNCTIONで作成されたバッチプログラムの場合、DBA_OBJECTSとV$SQLまたはV$SQLAREAを通じてチューニング対象のSQLを抽出することができます。
まず、バッチプログラム名でOBJECT_IDを抽出します。
次に、DBA_OBJECTSで抽出されたOBJECT_IDの値でV$SQLAREAのPROGRAM_IDと連結して照会してみましょう。
照会結果として、下記のようなSQLを抽出することができます。
前に紹介したDBA_OBJECTSとV$SQLAREAを活用すれば、当該バッチプログラムで実行した全てのSQLの実行履歴を照会することができます。照会された情報を詳しく分析できれば、バッチプログラムのSQLからチューニング対象を抽出することは、それほど難しくはないと思います。
次回SQLチューニングブログ
SQLチューニングブログ 2nd Season(第11回)
「 Case5.ASHを活用した性能改善対象選定 」 について