2.2.8 SQLの最適化に関するオペランド

45) pd_optimize_level = SQL最適化オプション〔,SQL最適化オプション〕…
~<識別子又は符号なし整数>
SQL最適化オプションを指定します。SQL最適化オプションの機能を次に示します。SQL最適化オプションの各機能については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
SQL最適化オプションの機能識別子符号なし
整数
SP
ネストループジョイン強制"FORCE_NEST_JOIN"4
複数のSQLオブジェクト作成"SELECT_APSL"10
フロータブルサーバ対象拡大(データ取り出しバックエンドサーバ)"FLTS_INC_DATA_BES"16×
ネストループジョイン優先"PRIOR_NEST_JOIN"32
フロータブルサーバ候補数の拡大"FLTS_MAX_NUMBER"64×
ORの複数インデクス利用の優先"PRIOR_OR_INDEXES"128
自バックエンドサーバでのグループ化,ORDER BY,DISTINCT集合関数処理"SORT_DATA_BES"256×
ANDの複数インデクス利用の抑止"DETER_AND_INDEXES"512
グループ分け高速化処理"RAPID_GROUPING"1024
フロータブルサーバ対象限定(データ取り出しバックエンドサーバ)"FLTS_ONLY_DATA_BES"2048×
データ収集用サーバの分離機能"FLTS_SEPARATE_COLLECT_SVR"2064×
インデクス利用の抑止テーブルスキャン強制"FORCE_TABLE_SCAN"4096
複数インデクス利用の強制"FORCE_PLURAL_INDEXES"32768
更新SQLの作業表作成抑止"DETER_WORK_TABLE_FOR_UPDATE"131072
探索高速化条件の導出"DERIVATIVE_COND"262144
スカラ演算を含むキー条件の適用"APPLY_ENHANCED_KEY_COND"524288
プラグイン提供関数からの一括取得機能"PICKUP_MULTIPLE_ROWS_PLUGIN"1048576​
導出表の条件繰り込み機能"MOVE_UP_DERIVED_COND"2097152​
(凡例)
S:HiRDB/シングルサーバ
P:HiRDB/パラレルサーバ
○:指定が有効になります。
×:指定しても無効になります。
《オペランドの指定方法》
適用するSQL最適化オプションを選択して,その識別子又は符号なし整数を指定します。識別子で指定する方法と,符号なし整数(計算値)で指定する方法の二つの方法がありますが,通常は識別子で指定してください。
  • 識別子で指定する場合
    「ネストループジョイン強制」及び「複数のSQLオブジェクト作成」を適用する場合は,次のように指定します。
    pd_optimize_level = "FORCE_NEST_JOIN","SELECT_APSL"
  • 符号なし整数で指定する場合
    「ネストループジョイン強制」及び「複数のSQLオブジェクト作成」を適用する場合は,次のように指定します。
    pd_optimize_level = 4,10
     
●HiRDB Version 5.0以前からバージョンアップした場合
HiRDB Version 5.0以前の合計値指定も有効です。最適化オプションを変更する必要がない場合は,HiRDB Version 6以降にバージョンアップしたときにこのオペランドの指定値を変更する必要はありません。また,最適化オプションを追加する場合は次のように指定できます。
(例)
HiRDB Version 5.0で「ネストループジョイン強制」及び「複数のSQLオブジェクト作成」を適用していて,今回「ORの複数インデクス利用の優先」を追加します。
pd_optimize_level = 14,128
ただし,この指定方法はどの機能を適用しているか分かりにくいため,識別子指定に変更することをお勧めします。
《オペランドの規則》
  • 識別子と符号なし整数の混在指定はできません。
●識別子指定の場合
  • SQL最適化オプションを引用符(")で囲んでください。
  • ここで説明したSQL最適化オプションを使用しない場合は"NONE"を指定してください。ただし,NONEとNONE以外の識別子を指定した場合,NONEの指定は無効になります。
  • 識別子は大文字でも小文字でも指定できます。
  • 同じ識別子を2回以上指定しても,1回指定した場合と同じになります。
●符号なし整数指定の場合
  • ここで説明したSQL最適化オプションを使用しない場合は0を指定してください。ただし,0と0以外の符号なし整数を指定した場合,0の指定は無効になります。
  • 同じ符号なし整数を2回以上指定しても,1回指定した場合と同じになります。
《指定値の目安》
指定値の目安については,マニュアル「HiRDB Version 8 UAP開発ガイド」の「SQL最適化オプション」を参照してください。
《オペランドの省略値》
このオペランドを省略すると次に示す値が仮定されます。
  • HiRDB/シングルサーバの場合
    "PRIOR_NEST_JOIN","PRIOR_OR_INDEXES","DETER_AND_INDEXES","RAPID_GROUPING","DETER_WORK_TABLE_FOR_UPDATE","APPLY_ENHANCED_KEY_COND"
  • HiRDB/パラレルサーバの場合
    "PRIOR_NEST_JOIN","PRIOR_OR_INDEXES","SORT_DATA_BES","DETER_AND_INDEXES","RAPID_GROUPING","DETER_WORK_TABLE_FOR_UPDATE","APPLY_ENHANCED_KEY_COND"
ただし,pd_sysdef_default_optionオペランドにv6compatibleを指定している場合は"SELECT_APSL"が仮定されます。
《注意事項》
  • SQL文中にSQL最適化指定を指定している場合は,このオペランドの指定よりもSQL最適化指定が優先されます。SQL最適化指定については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
  • ストアドルーチン及びトリガ中のSQL文(CREATE PROCEDURE,CREATE TYPE,ALTER PROCEDURE,CREATE TRIGGER,ALTER ROUTINE,又はALTER TRIGGER)にSQL最適化オプションを指定している場合は,このオペランドの指定よりもSQL文中のSQL最適化オプションが優先されます。
《クライアント環境定義との関連》
このオペランドの値はクライアントごとに変更できます。クライアントごとに変更する場合は,クライアント環境定義のPDSQLOPTLVLオペランドを指定してください。PDSQLOPTLVLオペランドについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
《ほかのオペランドとの関連》
  • フロントエンドサーバ定義にpd_floatable_bes,又はpd_non_floatable_besオペランドを指定している場合には,「フロータブルサーバ対象拡大(データ取り出しバックエンドサーバ)」及び「フロータブルサーバ対象限定(データ取り出しバックエンドサーバ)」の指定は無効になります。
  • pd_indexlock_modeオペランドにKEYを指定している場合,「更新SQLの作業表作成抑止」の指定は無効になります。

 

46) pd_additional_optimize_level = SQL拡張最適化オプション〔,SQL拡張最適化オプション〕…
~<識別子又は符号なし整数>《"COST_BASE_2"》
SQL拡張最適化オプションを指定します。SQL拡張最適化オプションの機能を次に示します。SQL拡張最適化オプションの各機能については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
SQL拡張最適化オプションの機能識別子符号なし整数
コストベース最適化モード2の適用"COST_BASE_2"1
ハッシュジョイン,副問合せのハッシュ実行※1"APPLY_HASH_JOIN"2
値式に対する結合条件適用機能"APPLY_JOIN_COND_FOR_VALUE_EXP"32
ジョインを含むSQL文の外部サーバ実行の抑止※1※2"DETER_JOIN_SQL"67108864​
直積を含むSQL文の外部サーバ実行の強制※1※2"FORCE_CROSS_JOIN_SQL"134217728​
無条件に生成する,外部サーバで実行できる探索高速化条件の導出の抑止※1※2"DETER_FSVR_DERIVATIVE_COND"1073741824​
注※1 これらの項目は「コストベース最適化モード2の適用」を指定した場合に有効になります。
注※2 これらの項目は外部表を検索する場合に有効になります。それ以外の場合は無効になります。
《オペランドの指定方法》
適用するSQL拡張最適化オプションを選択して,その識別子又は符号なし整数を指定します。通常は識別子で指定してください。
  • 識別子で指定する場合
    「コストベース最適化モード2の適用」及び「ハッシュジョイン,副問合せのハッシュ実行」を適用する場合は,次のように指定します。
    pd_additional_optimize_level = "COST_BASE_2","APPLY_HASH_JOIN"
  • 符号なし整数で指定する場合
    「コストベース最適化モード2の適用」及び「ハッシュジョイン,副問合せのハッシュ実行」を適用する場合は,次のように指定します。
    pd_additional_optimize_level = 1,2
《オペランドの規則》
  • 識別子と符号なし整数の混在指定はできません。
●識別子指定の場合
  • SQL拡張最適化オプションを引用符(")で囲んでください。
  • ここで説明したSQL拡張最適化オプションを使用しない場合は"NONE"を指定してください。ただし,NONEとNONE以外の識別子を指定した場合,NONEの指定は無効になります。
  • 識別子は大文字でも小文字でも指定できます。
  • 同じ識別子を2回以上指定しても,1回指定した場合と同じになります。
●符号なし整数指定の場合
  • ここで説明したSQL拡張最適化オプションを使用しない場合は0を指定してください。ただし,0と0以外の符号なし整数を指定した場合,0の指定は無効になります。
  • 同じ符号なし整数を2回以上指定しても,1回指定した場合と同じになります。
《指定値の目安》
指定値の目安については,マニュアル「HiRDB Version 8 UAP開発ガイド」の「SQL拡張最適化オプション」を参照してください。
《注意事項》
  • SQL文中にSQL最適化指定を指定している場合は,このオペランドの指定よりもSQL最適化指定が優先されます。SQL最適化指定については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
  • ストアドルーチン及びトリガ中のSQL文(CREATE PROCEDURE,CREATE TYPE,CREATE TRIGGER,ALTER PROCEDURE,ALTER ROUTINE,又はALTER TRIGGER)にSQL拡張最適化オプションを指定している場合は,このオペランドの指定よりもSQL文中のSQL拡張最適化オプションが優先されます。
《クライアント環境定義との関連》
このオペランドの値はクライアントごとに変更できます。クライアントごとに変更する場合は,クライアント環境定義のPDADDITIONALOPTLVLオペランドを指定してください。PDADDITIONALOPTLVLオペランドについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。

 

47) pd_hashjoin_hashing_mode = TYPE1 | TYPE2
SQL拡張最適化オプションで「ハッシュジョイン,副問合せのハッシュ実行」を指定した場合のハッシング方式を指定します。
TYPE1:バージョン07-02より前のハッシング方式です。
TYPE2:TYPE1に比べて,均等にハッシングされます。
《指定値の目安》
  • 通常はTYPE2を指定してください。ただし,結合条件に指定した列のデータによっては均等にならないこともあるので,その場合はTYPE1を指定してください。
  • 07-02以降にバージョンアップしたユーザで,TYPE1を指定して期待した性能が得られなかった場合は,TYPE2を指定してください。
《クライアント環境定義との関連》
このオペランドの値はクライアントごとに変更できます。クライアントごとに変更する場合は,クライアント環境定義のPDHJHASHINGMODEオペランドを指定してください。PDHJHASHINGMODEオペランドについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。

 

48) pd_hash_table_size = ハッシュ表サイズ
~<符号なし整数>《256》(単位:キロバイト)
  • 32ビットモードの場合:((128~524288))
  • 64ビットモードの場合:((128~2097152))
SQL拡張最適化オプションで「ハッシュジョイン,副問合せのハッシュ実行」を指定した場合のハッシュ表サイズを指定します。
《指定値の目安》
このオペランドに指定するハッシュ表サイズについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
《オペランドの規則》
このオペランドには128の倍数を指定してください。128の倍数を指定しなかった場合は自動的に128の倍数に切り上げられます。
《クライアント環境定義との関連》
このオペランドの値はクライアントごとに変更できます。クライアントごとに変更する場合は,クライアント環境定義のPDHASHTBLSIZEオペランドを指定してください。PDHASHTBLSIZEオペランドについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。

 

49) pd_work_table_option = 作業表処理オプション
~<符号なし整数>《1》
作業表を使用するSQLを実行するときのHiRDBの処理方式を指定します。このオペランドの指定値は次に示す計算式で求めてください。
作業表処理オプション=a+b
作業表の
処理区分
変数名HiRDBの処理方式
ANDの複数インデクス利用時の排他取得方式※10アクセスパスとしてANDの複数インデクス利用が選択されると,探索条件中で探索に使用するインデクスが定義された列を含む述語のうち一つでも真となるデータがある場合,そのデータに対して共用モード(PR)で排他が掛かります。
このため,排他オプション※2にWITH EXCLUSIVE LOCKを指定しても,排他モード(EX)ではなく,共用モード(PR)で排他が掛かります。
1アクセスパスとしてANDの複数インデクス利用が選択されると,探索処理中には,探索条件の中で探索に使用するインデクスが定義された列を含む述語のうち一つでも真となるデータがある場合,そのデータに対して指定したモードで排他が掛かります。ただし,1件目のデータの探索完了までは,探索に使用したインデクスが定義された列に対する述語を論理演算し,偽となったデータについては排他が解除されます。
作業表用バッファの自動増分時のメッセージ出力抑止※30作業表用バッファの自動増分時,KFPH29008-Iメッセージを出力します。このメッセージは各サーバプロセスの初回の作業表用バッファの自動増分時に出力されます。
8作業表用バッファの自動増分時,KFPH29008-Iメッセージを出力しません。
注※1
ANDの複数インデクス利用をするときのHiRDBの処理方式を指定します。
ANDの複数インデクス利用とは,探索条件にANDで結ばれた条件が複数あり,それぞれの列に異なるインデクスが定義してある場合(例えば,SELECT ROW FROM T1 WHERE C1 = 100 AND C2 = 200),それぞれのインデクスを使って条件を満たす行の作業表を作成し,これらの積集合を求める方式です。
注※2
SQLに排他オプションを指定していない場合は,通常WITH SHARE LOCKが仮定されます。ただし,次に示す指定によっては仮定される排他オプションが変わるため,注意してください。
  • カーソルへのFOR UPDATE句の指定
  • クライアント環境定義のPDISLLVLオペランドの指定
  • 手続き,関数,又はトリガのCREATE PROCEDURE,CREATE TRIGGER,CREATE TYPE,ALTER PROCEDURE,ALTER ROUTINE,又はALTER TRIGGERのデータ保証レベルの指定
注※3
pd_work_buff_expand_limitオペランドを指定していることが前提条件となります。作業表用バッファの自動増分については,pd_work_buff_expand_limitオペランドを参照してください。
《指定値の目安》
作業表の
処理区分
指定値の目安
ANDの複数インデクス利用時の排他取得方式00を指定すると排他を解除する処理が実行されない分,SQLの処理時間が短縮されます。ただし,複数のユーザが同時に同一表を,ANDの複数インデクス利用で更新をするとデッドロックになることがあります。デッドロックを避けるには1を指定してください。
11を指定すると排他を解除する処理が実行される分,SQLの処理時間が増加します。しかし,最終的な排他範囲は狭くなるので,更新UAPの同時実行性が向上します。
作業表用バッファの増分確保メッセージの出力抑止00を指定すると,作業表用バッファの増分確保がされたかどうかを監視できます。
88を指定すると,メッセージの出力量を削減できます。
《注意事項》
作業表の処理区分にANDの複数インデクス利用時の排他取得方式を選択したときの注意事項を次に示します。
  • 手続き,関数,及びトリガに対しては,ストアドルーチン及びトリガ生成時(CREATE PROCEDURE,CREATE TRIGGER,CREATE TYPE,ALTER PROCEDURE,ALTER ROUTINE,又はALTER TRIGGERの実行時)のANDの複数インデクス利用時の排他取得方式が適用されます。ストアドルーチン実行時(CALL文の実行時)及びトリガ実行時のANDの複数インデクス利用時の排他取得方式は適用されません。
  • 次に示すオペランド又はオプションでANDの複数インデクス利用が抑止される場合,このオペランドの指定は無効になります。
    ・pd_optimize_levelオペランド
    ・クライアント環境定義のPDSQLOPTLVLオペランド
    ・CREATE PROCEDURE,CREATE TRIGGER,CREATE TYPE,ALTER PROCEDURE,ALTER ROUTINE,又はALTER TRIGGERのSQL最適化オプション