第4章 チューニング
4.7 その他のチューニング
その他の原因によるチューニングについて説明します。
4.7.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))
4.7.2 トランザクション占有のチューニング
アクセスプランを取得すると、データベース資源(DSO)に対する占有単位、占有モードを知ることができます。競合するア プリケーションの占有単位および占有モードを確認して、デッドロックの発生の可能性が高い場合には、トランザクション 占有のチューニングを実施します。
カーソルの更新可能性句にFOR UPDATEを指定する
カーソルを使用してデータベースの更新を行う場合、カーソルの更新可能性句にFOR UPDATEを指定すると、占有 モードは非共用モードとなります。読み込み時から非共用モードでデータベース資源を占有するため、デッドロックが 発生しにくくなります。
占有単位のチューニング
アクセスプランの占有範囲が“DSI”となっている場合は、表の全件検索やインデックスの全件検索が選択されていま す。DSI全体を占有したくない場合は、検索に利用できるインデックスを定義して、データベースの読込み範囲を小さ くします。
なお、占有単位に“REC”が表示されている場合は、行単位の排他を指定している場合です。このときのアクセスモデ ルが表の全件検索であると、占有のためにレコード件数に比例したメモリを使用するため、表の全件検索とならない ようにデータベースをチューニングしなければなりません。
UPDATE文:探索またはDELETE文:探索の検索パスの占有モード
UPDATE文:探索やDELETE文:探索において、更新対象レコードを位置づける部分の表の占有モードは“共用モード”
がデフォルトです。OLTP業務などでUPDATE文:探索やDELETE文:探索を利用するときは、USQL_LOCKに“EX”を 指定すると、更新対象レコードを位置づけるときに“非共用モード”で占有するので、デッドロックを起こしにくくなります。
付録 A 性能チューニングのためのパラメタ一覧
本章では、性能チューニングのためのパラメタを説明します。