ページの先頭行へ戻る
PRIMEFLEX for HA Database 業務開発ガイド(Native SQL編)
FUJITSU Integrated System

5.4.6 その他のチューニング

その他の原因によるチューニングについて説明します。

5.4.6.1 CASTを使用したSQL文のチューニング

CASTオペランドにインデックス構成列を指定して、インデックスの範囲検索を行いたい場合があります。最適化パラメタ“SCAN_KEY_CAST”で、インデックス検索の適用を拡大することで、CASTオペランドについてもインデックスの範囲検索を行います。

範囲検索のチューニング

以下の場合、チューニングの効果があります。

  • WHERE句または結合表の結合条件に、CASTに指定した列と、列を含まない値式を比較述語“=”で指定している場合。

インデックス定義

  人事テーブル.IX1<従業員番号>  従業員番号:DEC(6)

SELECT 等級

FROM 人事テーブル

WHERE CAST(従業員番号 AS CHAR(8)) = '123456'

ジョインのチューニング

以下の場合、チューニングの効果があります。

  • WHERE句または結合表の結合条件に、表の列同士を比較演算子“=”で指定した条件(表の結合関係を表す条件)を指定している。かつ、

  • 上記の条件の比較演算子“=”で指定した片方または両方の列をCASTオペランドに指定している場合。

インデックス定義

  人事テーブル.IX1<従業員番号>  従業員番号:DEC(6)
  目標管理テーブル.IX2<従業員番号>  従業員番号:INTEGER

SELECT 人事テーブル.従業員名,目標管理テーブル.難易度

FROM 人事テーブル,目標管理テーブル

WHERE 人事テーブル.従業員番号

         = CAST(目標管理テーブル.従業員番号 AS DEC(6))

5.4.6.2 トランザクション占有のチューニング

アクセスプランを取得すると、データベース資源に対する占有単位、占有モードを知ることができます。競合するアプリケーションの占有単位および占有モードを確認して、デッドロックの発生の可能性が高い場合には、トランザクション占有のチューニングを実施します。

カーソルの更新可能性句にFOR UPDATEを指定する

カーソルを使用してデータベースの更新を行う場合、カーソルの更新可能性句にFOR UPDATEを指定すると、占有モードは非共用モードとなります。読み込み時から非共用モードでデータベース資源を占有するため、デッドロックが発生しにくくなります。

占有単位のチューニング

アクセスプランの占有単位が“DSI”となっている場合は、表の全件検索やインデックスの全件検索が選択されています。DSI全体を占有したくない場合は、検索に利用できるインデックスを定義して、データベースの読込み範囲を小さくします。

なお、占有単位に“REC”が表示されている場合は、行単位の排他を指定している場合です。このときのアクセスモデルが表の全件検索であると、占有のためにレコード件数に比例したメモリを使用するため、表の全件検索とならないようにデータベースをチューニングしなければなりません。

UPDATE文:探索またはDELETE文:探索の検索パスの占有モード

UPDATE文:探索やDELETE文:探索において、更新対象レコードを位置づける部分の表の占有モードは“共用モード”がデフォルトです。OLTP業務などでUPDATE文:探索やDELETE文:探索を利用するときは、USQL_LOCKに“EX”を指定すると、更新対象レコードを位置づけるときに“非共用モード”で占有するので、デッドロックを起こしにくくなります。

5.4.6.3 リザルトバッファのチューニング

リザルトバッファは、SELECT文で獲得したデータをアプリケーション側で保持しておく領域です。このバッファは、カーソルならその単位で使われます。たとえば、アプリケーションがカーソルを入れ子で使う場合は、その数だけ作成する方が性能が向上します。カーソルが入れ子になっているが、リザルトバッファが1枚しか作成されていない場合は、外側のカーソルについてはリザルトバッファを使用しますが、入れ子内のカーソルはFETCH文ごとに返却データをPRIMEFLEX for HA Databaseから獲得することになります。

SELECT文で得られるデータ量が大量のときは、リザルトバッファを大きくすることによって、アプリケーションとPRIMEFLEX for HA Database間の通信回数の削減となり、FETCH性能が向上する可能性があります。

リザルトバッファは、クライアント用の動作環境ファイルのRESULT_BUFFERに個数とサイズを指定します。

クライアント用の動作環境ファイル(64キロバイトのバッファが2枚の場合)

RESULT_BUFFER=(2,64)

注意

リザルトバッファの大きさは、返却データ長や返却レコード件数に依存します。リザルトバッファを大きくするとFETCH性能は向上しますが、使用メモリ量を圧迫するため、性能が頭打ちになったり下がることもあります。このため、リザルトバッファのチューニングを行う場合は、運用テストを行ってからサイズを決定することを推奨します。