GeneratePureQueryXml ユーティリティーは、指定された入力ファイルにある SQL 情報に基づいて pureQueryXML を生成します。
この情報のソースとしては、ステートメントやカーソル属性の情報が入った SQL スクリプト・ファイル、InfoSphere® Optim™ Query Workload Tuner の XML ファイル、またはデータベースの動的キャッシュを使用できます。
GeneratePureQueryXml ユーティリティーは、SQL ステートメントとそのステートメントに関する情報を読み取って、pureQueryXML ファイルを作成します。
pureQueryXML ファイルを作成した後は、Configure ユーティリティーを使用して、pureQuery® Runtime で使用するファイルを用意します。
pureQueryXML ファイルの構成後、StaticBinder ユーティリティーを使用して、構成された pureQueryXML ファイルの SQL ステートメントを含む DB2® パッケージを作成してバインドします。
このトピックには以下のセクションが含まれています。
コマンドの構文

(1)
>>-------java--java com.ibm.pdq.tools.GeneratePureQueryXml------>
>-- -username--user-ID-- -password--password-- -url--JDBC-URL--->
>--+---------------------------------------------+-------------->
| .-com.ibm.db2.jcc.DB2Driver-. |
'- -driverName--+-JDBC-driver---------------+-'
>-- -pureQueryXml--fileName------------------------------------->
>-- -inputSql--+-fileName------------------+-------------------->
| (2) |
'-------| Statement-cache |-'
>--+------------------------------------------+----------------->
| (3).- - - ------------. |
'- -commentStart------+-commentIndicator-+-'
>--+---------------------------------------+-------------------->
| .-NOT_SET-. |
'- -sqlLiteralSubstitution--+-DISABLE-+-'
'-ENABLE--'
>--+-------------------------------------+---------------------->
| .-;---------. |
'- -statementDelimiter -+-delimiter-+-'
>--+------------------------------------------------------+----->
| .-HOLD_CURSORS_OVER_COMMIT-. |
'- -resultSetHoldability -+-CLOSE_CURSORS_AT_COMMIT--+-'
>--+----------------------------------------------+------------->
| .-CONCUR_READ_ONLY-. |
'- -resultSetConcurrency--+-CONCUR_UPDATABLE-+-'
>--+--------------------------------------------+--------------->
| .-TYPE_FORWARD_ONLY-----. |
'- -resultSetType--+-TYPE_SCROLL_SENSITIVE-+-'
'-TYPE_SCROLL_SENSITIVE-'
>--+-----------------------+--+--------+-----------------------><
| (4) | '- -help-'
'-| Trace options |-----'
Statement-cache
|--DYNAMIC_STATEMENT_CACHE--+-------------------------------------------------------------------------+--|
| .-,--------------------------------------------. |
| V (5) | |
'- -filterCacheBy--"--------+---clientProgramId-- -program-id------+-+--"-'
+---clientUser-- -client-user-id-------+
+---currentSqlId-- -authorization-id---+
+---currentSchema-- -schema-name-------+
'---cachedAfter-- -cache-time----------'
注:
- オプションは任意の順序で指定できます。
- SQL ステートメントを動的ステートメント・キャッシュから取得できるのは、DB2 for z/OS® データベースの場合のみです。
- デフォルト値は 2 つのダッシュ (--) です。
- 構文については、以下のオプションの説明を参照してください。
- 各フィルターを指定できるのは、それぞれ 1 回のみです。
フィルターは任意の順序で指定できます。
ダイアグラムで使用される規則を理解するには、構文図の読み方を参照してください。
オプションの説明
- -username user-ID
- user-ID は、データベースの認証に使用するユーザー ID を指定します。
- -password password
- データベースの認証に使用するパスワードを指定します。
- -url JDBC-URL
- データベースとの接続の確立に使用する JDBC URL を指定します。
- -driverName JDBC-driver
- データベースとの接続の確立に使用する JDBC ドライバーの完全修飾名を指定します。デフォルト値は com.ibm.db2.jcc.DB2Driver です。これは、IBM® Data
Server Driver for JDBC and SQLJ 用のドライバーです。
- -pureQueryXml file
- 出力 pureQueryXML ファイルの絶対パスまたは相対パスを指定します。
- -inputSql file | DYNAMIC_STATEMENT_CACHE cache-filters
- pureQueryXML ファイルを作成するために使用する SQL 情報のソースを指定します。
SQL スクリプト・ファイルの形式について詳しくは、GeneratePureQueryXml ユーティリティーにより使用される SQL スクリプト・ファイルの形式を参照してください。
- file
- 拡張子 .sql を持つ SQL スクリプト・ファイル、または拡張子 .xml を持つ XML ファイルの絶対パスまたは相対パスを指定します。
XML ファイルを
指定する場合、そのファイルは
有効な InfoSphere Optim Query Workload Tuner ファイルでなければなりません。
その XML ファイルが無効な場合は、エラーが報告されます。
Query Workload Tuner ファイルの
エクスポートについては、InfoSphere Optim Query Workload Tuner の資料を
参照してください。
SQL ステートメントの
キャプチャー時、InfoSphere Optim Query Workload Tuner は
以下の機能をサポートします。
- DB2 for Linux, UNIX, and Windows データベースの場合は、SQL ステートメントをパッケージ・キャッシュからキャプチャーできます。
- DB2 for z/OS データベースの
場合は、SQL ステートメントをステートメント・キャッシュからキャプチャーできます。
InfoSphere Optim Query Workload Tuner によって
実行される SQL ステートメントを除外するには、「キャプチャー・プロセスにより発行された動的照会を除外」オプションを有効にします。
入力ファイルに SQL ステートメントが複数回出現する場合でも、pureQueryXML の出力ファイルでは、その SQL ステートメントが 1 回だけ書き込まれます。
重複する SQL ステートメントの判別方法については、『SQL ファイル内の重複する SQL ステートメントの判別』を参照してください。
- DYNAMIC_STATEMENT_CACHE -filterCacheBy "filter-options-string"
- オプション -url によって指定したデータベースの動的キャッシュから出力 pureQueryXML ファイルに SQL ステートメントをコピーするように、GeneratePureQueryXml ユーティリティーに対して指定します。
オプション DYNAMIC_STATEMENT_CACHE は、接続先が DB2 for z/OS データベースである場合にのみ有効です。
それ以外の場合、エラーが戻されます。
オプション DYNAMIC_STATEMENT_CACHE は、以下のオプションと一緒には指定できません。
- -commentStart
- -resultSetConcurrency
- -resultSetHoldabillity
- -resultSetType
- -statementDelimiter
キャッシュ・フィルター -filterCacheBy "filter-options-string" はオプションです。
キャッシュ・フィルターは、出力 pureQueryXML ファイルにコピーする SQL ステートメントを、そのステートメントに関連付けられたプロパティーに基づいて制限します。
キャッシュ・フィルターを指定しない場合は、動的キャッシュ内のすべてのステートメントが pureQueryXML ファイルにコピーされます。
filter-options-string は、1 つ以上のキーと値のペアをコンマ区切りにして引用符で囲んだリストです。
複数のフィルターを指定した場合は、すべての基準に一致する SQL ステートメントのみが出力 pureQueryXML ファイルにコピーされます。
以下のリストでは、filter-options-string に指定できる有効なオプションと値について説明します。
- clientProgramId program-id
- clientProgramId プロパティーの値が program-id と一致する接続によって動的キャッシュに置かれたステートメントを、pureQueryXML ファイルにコピーします。
注: SQL ステートメントをオプション clientProgramId でフィルタリングするには、アプリケーションが、カスタム JDBC プロパティー clientProgramId を指定した接続またはデータ・ソース定義を使用している必要があります。
アプリケーションの SQL ステートメントが動的キャッシュに置かれるとき、そのステートメントに clientProgramId プロパティーの情報が関連付けられます。
接続またはデータ・ソースの定義でプロパティー clientProgramId が指定されていない場合、clientProgramId の情報がステートメントと一緒に格納されることはありません。
- clientUser client-user-id
- clientUser プロパティーの値が client-user-id と一致する接続によって動的キャッシュに置かれたステートメントを、pureQueryXML ファイルにコピーします。
注: SQL ステートメントをオプション clientUser に基づいてフィルタリングするには、アプリケーションが、カスタム JDBC プロパティー clientUser を指定した接続またはデータ・ソース定義を使用している必要があります。
アプリケーションの SQL ステートメントが動的キャッシュに置かれるとき、そのステートメントに clientUser プロパティーの情報が関連付けられます。
接続またはデータ・ソースの定義でプロパティー clientUser が指定されていない場合、clientUser の情報がステートメントと一緒に格納されることはありません。
- currentSqlId authorization-id
- CURRENT SQLID の値が authorization-id と一致する接続によって動的キャッシュに置かれたステートメントを、pureQueryXML ファイルにコピーします。
- currentSchema schema-name
- CURRENT SCHEMA の値が schema-name と一致する接続によって動的キャッシュに置かれたステートメントを、pureQueryXML ファイルにコピーします。
- cachedAfter cache-time
- 時刻 cache-time より後に動的キャッシュに置かれたステートメントを、pureQueryXML ファイルにコピーします。
値 cache-time は、日付、時刻、またはタイム・スタンプを表す有効な DB2 ストリングでなければなりません。
DB2 の日付、時刻、およびタイム・スタンプの値について詳しくは、日付/時刻の値を参照してください。
- -commentStart commentIndicator
- SQL スクリプト・ファイルの場合に、コメント行を示すために行頭に置かれる文字の組み合わせを指定します。
コメント行には、コメントの直後にある SQL ステートメントに適用されるステートメントのカーソル属性を含めることが出来ます。デフォルトはダッシュ 2 つ (--) です。コメント開始文字 /* およびコメント終了文字 */ はこのオプションに対してはサポートされていません。
このオプションは、入力ファイルが XML ファイルの場合はサポートされません。
指定されたオプションが無視されることを示す警告メッセージが表示されます。
- -sqlLiteralSubstitution ENABLE|DISABLE|NOT_SET
- GeneratePureQueryXml ユーティリティーが SQL ステートメント内のリテラル値をパラメーター・マーカーで置き換えるかどうかを指定します。
デフォルト値は NOT_SET です (この場合、SQL ステートメントのリテラル値は置き換えられません)。
SQL リテラル置換プロセスは、SQL リテラル置換が有効になった状態で pureQuery Runtime が SQL ステートメントをキャプチャーするときに行われる置換プロセスと同じです。
サポートされる値について、次のリストで説明します。
- DISABLE
- このユーティリティーがリテラル置換を実行しないように指定します。
SQL ステートメントは変更されません。
出力 pureQueryXML ファイル内の SQL リテラル置換属性の値が DISABLE に設定されます。
- ENABLE
- このユーティリティーが SQL ステートメント内のリテラルをパラメーター・マーカーで置き換えるように指定します。
リテラルの置換が SQL ステートメントの結果に影響するということをこのユーティリティーが判断した場合は、SQL リテラルは置き換えられません。
SQL リテラル置換が実行されると、ステートメントからコメントが削除されます。
SQL リテラル置換が実行される SQL ステートメントに関しては、複数の空白文字 (SQL ステートメントの前後にあるスペース文字を含む) は、
単一の空白文字で置き換えられます。
このユーティリティーは、SQL リテラル置換プロセス中に作成された重複する SQL ステートメントを削除します。
出力 pureQueryXML ファイル内の SQL リテラル置換属性の値が ENABLE に設定されます。
- NOT_SET
- このファイルに対してリテラル置換が実行されないように指定します。
この値がデフォルトです。
出力 pureQueryXML ファイル内の SQL リテラル置換属性の値が NOT_SET に設定されます。
pureQuery Runtime が pureQueryXML ファイル内の SQL ステートメントをキャプチャーするとき、このファイルの SQL リテラル置換の設定は、ステートメントがキャプチャーされた時点での pureQuery Runtime プロパティー sqlLiteralSubstitution の値になります。
pureQuery Runtime の SQL リテラル置換に関するさらに詳しい情報は、sqlLiteralSubstitution プロパティーを参照してください。
pureQueryXML ファイルがマージされるときの SQL リテラル置換属性については、
『Merge ユーティリティー』を参照してください。
- -statementDelimiter delimiter
- ステートメントを区切るために SQL スクリプト・ファイル内で使用される文字の組み合わせを指定します。デフォルト文字はセミコロン (;) です。
このオプションは、
入力ファイルが InfoSphere Optim Query Workload Tuner XML ファイルの場合は
サポートされません。
指定されたオプションが無視されることを示す警告メッセージが表示されます。
- -resultSetHoldability holdability
- ファイル内のすべてのステートメントに適用される結果セットの保持性を指定します。holdability は、次のいずれかの値です。
- CLOSE_CURSORS_AT_COMMIT を指定すると、コミット時にカーソルを閉じるように結果セットの保持機能が設定されます。この値は、JDBC 値 java.sql.ResultSet.CLOSE_CURSORS_AT_COMMIT を設定します。
- HOLD_CURSORS_OVER_COMMIT を指定すると、コミット後もカーソルを保持するように結果セットの保持機能が設定されます。
この値は、JDBC 値 java.sql.ResultSet.HOLD_CURSORS_OVER_COMMIT を設定します。
デフォルト値は HOLD_CURSORS_OVER_COMMIT です。
SQL スクリプト・ファイル内で、特定の SQL ステートメントの直前にあるコメント行で保持性を指定することにより、その SQL ステートメントの
保持性値をオーバーライドできます。
DB2 for z/OS からの Query Workload Tuner XML ファイルの
場合は、SQL ステートメントの初期準備用の結果セットの保持性がこのファイルに保管されます。
結果セットの保持性情報がこのファイル内にある場合、このユーティリティーは出力 pureQueryXML ファイル内の SQL ステートメントに対してその値を使用します。
InfoSphere Optim Query Workload Tuner XML ファイル内の SQL ステートメントの
結果セットの保持性については、『出力 pureQueryXML ファイルに関する注記』を参照してください。
- -resultSetConcurrency concurrency
- すべてのステートメントに適用される結果セットの並行性を指定します。concurrency は、次のいずれかの値です。
- CONCUR_READ_ONLY を指定すると、カーソルの並行性が読み取り専用に設定されます。
- CONCUR_UPDATABLE を指定すると、カーソルの並行性が更新可能に設定されます。
デフォルト値は CONCUR_READ_ONLY です。
SQL スクリプト・ファイルで、特定の SQL ステートメントの直前にあるコメント行で並行性を指定することによって、その SQL ステートメントの並行性値をオーバーライドできます。
InfoSphere Optim Query Workload Tuner XML ファイル内の SQL ステートメントの
結果セット並行性を設定する方法については、『出力 pureQueryXML ファイルに関する注記』を参照してください。
- -resultSetType type
- すべてのステートメントに適用される結果セットのタイプを指定します。タイプは、次のいずれかの値です。
- TYPE_FORWARD_ONLY を指定すると、結果セットのタイプが順方向のみに設定されます。
- TYPE_SCROLL_SENSITIVE を指定すると、結果セットのタイプがスクロール・センシティブに設定されます。
- TYPE_SCROLL_INSENSITIVE を指定すると、結果セットのタイプがスクロール・インセンシティブに設定されます。
デフォルト値は TYPE_FORWARD_ONLY です。
SQL スクリプト・ファイルで、特定の SQL ステートメントの直前にあるコメント行で結果セット・タイプを指定することによって、その SQL ステートメントの結果セット・タイプ値をオーバーライドできます。
InfoSphere Optim Query Workload Tuner XML ファイル内の SQL ステートメントの
結果セット・タイプを設定する方法については、『出力 pureQueryXML ファイルに関する注記』を参照してください。
- Trace options
- メッセージのログを記録するファイルおよびログを記録する情報のレベルを指定できます。

>>-+------------------------+--+---------------------------+---><
'- -traceFile--file-name-' | .-OFF-----. |
'- -traceLevel--+-ALL-----+-'
+-SEVERE--+
+-WARNING-+
+-INFO----+
+-CONFIG--+
+-FINE----+
+-FINER---+
'-FINEST--'
- -traceFilefile-name
- 操作に関する情報のログを記録するために使用するファイルへの絶対パスまたは相対パスとファイル名を指定します。
ファイルが既に存在する場合、pureQuery はファイルの既存の内容に新しいメッセージを付加します。
デフォルトでは、項目は System.err に書き込まれます。
- -traceLevel OFF|SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST|ALL
- ログに記録する情報のタイプを指定します。
デフォルトのレベルは OFF です。ログ項目を書き込むファイルを指定せずにこのオプションを OFF 以外の値に設定すると、項目は「コンソール」ビューか System.err ファイルに書き込まれます。
- -help
- サマリー使用情報を表示します。オプション・ファイルでは無効です。
出力 pureQueryXML ファイルに関する注記
以下のリストに、pureQueryXML ファイルの使用法についての情報を示します。
- SQL スクリプト・ファイル
または InfoSphere Optim Query Workload Tuner XML ファイルから pureQueryXML ファイルを
作成する場合は、SQL ステートメントごとに次の基準が満たされていることを確認してください。
- ファイル内の SQL ステートメントのテキストが、アプリケーションによって発行された SQL ステートメントと一致していること。
ステートメントの大/小文字と空白文字が一致していなければなりません。
- ファイル内の SQL ステートメントの結果セットの保持機能、並行性、およびタイプの設定が、アプリケーションにより発行された SQL ステートメントの設定と一致していること。
上記の情報が一致しないと、pureQuery Runtime の executionMode プロパティーが STATIC に設定されている場合、
または pureQuery Runtime の capturedOnly プロパティーが TRUE に設定されている場合に、pureQuery クライアント最適化で、SQL ステートメントと、アプリケーションによって発行されたステートメントとの突き合わせが行われません。
以下の項目は、入力ファイルが Query Workload Tuner XML ファイルの場合に適用されます。
- この XML ファイルには、SQL ステートメントに関する特殊レジスター情報がいくつか含まれています。
GeneratePureQueryXml ユーティリティーが XML ファイルから pureQueryXML ファイルを生成すると、
特殊レジスター情報が pureQueryXML ファイルにメタデータとして組み込まれます。
pureQuery Runtime によってキャプチャーされる特殊レジスター情報と、Query Workload Tuner によってキャプチャーされる特殊レジスター情報には相違があります。
GeneratePureQueryXml には、pureQuery Runtime によって通常キャプチャーされる特殊レジスター情報が含まれています。
Configure ユーティリティーを使用して pureQueryXML ファイルを構成するときは、
特殊レジスター設定に応じて -groupSQLBySpecialRegisters オプションでそのファイル内の SQL ステートメントをグループ化できます。
また、-optionsFileForBind オプションを指定すれば、特殊レジスター設定に基づいて、バインド・オプションを含む
サンプルの StaticBinder オプション・ファイルを生成することもできます。
構成オプションについては、
『Configure ユーティリティー』を参照してください。
pureQuery Runtime によってトラッキングおよび記録される特殊レジスターの情報について詳しくは、pureQuery クライアント最適化による DB2 特殊レジスターの変更のトラッキングを参照してください。
DB2 for z/OS データベースの場合に、InfoSphere Optim Query Workload Tuner の XML ファイルにある SQL パフォーマンス統計をキャプチャーするには、そのための構成が必要です。
統計の収集を有効にする方法については、InfoSphere Optim Query Workload Tuner の XML ファイルにある DB2 for z/OS のパフォーマンス統計をキャプチャーする操作を参照してください。
- このユーティリティーは、SQL ステートメントを pureQueryXML ファイルに追加する前に、その SQL ステートメントに関するメタデータを収集するためのステートメントを準備します。
CURRENT SCHEMA 特殊レジスターの値が XML ファイル内にある場合、このユーティリティーは準備を行うときに CURRENT SCHEMA 特殊レジスターの値を使用します。
- XML ファイル内の SQL ステートメントが静的に実行されたということをこのユーティリティーが判断すると、
そのステートメントは出力 pureQueryXML ファイルに組み込まれません。
- GeneratePureQueryXml ユーティリティーは、XML ファイルから出力 pureQueryXML ファイルに統計の一部をコピーします。
入力 XML ファイル内の統計は、データベースのタイプとバージョン、
および InfoSphere Optim Query Workload Tuner のバージョンによって
異なります。
これらの統計は、pureQueryXML ファイル内の SQL ステートメントがバインドされる方法や、pureQuery Runtime が SQL ステートメントを、アプリケーションから発行されたステートメントと突き合わせる方法には影響しません。
このユーティリティーは、SQL ステートメントのタイム・スタンプ情報が検出されないときは現在日時を使用します。
- XML ファイルにカーソル属性を指定することはできません。
カーソル属性は、GeneratePureQueryXml ユーティリティー・オプションの -resultSetType、-resultSetHoldability、
および -resultSetConcurrency を使用して指定できます。
これらのオプションは、XML ファイル内のすべての SQL ステートメントに適用されます。
DB2 for z/OS からの XML ファイルの
場合は、SQL ステートメントの初期準備用の結果セットの保持性がこのファイルに保管されます。
結果セットの保持性情報がこのファイル内にある場合、このユーティリティーは出力 pureQueryXML ファイル内の SQL ステートメントに対してその値を使用します。
pureQuery Runtime は、SQL ステートメントの実行方法を制御するときに SQL ステートメントおよびそのステートメントのカーソル属性を考慮に入れます。
例えば、SQL ステートメントを静的に実行するように pureQuery Runtime を構成できます。
pureQueryXML ファイル内のステートメントおよび属性がアプリケーションのステートメントおよび属性と一致しない場合、pureQuery Runtime はステートメントを静的には実行しません。
- 出力 pureQueryXML ファイル内の SQL ステートメントを静的に実行するために各種バインド・オプションが必要な場合は、
ワークベンチで pureQueryXML エディターを使用して、SQL ステートメントをステートメント・セットにグループ化できます。
その後で、StaticBinder ユーティリティーの実行時に、そのステートメント・セットの各種バインド・オプションを指定できます。
オプション -statementBindError に値 REMOVE または MARK_INVALID を
指定して StaticBinder ユーティリティーを実行できます。
StaticBinder ユーティリティーは、バインド・プロセス中に SQL エラーを返す SQL ステートメントをスキップします。
- 以下の項目は、入力が、DB2 for z/OS の動的ステートメント・キャッシュから取得された一式の SQL ステートメントである場合に適用されます。
- この取得操作のターゲットとなるいずれかの DB2 for z/OS サブシステムを構成する必要があります。
DB2 for z/OS サブシステムの構成については、動的キャッシュから SQL ステートメントを取得するように z/OS サブシステムを構成するを参照してください。
- GeneratePureQueryXml ユーティリティーは、特定の特殊レジスターやカーソル属性について、プロパティーにデフォルト値を設定することを許容します。
これらの属性は、一般に、動的ステートメント・キャッシュから SQL ステートメントを取得する際にはサポートされません。
実際の値はキャッシュから取得されるため、値をオーバーライドする必要はありません。
- このユーティリティーは、SQL ステートメントを pureQueryXML ファイルに追加する前に、その SQL ステートメントに関するメタデータを収集するためのステートメントを準備します。
CURRENT SCHEMA 特殊レジスターの値が存在する場合、その準備を実行するためにユーティリティーは CURRENT SCHEMA 特殊レジスターの値を使用します。
- このユーティリティーは、取得した SQL ステートメントを処理するときに、動的キャッシュのタイム・スタンプ情報を使用します。
- 出力 pureQueryXml ファイルの内容は、DB2 動的ステートメント・キャッシュの現在の内容と、指定した filterCacheBy オプションの値に応じて決まります。
GeneratePureQueryXml ユーティリティーが取得するステートメントは、以下の項目の影響を受けることがあります。
- ある特定の時点で、キャッシュには別々のアプリケーションによって準備されたステートメントが含まれていることがあります。
フィルターを指定せずにキャッシュからステートメントを取得した場合、目的のアプリケーションとは無関係のステートメントを取得する可能性かあります。
- フィルターを指定した場合、目的のアプリケーションで使用されているステートメントがフィルターによって除去されることがあります。
例えば、アプリケーション A とアプリケーション B で共通の SQL ステートメントを使用しているとします。
この 2 つのアプリケーションはキャッシュ内のステートメントを共有していますが、DB2 はこのステートメントがアプリケーション A によってキャッシュに挿入されたと記録することがあります。
この場合に、例えば clientProgramId B というフィルターを指定すると、このステートメントは出力ファイルに取り込まれません。
- 最近アプリケーションを実行した際に実行されたステートメントが、キャッシュに含まれていない可能性があります。
最近のリリースの DB2 では大きいキャッシュ・サイズを指定できるので、このような状況はほとんど発生しないはずです。
- 出力 pureQueryXML ファイルを直接使用して、pureQuery クライアント最適化によって SQL ステートメントを静的に実行することはできません。
StaticBinder ユーティリティーを使用する前に、Configure ユーティリティーを使用して、pureQuery クライアント最適化で使用できるように pureQueryXML ファイルを変更しておく必要があります。
- 出力 pureQueryXML ファイルには、スタック・トレース情報や特殊レジスター情報といったアプリケーションの実行情報が含まれません。
これらの情報は、pureQuery クライアント最適化を使用するアプリケーションから pureQuery Runtime が SQL ステートメントをキャプチャーする際に作成される pureQueryXML ファイルに含まれます。
- pureQueryXML の出力ファイルには、以下の SQL ステートメント情報が含まれません。
これらの情報は、pureQuery のクライアント最適化機能が実行時にステートメントを SQL ステートメントとして識別するために使用します。
- 自動生成されたキー列名
- 自動生成されたキー列の索引
- 自動生成されたキー・インディケーター
pureQuery クライアント最適化を使用するアプリケーションが SQL ステートメントを静的に、またはキャプチャー専用モードで実行するように構成されている場合に、そのアプリケーションが GeneratePureQueryXml ユーティリティーによって作成された pureQueryXML ファイルを使用する場合は、そのアプリケーションによって発行されたステートメントで上記の 3 つの機能のいずれかが使用されていると、ステートメントは静的には実行されません。
これは、SQL ステートメントのテキストが同一の場合であっても同様です。
次の例では、SQL スクリプト・ファイル c:¥mystatements.sql で検出されたステートメントに関する情報が
入った pureQueryXML ファイル c:¥statements.pdqxml を作成します。
-
sqlLiteralSubstitution オプションの値は
ENABLE であり、SQL ステートメント内のリテラルが
パラメーター・マーカーに置き換えられます。
java com.ibm.pdq.tools.GeneratePureQueryXml
-username db2admin �password mypass
�url jdbc:db2://localhost:50000/mydb
-sqlLiteralSubstitution ENABLE
�pureQueryXml "C:\statements.pdqxml" �inputSql "C:\mystatements.sql"
SQL ファイル内の重複する SQL ステートメントの判別
GeneratePureQueryXml は、2 つの SQL ステートメントのテキスト (前後の空白文字を除く) が同一である場合、
および以下の属性が同一である場合に、それら 2 つのSQL ステートメントを重複と見なします。
- 結果セット・タイプ
- 結果セット並行性
- 結果セットの保持性
SQL ファイルに含まれる次の 2 つの項目は同一と見なされます。
SQL ステートメントの前後にある空白文字のみが異なっています。
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE ;
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE ;
SQL ファイルに含まれる次の 2 つの項目は同一とは見なされません。
SQL ステートメント内の空白文字の数が異なっています。
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE;
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE;
SQL ファイル内のこれら 2 つの項目は、異なるカーソル属性が指定されているため同一ではありません。
-- resultSetType=TYPE_FORWARD_ONLY
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE;
-- resultSetType=TYPE_SCROLL_SENSITIVE
-- resultSetConcurrency=CONCUR_READ_ONLY
SELECT * FROM EMPLOYEE;
以下の項目は入力 SQL ファイル内にあります。
これらの SQL ステートメントは、リテラル値以外は同一です。
SELECT * FROM EMPLOYEE WHERE EMPNO = '000010'
SELECT * FROM EMPLOYEE WHERE EMPNO = '000020'
SELECT * FROM EMPLOYEE WHERE EMPNO = '000030'
sqlLiteralSubstitution オプションの値を
ENABLE に
設定して GeneratePureQueryXml ユーティリティーを実行すると、リテラル値がパラメーター・マーカーに置き換えられ、置換によって生じた重複は削除されます。
結果として、単一 SQL ステートメントで、pureQueryXML ファイルに書き込まれます。
SELECT * FROM EMPLOYEE WHERE EMPNO = ?