< 前へ | 次へ >

演習 6: SQL ステートメントの静的な実行

開発中のアプリケーションで、DB2® で稼働している GSDB データベースに対して SQL を静的に実行する必要が生じるかもしれません。 この演習では、InventoryLevelsData インターフェースにある SQL ステートメントをバインドし、静的に実行します。
静的 SQL には、以下の利点があります。
動的ステートメント・キャッシュの回避
静的 SQL を使用することで、DB2 の動的ステートメント・キャッシュの競合が削減され、動的 SQL を使用するアプリケーションのパフォーマンスが向上します。
アクセス・パスの一貫性
静的 SQL は、アプリケーションの実行前にアクセス・パスを固定することによって、応答時間を予測可能で安定したものにします。一方、動的 SQL のアクセス・パスは実行時に計算されます。
アプリケーションのパフォーマンスが向上する可能性
静的 SQL では、アプリケーションのパフォーマンスが向上する可能性があります。
  • アクセス・プランが実行時より前に決定されるため、実行時に SQL ステートメントを準備する必要がなくなります。
  • 各ステートメントを準備して記述する必要がないため、クライアント・アプリケーションとデータベース・サーバーの間のネットワーク・トラフィックが削減されます。
  • 静的 SQL では、述部で使用するホスト変数またはパラメーターのデータ・タイプが厳密に強制されます。 この厳密な強制によって、入力データがデータベース内のターゲット・タイプに必ず一致します。
セキュリティーの強化
データベース・オブジェクトに対する特権を付与するのではなく、DB2 パッケージに対する EXECUTE 特権をユーザーに付与できます。
パッケージ改訂の容易性
DB2 パッケージのバージョン管理によって、以前の優れたアクセス・パスを失うリスクを犯すことなく、パッケージを再バインドできます。

以下のようにして、InventoryLevelsData インターフェースにある SQL ステートメントをバインドし、静的に実行します。

  1. パッケージ・エクスプローラーで、pureQuery_test Java プロジェクトの pureQueryFolder フォルダーにある Default.genProps ファイルを見つけます。「pureQuery_test」 > 「pureQueryFolder」 > 「Default.genProps」 編集のために開くファイルをダブルクリックします。
  2. Default.genProps ファイルのブランク行に、パッケージおよびインターフェース名を指定します。 パッケージおよびインターフェース名を手動で入力することも、pureQuery のアシストを利用することもできます。 pureQuery のアシストを利用するには、以下のようにします。
    1. Ctrl キーを押しながら、スペース・バーを押します。 小さなウィンドウが開きます。
      図 1. Java プロジェクト内のインターフェースをリストする pureQuery
      コンテンツ・アシスタンス・ウィンドウ
    2. インターフェース名をダブルクリックし、ブランク行にその名前を組み込みます。
  3. スペース、等号、そしてもう 1 つスペースを入力し、行を以下のようにします。
    com.mycompany.pureQuery.test.InventoryLevelsData = 
  4. どのオプションを使用するか決定し、コレクション名およびルート・パッケージ名を設定します。 Ctrl キーを押しながら、スペース・バーを押します。 別の小さなウィンドウが開きます。
    ヒント: オプションをクリックすると、その説明がリストの隣に表示されます。 説明をクリックし、黄色のウィンドウの下部にあるスクロール・バーを使用してフルテキストを確認できます。
    図 2. Default.genProps ファイルのインターフェースに対して指定可能なオプション
  5. 以下のように、行全体を入力します。
    com.mycompany.pureQuery.test.InventoryLevelsData = -collection "GOSALES" -rootPkgName "invlevl"
  6. ファイルを保存し、表示されたメッセージの「はい」をクリックします。 pureQuery では、Default.genProps ファイルに入力した値をインターフェースのインプリメンテーション・クラスに格納する必要があります。 インターフェースにある SQL をバインドする場合、pureQuery の StaticBinder ユーティリティーは、データベース・パッケージを作成する方法を判別するため、これらの値についてインプリメンテーション・クラスを調べます。
  7. 作成を計画しているパッケージの構成を検討します。 「SQL アウトライン」ビューの「データベース・パッケージ」タブをクリックします。
    ヒント: 「SQL アウトライン」ビューにまだ表として整列されたパフォーマンス・データが表示されている場合、「ツリー・ビューまたは表ビューの表示」ボタンをクリックします (「ツリー・ビューまたは表ビューの表示」ボタン)。

    ビューには 1 つのパッケージのみ表示されますが、4 つのパッケージを分離レベルごとに 1 つずつ作成します。 しかし、各パッケージには、同じルート名の invlevl および同じ SQL ステートメントがあります。 単一の分離レベルでのみパッケージを作成したい場合、Default.bindProps ファイルを編集できます。このファイルによって、パッケージを作成する StaticBinder ユーティリティーのオプションを指定できます。 しかし、このチュートリアルでは、StaticBinder ユーティリティーのオプションをデフォルト値のままにしておきます。

  8. パッケージをバインドします。
    1. パッケージ名を右クリックし、「バインド」を選択します。 「接続の選択」ウィンドウが開きます。
    2. GSDB 接続を選択し、「完了」をクリックします。

    pureQuery は StaticBinder ユーティリティーを実行し、「コンソール」ビューにそのユーティリティーからの出力を表示します。

    ================================================================================
    
    The StaticBinder utility successfully bound the package 'invlevl1' for the isolation level UR.
    The StaticBinder utility successfully bound the package 'invlevl2' for the isolation level CS.
    The StaticBinder utility successfully bound the package 'invlevl3' for the isolation level RS.
    The StaticBinder utility successfully bound the package 'invlevl4' for the isolation level RR.
    
    The StaticBinder utility successfully bound 'com.mycompany.pureQuery.test.InventoryLevelsDataImpl'.
    
    ================================================================================
    
    
    Results of the StaticBinder utility's activity:
    
        Number of implementation classes and pureQueryXml files for which the bind operation SUCCEEDED: 1
    
    
    Bind for package invlevl using connection GSDB succeeded.
    データ・ソース・エクスプローラー内のパッケージを調べることができます。 「SQL アウトライン」ビューによって、容易にパッケージを検索できます。
  9. 「SQL アウトライン」ビューで、パッケージ名を右クリックし、「データ・ソース・エクスプローラー内で検索」を選択します。 データ・ソース・エクスプローラーが開き、パッケージが検出されて強調表示されるまで、GSDB 接続のフォルダーを展開します。
  10. SQL ステートメントを静的に実行します。 そして、SQL ステートメントを動的に実行したときに取り込んだデータと静的に実行したデータとを比較します。
    1. プロジェクト・フォルダーを右クリックして、「実行」 > 「実行構成 (Run Configurations)」を選択します。
    2. 「実行構成 (Run Configurations)」ウィンドウで、パフォーマンス・データの最初のセットを取り込んだときに使用した構成を開きます。 「引数 (Arguments)」ページの「VM 引数 (VM arguments)」フィールドに以下の行を入力し、「適用」をクリックします。
      -Dpdq.executionMode="STATIC"
    3. 「実行」をクリックします。
  11. プロジェクト・エクスプローラーで、プロジェクト・フォルダーを右クリックし、「pureQuery」 > 「SQL アウトラインでのプロジェクトのリフレッシュ」を選択します。 その後、パフォーマンス・データを調べます。
    1. 「SQL アウトライン」ビューで、「比較」チェック・ボックスを選択します。 ビューはリフレッシュされます。プロジェクトに複数のパフォーマンス・データのセットが保存されている場合、「比較」チェック・ボックスの隣にあるフィールドでその中の 1 つを選択できます。
      図 3. パフォーマンス・データのセットを比較する制御
      パフォーマンス・データのセットを比較する制御

      各列に灰色の列と白の列があります。灰色の列は、現在の SQL ステートメントの静的な実行から取得するパフォーマンス・データを表示します。 白の列は、同じ SQL ステートメントの過去の動的な実行から取得したパフォーマンス・データを表示します。

      デフォルトで、ビューはステートメントの実行時間をミリ秒単位の時間で比較します。

    2. ビューの上部にある「表示」フィールドを使用して、以下に示す他の 2 つの方法でパフォーマンス・データを比較します。
      差異
      灰色の列は、現在のデータ・セットのミリ秒単位の時間を表示します。 白の列は、時間の差異を表示します。例えば、次にビューにおける最初のステートメントの統計を示します。
      表 1. ステートメントに関する現在の時間と過去の時間との差異に対する、現在の時間 (ミリ秒単位) の比較
      合計クライアント時間 最大時間 平均クライアント時間 最小時間
      18.32 11.11 15.92 -0.25 6.11 3.70 1.11 1.08
      これらの数字は、過去のデータ・セットに関して以下のことを示しています。
      • 合計実行時間は、現在のデータ・セットよりも 11.11 ミリ秒長い
      • 最大実行時間は、現在のデータ・セットよりも 0.25 ミリ秒短い
      • 平均実行時間は、現在のデータ・セットよりも 3.70 ミリ秒長い
      • 最小実行時間は、現在のデータ・セットよりも 1.08 ミリ秒長い
      パーセンテージ
      灰色の列は、現在のデータ・セットのミリ秒単位の時間を表示します。 白の列は、時間についての差異をパーセンテージで表示します。再び、ビューにおける最初のステートメントの統計を次に示します。
      表 2. ステートメントに関する現在の時間と過去の時間との差異 (パーセンテージ) に対する、現在の時間 (ミリ秒単位) の比較
      合計クライアント時間 最大時間 平均クライアント時間 最小時間
      18.32 60.66% 15.92 -1.56% 6.11 60.66% 1.11 97.29%
      これらの数字は、過去のデータ・セットに関して以下のことを示しています。
      • 合計実行時間は、現在のデータ・セットの実行時間よりも 60.66% 長い
      • 最大実行時間は、現在のデータ・セットの実行時間よりも 1.56% 短い
      • 平均実行時間は、現在のデータ・セットの実行時間よりも 60.66% 長い
      • 最小実行時間は、現在のデータ・セットの実行時間よりも 97.29% 長い
< 前へ | 次へ >

フィードバック