アプリケーションの動作環境をチューニングすることで、アプリケーションの処理性能を向上させることができます。
以下のいずれかの方法で、性能チューニングのためのパラメタの値を変更することで、動作環境をチューニングできます。
クライアント用の動作環境ファイルのパラメタの値を変更
rdbexecsqlコマンドのCHANGE ENV文でパラメタの値を変更
参照
rdbexecsqlコマンドでパラメタの値を変更する方法については、“Symfoware Server SQLTOOLユーザーズガイド”を参照してください。
ポイント
クライアント用の動作環境ファイルは、埋込みSQL連携およびJava連携の場合に有効となります。ただし、Java連携の場合には、指定不可能なパラメタもあります。詳細は、“Symfoware Server アプリケーション開発ガイド(共通編)”の“クライアント用の動作環境ファイル”を参照してください。
Java連携の場合は、クライアント用の動作環境ファイルに相当する指定をctuneparamオプションで指定することができます。
ODBC連携の場合は、クライアント用の動作環境ファイルに相当する指定をODOSのオプションで指定することができます。
それぞれの詳細については、以下のマニュアルを参照してください。
Symfoware Server アプリケーション開発ガイド(JDBCドライバ編)
Symfoware Server アプリケーション開発ガイド(ODBCドライバ編)
性能チューニングのためのパラメタを、以下に示します。
分類 | 実行パラメタ | 概要 |
---|---|---|
最適化パラメタ | インデックスを使用しないアクセスプランを選択するか否か | |
非活性状態のインデックスDSIを含むインデックスを使用したアクセスプランを選択するか否か | ||
結合表と他の表のジョイン順 | ||
ジョインする方法 | ||
インデックス、クラスタキー、または分割キーの検索範囲の最大数 | ||
四則演算の検索範囲について、インデックス範囲検索を行うか否か | ||
探索条件のCASTオペランドに指定した列でインデックスの範囲検索を行うか否か | ||
述語ごとの検索範囲の選択率の値 | ||
インデックス検索と表データ取得のアクセスモデルTIDソートを利用するか否か | ||
TIDユニオンマージのアクセスモデルを有効にするか否か | ||
UPDATE文:探索またはDELETE文:探索の更新標的レコードを位置づける部分の占有モード | ||
並列クエリ | データベースを並列に検索する場合の多重度 | |
アプリケーション単位またはコネクション単位にデータベースを並列に検索するか否か | ||
排他 | 排他の単位を行とする | |
作業領域 | ソート処理がレコードをハッシングして格納するための領域サイズ | |
作業用ソート領域として使うメモリサイズ | ||
作業用テーブルとして使うメモリサイズ |
注意
ASSIST指定を指定した場合、CHANGE ENV文または動作環境ファイルで設定した以下のパラメタよりもASSIST指定が優先されます。
IGNORE_INDEX
JOIN_RULE
JOIN_ORDER
SCAN_KEY_ARITHMETIC_RANGE
SCAN_KEY_CAST
SS_RATE
TID_SORT
TID_UNION
パラメタの詳細を説明します。
IGNORE_INDEX = ({YES | NO})
データベースを検索する時に、インデックスを使用せずにデータベースにアクセスするか否かを指定します。データウェアハウジングにおいて大量のデータを検索および集計する場合には、インデックスだけではデータが絞りきれず、インデックスを使う分だけ無駄なオーバヘッドが発生することがあります。このような場合は、当パラメタにYESを指定することにより、表の全件検索または並列スキャンのアクセスモデルを採用します。
省略値は、以下のとおりです。
IGNORE_INDEX = (NO)
ただし、SQL文にASSIST指定のUSE_INDEXを指定した場合、ASSIST指定が優先され、IGNORE_INDEXの指定に関わらず、ASSIST指定に指定されたインデックスを使用した検索を行います。
インデックスを使用しないアクセスモデルを選択する。
インデックスが使用できる時は、インデックスを使用したアクセスモデルを選択する。
INACTIVE_INDEX_SCAN = ({YES | NO})
データベースを検索する時に、非活性状態のインデックスDSIを含むインデックスを使用したアクセスプランを選択するか否かを指定します。インデックスを非活性状態とし、一括更新処理でインデックスを更新しない高速なバッチ処理を行うアプリケーションの場合、本パラメタにNOを指定してください。YESが指定されている場合、バッチ処理がエラーとなる場合があります。
省略値は、以下のとおりです。
INACTIVE_INDEX_SCAN = (YES)
非活性状態のインデックスDSIを含むインデックスを使用したアクセスプランを選択する。
非活性状態のインデックスDSIを含むインデックスを使用したアクセスプランを選択しない。
JOIN_ORDER = ({AUTO | INSIDE | OUTSIDE})
結合表と他の表をジョインする場合のジョイン順を指定します。
省略値は、以下のとおりです。
JOIN_ORDER = (INSIDE)
ただし、SQL文にASSIST指定のLEADING_TABLEを指定した場合、ASSIST指定が優先され、JOIN_ORDERの指定に関わらず、ASSIST指定に指定されたジョイン順に従います。
PRIMEFLEX for HA Databaseが自動的に選択する。
結合表から先にジョインする。
結合表の中に指定した表と結合表の外に指定した表から先にジョインする。
JOIN_RULE = ({AUTO | MERGE | FETCH})
ジョインする方法を指定します。
省略値は、以下のとおりです。
JOIN_RULE = (AUTO)
ただし、SQL文にASSIST指定のJOIN_RULEを指定した場合、ASSIST指定が優先され、JOIN_RULEの指定に関わらず、ASSIST指定に指定されたジョイン方法に従います。
PRIMEFLEX for HA Databaseが自動的に選択する。
マージジョインのアクセスモデルを優先する。
フェッチジョインのアクセスモデルを優先する。
MAX_SCAN_RANGE = (検索範囲数)
インデックス、クラスタキー、または分割キーについて検索範囲を作成する場合の最大数を指定します。
省略値は、以下のとおりです。
MAX_SCAN_RANGE = (1000)
1~2147483647の範囲で指定します。
SCAN_KEY_ARITHMETIC_RANGE = ({YES | NO})
四則演算の検索範囲について、インデックス範囲検索を行うか否かを指定します。
省略値は、以下のとおりです。
SCAN_KEY_ARITHMETIC_RANGE = (YES)
ただし、SQL文にASSIST指定のUSE_INDEXを指定した場合、ASSIST指定が優先され、SCAN_KEY_ARITHMETIC_RANGEの指定に関わらず、ASSIST指定に指定されたインデックスを使用した検索を行います。
四則演算の検索値について、インデックス範囲検索を行います。
四則演算の検索値について、インデックス範囲検索を行いません。
SCAN_KEY_CAST = ({YES | NO})
探索条件のCASTオペランドに指定した列でインデックスの範囲検索を行うか否かを指定します。
省略値は、以下のとおりです。
SCAN_KEY_CAST = (YES)
ただし、SQL文にASSIST指定のUSE_INDEXを指定した場合、ASSIST指定が優先され、SCAN_KEY_CASTの指定に関わらず、ASSIST指定に指定されたインデックスを使用した検索を行います。
探索条件のCASTオペランドに指定した列でインデックスの範囲検索を行います。
探索条件に指定したインデックスキーで範囲検索を行います。
SS_RATE = ([選択率1][,[選択率2][,[選択率3][,[選択率4][,[選択率5]]]]])
BETWEEN述語、比較述語、LIKE述語およびCONTAINS関数でインデックスを検索する時、インデックスの検索範囲の割合を0以上1以下の小数で指定します。値は、小数第6位まで指定できます。
省略値は、以下のとおりです。
SS_RATE = (0.2,0.25,0.5,0.4,0.0001)
ただし、SQL文にASSIST指定のUSE_INDEXを指定した場合、ASSIST指定が優先され、SS_RATEの割合に関わらず、ASSIST指定に指定されたインデックスを使用した検索を行います。
BETWEEN述語を指定した場合のインデックスの検索範囲。省略した場合は、0.2が指定されたものとみなします。
比較述語“>”、“>=”、と“<”、“<=”でインデックスの検索開始位置および検索終了位置の両方が指定されている場合のインデックスの検索範囲。省略した場合は、0.25が指定されたものとみなします。
比較述語“>”、“>=”、“<”、“<=”でインデックスの検索開始位置または検索終了のみが指定されている場合のインデックスの検索範囲。省略した場合は、0.5が指定されたものとみなします。
LIKE述語を指定した場合のインデックスの検索範囲。省略した場合は、0.4が指定されたものとみなします。
CONTAINS関数を指定した場合のインデックスの検索範囲。省略した場合は、0.0001が指定されたものとみなします。
TID_SORT = ({YES | NO})
インデックス検索と表データ取得のアクセスモデルにおいて、TIDソートを利用するか否かを指定します。
省略値は、以下のとおりです。
TID_SORT = (YES)
ただし、SQL文にASSIST指定のFIRST_ROWSを指定した場合、ASSIST指定が優先され、TID_SORTの指定に関わらず、TIDソートを利用しません。
TIDソートを利用します。
TIDソートを利用しません。
TID_UNION = ({YES | NO})
TIDユニオンマージのアクセスモデルを有効にするか否かを指定します。
省略値は、以下のとおりです。
TID_UNION = (YES)
ただし、SQL文にASSIST指定のUSE_INDEXを指定した場合、ASSIST指定が優先され、TID_UNIONの指定に関わらず、ASSIST指定に指定されたインデックスを使用した検索を行います。
TIDユニオンマージのアクセスモデルを有効にします。TIDユニオンマージが効果的と判断した場合に選択します。
TIDユニオンマージのアクセスモデルを有効にしません。
USQL_LOCK = ({SH | EX})
UPDATE文:探索およびDELETE文:探索において、更新レコードを検索するアクセスモデルの表の占有モードを指定します。
省略値は、以下のとおりです。
USQL_LOCK = (SH)
更新標的レコードを検索するアクセスモデルで共用モードで表を占有します。
更新標的レコードを検索するアクセスモデルで非共用モードで表を占有します。
並列クエリに関する実行パラメタ
MAX_PARALLEL = (多重度)
SQL文でデータベースを並列に検索する場合の多重度を指定します。
SQL文でデータベースを並列に検索できるのは、問合せ式で並列指定を指定した場合です。表のDSIの数が、指定した多重度よりも少ない場合は、DSIの数を多重度として並列検索を行います。
なお、この実行パラメタは、クライアント用の動作環境ファイルにPARALLEL_SCAN=YESを指定した場合、またはSQL文の問合せ式に並列指定“PARALLEL”を指定した場合に有効となります。
本実行パラメタが指定されなかった場合、n多重(注)で並列検索を行います。
注意
OSまたは仮想OSが認識している搭載CPUコア数×2が設定されます。
SQL文でデータベースを並列に検索する場合の多重度を2~100の範囲で指定します。
PARALLEL_SCAN = ({YES | NO})
アプリケーション単位またはコネクション単位に、データベースを並列に検索するか否かを指定します。
省略値は、以下のとおりです。
PARALLEL_SCAN = (NO)
データベースを並列に検索します。この場合、そのアプリケーションの問合せを並列検索で実行できます。
ただし、以下のいずれかの条件を満たす場合、並列検索は実行されず従来のアクセス手順でデータベースをアクセスします。
表がDSI分割されていない、または1つのDSIに対するアクセスの場合
探索条件にROW_IDを指定した検索の場合
インデックスを利用したデータベースアクセスが可能な場合
データベースを並列に検索しません。
排他に関する実行パラメタ
R_LOCK = ({YES | NO})
占有の単位を行とします。このパラメタを指定した場合、クライアント用の動作環境ファイルにDSO_LOCKパラメタを指定することはできません。
占有の単位は、DSO_LOCKの指定に従います。このパラメタを指定し、かつDSO_LOCKが指定されていない場合は、PRIMEFLEX for HA Databaseによって自動的に占有の単位が選択されます。
参照
占有の単位についての詳細は、“Symfoware Server アプリケーション開発ガイド(共通編)”の“排他制御”を参照してください。
注意
動作環境ファイルのR_LOCKがNOの場合、動作環境ファイルのDEFAULT_ISOLATIONにREPEATABLE_READを指定、またはSET TRANSACTION文にREPEATABLE READを指定しても、独立性水準はSERIALIZABLEになります。
動作環境ファイルのR_LOCKがYESの場合、動作環境ファイルのDEFAULT_ISOLATIONまたはSET TRANSACTION文にSERIALIZABLEを指定しても、独立性水準はREPEATABLE READになります。
動作環境ファイルのR_LOCKがNOのときには、DSO定義でPRECEDENCE(1)が指定されたSEQUENTIAL構造の表にアクセスするアプリケーションの占有の単位はDSIになります。
作業領域に関する実行パラメタ
SORT_HASHAREA_SIZE = (メモリサイズ)
ソート処理がレコードをハッシングして格納するための領域のサイズです。
パラメタが省略された場合、メモリ上のすべてのレコードをハッシングして格納します。
2112~2097150の範囲で指定します。単位はキロバイトです。
SORT_MEM_SIZE = (メモリサイズ)
ソート処理のために作業用ソート領域としてサーバ側で使用するメモリの大きさを指定します。この領域は、RDBプロセスのローカルメモリにセション単位に獲得されます。
ソート処理のデータ量がSORT_MEM_SIZEに指定した値を超えると、二次記憶の作業用ソート領域にデータを書き出し、書き出したデータのソートを行います。このとき、二次記憶からのソートデータの読み込み回数はソートデータの全体量とSORT_MEM_SIZEに指定した値に依存します。このため、ソートデータの全体量に応じて、SORT_MEM_SIZEに指定する値を見積もってください。
ソート処理のデータ量がSORT_MEM_SIZEに指定した値の1万倍以上になると、ソート処理で必要なメモリが不足し、「JYP2221E 実行時の制限値を超えました.code:“4”」のエラーとなる場合があります。ただし、メモリ上の作業域の必要最低限なサイズは、作業用ソート領域へのレコードの格納順に依存するため、SORT_MEM_SIZEに指定した値の1万倍は目安となります。
省略値は、以下のとおりです。
SORT_MEM_SIZE = (2112)
サーバ側で使用するメモリの大きさを64~2097150の範囲で指定します。単位はキロバイトです。
WORK_MEM_SIZE = (メモリサイズ)
作業用テーブルとしてサーバ側で使用するメモリのサイズです。この領域は、RDBプロセスのローカルメモリにセション単位に獲得されます。
省略値は、以下のとおりです。
WORK_MEM_SIZE = (128)
サーバ側で使用するメモリのサイズを64~2097150の範囲で指定します。単位はキロバイトです。