付録C.2 SQLオブジェクト用バッファ長(pd_sql_object_cache_size)の見積もり式

計算式で使用する変数については(3)を参照してください。

<この項の構成>
(1) 1SQL文のSQLオブジェクト長の計算式
(2) 1ルーチンのルーチン制御用オブジェクト長の計算式
(3) 計算式で使用する変数
(4) 更新可能なオンライン再編成を実行する場合

(1) 1SQL文のSQLオブジェクト長の計算式

1SQL文のSQLオブジェクト長は次に示す計算式から求めます。

〈計算式〉

1SQL文のSQLオブジェクト長(単位:キロバイト)=
↑{
1840+46×RCN+298×Si+20×Pi+1138×Ti+76×Ti×Di+80×Ci+40×Ii+534×Wi+20×Ki+Li+8×TCi+656×Di+48×nFF+100×nFP+148×nFC+696×nPFF+16×(nAT+nPAT)+20×nCAT+28×(nAF+nCAF)+20×(nAA+nPAA+nCAA)+1057×nSPA+120×nSPP+287×nSFF+8×nSFP+813×nJFC+20×nJFP
〔+60×nFT+nFTS+32×nFTQ〕※1
〔+1057×nTR+120×(nTSN+nTSO)+20×(nTCN+nTCO)〕※2
〔+760+376×RCC+1880×RCT〕※3
〔+32×Si+16〕※4
〔+↑(42×SiT)+{52+152×(SiTA+SiSA+SiNA)×(SiT+SiS+SiN)}↑〕※5
}÷1024↑

注※1 外部表を指定する場合に加算する計算式です。

注※2 トリガを使用する場合に加算する計算式です。

注※3 参照制約を使用する場合に加算する計算式です。

注※4 列名記述領域長の計算式です。動的SQLの場合に加算します。

注※5 型名記述領域長の計算式です。動的SQLの場合に加算します。

注意事項
  • ストアドプロシジャ又はストアドファンクションを使用する場合は,手続き又は関数中に記述するSQL文も計算対象にしてください。
  • トリガを使用する場合はトリガ中に記述するトリガSQL文も計算対象にしてください。
  • ストアドプロシジャ,ストアドファンクション,又はトリガを使用する場合は,ストアドプロシジャ,ストアドファンクション,又はトリガごとにルーチン制御用オブジェクト長を計算してSQLオブジェクト用バッファ長に加算してください。1ルーチンのルーチン制御用オブジェクト長の計算式を(2)に示します。

(2) 1ルーチンのルーチン制御用オブジェクト長の計算式

(a) ユーザが定義する場合

ストアドプロシジャ,ストアドファンクション,又はトリガを定義した場合の,1ルーチンのルーチン制御用オブジェクト長は次に示す計算式から求めます。

〈計算式〉

1ルーチンのルーチン制御用オブジェクト長(単位:キロバイト)=
↑{
600+28×sRi+32×(sRUi+sDi)+56×sSXi+sCUi+sSi+sPi+sLA+sKi+sL+80×sWi+24×sCM+32×sCCR+2×sDCR+60×sCHD+72×sDHD+64×sHCN+8×sCHD×sHCN+48×nRFF+100×nRFP+148×nRFC+200×nPRFF+8×nPRFP+196×nPA+64×nPP+36×nPPI+20×nPPO+200×nPPA+8×nPPP+20×nAR+48×nARA+16×nRPAT+20×nCAT+28×(nRPAF+nRCAF)+20×(nRPAA+nRCAA)+287×nRSFF+8×nRSFP+813×nPJA+20×nPJP+813×nRJFC+20×nRJFP
〔+28×(nTSN×2+nTSO)〕
}÷1024↑

注※ トリガを使用する場合に加算する計算式です。

(b) HiRDBが自動的に作成する場合

表定義時,参照動作にCASCADEを指定した場合,HiRDBが制約制御のためにトリガを作成したときの1ルーチンのルーチン制御用オブジェクト長は次に示す計算式から求めます。

〈計算式〉

1ルーチンのルーチン制御用オブジェクト長(単位:キロバイト)=
↑{
240+608×RCC+(5120+100×RDi+256×RIi)×RCP×RCT
}÷1024↑

(3) 計算式で使用する変数

変数名説明
RCNSQLオブジェクトで使用する表,及びインデクスの合計数
SiSQL文中にある検索項目数(SQL文で指定する列がインデクス列の場合はその列数)
PiSQL文中にある埋込み変数又はパラメタ数
TiSQL文中にある表名数
CiSQL文中にある列名数
表定義時に次に示す定義をした列数も加算してください(SQL文中にない列であっても加算します)。
  • 列定義にDEFAULTを指定している列
  • 非ナル値制約指定にWITH DEFAULTを指定している列
TCiSQL文中にある表の構成列数
WiSQL文中にある論理演算子数※1
KiSQL文中にある定数の数※1
LiSQL文中にある定数の合計長※1(単位:バイト)
IiSQL文実行時に使用するインデクス数(SQL文で指定する表のうち,検索条件に指定するインデクス数)
DiSQL文中の表に定義された格納条件の総数(マトリクス分割表は2倍する)
SiTSQL文中にある選択式の抽象データ型数
SiSSQL文中にある選択式の抽象データ型のスーパタイプ数
SiNSQL文中にある選択式のサブタイプである抽象データ型のスーパタイプの総数
SiTASQL文中にある選択式の抽象データ型の属性数
SiSASQL文中にある選択式の抽象データ型のスーパタイプの属性数
SiNASQL文中にある選択式のサブタイプである抽象データ型のコンポネント指定総数
nSPASQL文中にある手続き文の呼び出し数
nSPPSQL文中にある手続き文の引数の総数
nFFSQL文中にある関数の呼び出し数※1
nFPSQL文中にある関数の引数の総数※1
nFCSQL文中にある関数の総関数定義候補数(関数呼出し数nFFに,引数が抽象データ型の各関数呼出しに対して,サブタイプを引数とする関数定義数を加算する)
nPFFSQLオブジェクトが使用するプラグイン関数呼出し数(SQL文中にあるプラグイン関数呼出し数+SELECTの場合は1,INSERT,UPDATE,DELETEの場合は6)
nSFFSQL文中にあるシステム定義スカラ関数の呼び出し数※1
nSFPSQL文中にあるシステム定義スカラ関数の引数の総数※1
nJFCSQL文中にある外部Java関数の呼び出し数
nJFPSQL文中にある外部Java関数の引数の総数
nATSQL文中にあるコンポネント指定で使用する抽象データ型数(スーパタイプ,抽象データ型属性によって現れる抽象データ型を除く)
nAASQL文中にあるコンポネント指定で使用する抽象データ型数(スーパタイプ,抽象データ型属性によって現れる抽象データ型を含む)
nAFSQL文中にあるコンポネント指定で使用する属性総数
nPATSQLオブジェクトが使用するプラグイン関数の引数で使用する抽象データ型数(スーパタイプ,抽象データ型属性によって現れる抽象データ型を除く)
nPAASQLオブジェクトが使用するプラグイン関数の引数で使用する抽象データ型数(スーパタイプ,サブタイプを含む)
nCATSQL文中にあるコンストラクタ関数の呼び出し数
nCAASQL文中にあるコンストラクタ関数の抽象データ型数(スーパタイプを含む)
nCAFSQL文中にあるコンストラクタ関数の抽象データ型の属性総数
nFTSQL文中にある外部表数
nFTS外部表を検索するSQL文の長さ※2
nFTQ外部表を検索するSQL文中の埋込み変数又は?パラメタの数※2
nTRSQL文の実行によって起動されるトリガ数
nTSNSQL文の実行によって起動される各トリガのトリガSQL文中の新値相関名によって修飾された列の総数
nTSOSQL文の実行によって起動される各トリガのトリガSQL文中の旧値相関名によって修飾された列の総数
nTCNSQL文の実行によって起動される各トリガのトリガ動作条件中の新値相関名によって修飾された列の総数
nTCOSQL文の実行によって起動される各トリガのトリガ動作条件中の旧値相関名によって修飾された列の総数
RCCSQL文中で,更新対象の表を参照する表の外部キーの構成列数と,主キーの構成列数の総数
RCTSQL文中で,更新対象の表を参照する表,及び更新対象の表が参照する表の総数
RCP参照表定義時に,参照動作に指定したCASCADEの総数
RIi参照表定義時,参照指定をする被参照表に定義されたインデクスの総数
RDi参照表定義時,参照指定をする被参照表に定義された分割格納条件の総数(マトリクス分割表の場合は,2倍する)
sRi手続き及び関数中のSQLパラメタ数(INOUT指定のSQLパラメタ数は2倍する)
sRUi手続き及び関数中のSQLパラメタの総数(又は,トリガ定義中のトリガSQL文中の新旧値相関名によって修飾された列の総数)
sDi手続き,関数,及びトリガSQL文中のSQL変数(declare)の総数
sSXi手続き,関数,及びトリガSQL文中のSQLCODE,SQLCOUNT変数の総数
sCUi手続き,関数,及びトリガSQL文中のCURRENT_TIME,CURRENT_DATE定数の総数
sSi手続き及びトリガSQL文中の操作系SQLの数(カーソル宣言を除くSQL文:OPEN,FETCH,CLOSE,UPDATE,DELETE,INSERT文など)
sPi手続き,関数,及びトリガSQL文中のルーチン制御SQL数(BEGIN,SET,IF,ELSEIF,WHILEなど)
sLA手続き,関数,及びトリガSQL文中のラベル数
sKi手続き,関数,及びトリガSQL文中の定数の数(手続き及びトリガSQL文中に記述された操作系SQL文の定数を除く)
sL手続き,関数,及びトリガSQL文中の定数の長さの合計(手続き及びトリガSQL文中に記述された操作系SQL文の定数を除く)
sWi手続き,関数,及びトリガSQL文中の条件述語数
sCM手続き,関数,及びトリガSQL文中の複合文の数
sCCR手続き及びトリガSQL文のカーソル宣言を記述した複合文の数
sDCR手続き及びトリガSQL文のカーソル宣言の数
sCHD手続き,関数,及びトリガSQL文のハンドラ宣言を記述した複合文の数
sDHD手続き,関数,及びトリガSQL文のハンドラ宣言の数
sHCN手続き,関数,及びトリガSQL文のハンドラ宣言中に記述された条件値の数
nRFFルーチン中にある関数呼出し数
nRFPルーチン中にある関数の引数の総数
nRFCルーチン中にある関数の関数定義候補の総数(関数呼出し数nFFに,引数が抽象データ型の各関数呼出しに対して,サブタイプを引数とする関数定義数を加算する)
nPRFFルーチンのSQLオブジェクトが使用するプラグイン関数呼出し数
nPRFPルーチンのSQLオブジェクトが使用するプラグイン関数のプラグインパラメタ総数
nPAルーチン中にある手続き呼び出し数
nPPルーチン中にある手続きのパラメタ総数
nPPIルーチン中にある手続きの入力パラメタ総数(入出力パラメタを含む)
nPPOルーチン中にある手続きの出力パラメタ総数(入出力パラメタを含む)
nPPAルーチンのSQLオブジェクトが使用するプラグイン手続き呼び出し数
nPPPルーチンのSQLオブジェクトが使用するプラグイン手続きのプラグインパラメタ総数
nRSFFルーチン中にあるシステム定義スカラ関数の呼び出し数
nRSFPルーチン中にあるシステム定義スカラ関数の引数の総数
nPJAルーチン中にある外部Java手続きの呼び出し数
nPJPルーチン中にある外部Java手続きの引数の総数
nRJFCルーチン中にある外部Java関数の呼び出し数
nRJFPルーチン中にある外部Java関数の引数の総数
nARルーチン中にあるコンポネント指定で使用する抽象データ型数(スーパタイプ,抽象データ型属性によって現れる抽象データ型を除く)
nARAルーチン中にあるコンポネント指定で使用する属性総数
nRPATルーチンのSQLオブジェクトが使用するプラグインルーチンのパラメタで使用する抽象データ型数(ただし,スーパタイプ,抽象データ型属性の抽象データ型を除く)
nRPAAルーチンのSQLオブジェクトが使用するプラグインルーチンのパラメタで使用する抽象データ型数(スーパタイプを含む)
nRPAFルーチンのSQLオブジェクトが使用するプラグインルーチンのパラメタで使用する抽象データ型の属性総数
nRCATルーチン中にあるコンストラクタ関数の呼び出し数
nRCAAルーチン中にあるコンストラクタ関数の抽象データ型数(スーパタイプを含む)
nRCAFルーチン中にあるコンストラクタ関数の抽象データ型の属性総数
注※1
トリガを使用する場合は,SQL文の実行によって起動される各トリガのトリガ動作条件についても数える必要があります。
注※2
外部表を検索するSQL文はアクセスパス表示ユティリティ(pdvwoptコマンド)で確認できます。

(4) 更新可能なオンライン再編成を実行する場合

更新可能なオンライン再編成を実行する場合,SQLオブジェクト用バッファ長を見積もり直す必要があります。SQLオブジェクト用バッファ長は次に示す計算式から求めてください。

SQLオブジェクト用バッファ長=現在のSQLオブジェクト用バッファ長+更新可能なオンライン再編成で必要なSQLオブジェクト用バッファ長

参考
更新可能なオンライン再編成の追い付き反映処理では,更新ログからSQLを組み立ててオリジナルRDエリアの表に対してSQLを実行します。追い付き反映処理時に実行されるSQLは,UAPが実行したSQLとは異なることがあるため,その分のSQLオブジェクト用バッファ長を見積もる必要があります。
(a) 1SQL文のSQLオブジェクト長の計算式

更新可能なオンライン再編成時の1SQL文のSQLオブジェクト長は,「(1)1SQL文のSQLオブジェクト長の計算式」で説明した計算式から求めてください。ただし,計算式中の変数の値については,次に示す表を参照してください。

変数名説明
RCN2
1SQLが発行されるときは,1表かつ1インデクスのため,合計2となります。
Si0
UAPの検索(SELECT)は追い付き反映の対象外のため,0となります。
PiSQL種別によって異なります。
  • INSERTの場合:UAPが更新する表の構成列数※2
  • UPDATE 表名 SETの場合:UAPが更新する表の構成列数※2+マッピングキー構成列数
    上記の式に,次のように更新している繰返し列の要素数を加算します。
    ・列名[添え字]
    ・列名[*]
  • UPDATE 表名 ADDの場合:UAPが更新する繰返し列数+マッピングキー構成列数
  • UPDATE 表名 DELETEの場合:マッピングキー構成列数
  • DELETEの場合:マッピングキー構成列数
なお,Piの計算結果が30001以上になる場合は,Piを30000としてください。
Ti1
追い付き反映処理で実行されるSQLの場合は,表名は一つのため,1となります。
CiSQL種別によって異なります。
  • INSERTの場合:表の構成列数※2
  • UPDATE 表名 SETの場合:UAPが更新する表の構成列数※2+マッピングキー構成列数
    上記の式に,更新している繰返し列の要素数を加算します。
  • UPDATE 表名 ADDの場合:UAPが更新する繰返し列数+マッピングキー構成列数
  • UPDATE 表名 DELETEの場合:マッピングキー構成列数
  • DELETEの場合:マッピングキー構成列数
なお,Ciの計算結果が30001以上になる場合は,Ciを30000としてください。
TCiUAPが更新する表の構成列数
Wi0
Ki0
Li0
Ii1
更新可能なオンライン再編成の場合は,ユニークインデクスを一つ決定して検索条件に指定するため,1となります。
Di表の格納条件数
マトリクス分割の場合は2倍してください。
SiT0
SiS0
SiN0
SiTA0
SiSA0
SiNA0
nSPA0
nSPP0
nFF表に定義されている抽象データ型の列数※1+更新対象のBLOB又はBINARY列でSUBSTR演算をしている列数
nFPΣ表に定義されている抽象データ型列※1+Σ{表に定義されているBLOB又はBINARY列※1でSUBSTR演算更新の数×3}
nFC0
nPFF表に定義されている抽象データ型列数※1+6
表に抽象データ型が定義されていない場合は0とします。
nSFFBLOB又はBINARY列をSUBSTR演算で更新している列数
nSFPBLOB又はBINARY列をSUBSTR演算で更新している列数×3
nJFC0
nJFP0
nAT0
nAA0
nAF0
nPAT0
nPAA0
nCAT表に定義されている抽象データ型列数※1
nCAA表に定義されている抽象データ型の種類の数※1
nCAFΣ(表に定義されている抽象データ型の属性数※1×n)
n:SGMLTEXT型及びXML型の場合は1,FREEWORD型の場合は2になります。
nFT0
nFTS0
nFTQ0
nTR0
nTSN0
nTSO0
nTCN0
nTCO0
RCCSQL文中で,更新対象の表を参照する表の外部キーの構成列数と,主キーの構成列数の総数
RCTSQL文中で,更新対象の表を参照する表,及び更新対象の表が参照する表の総数
注※1
pdorbeginコマンドに-eオプションを指定して,更新された列だけを反映する場合は,次に示すように読み替えてください。
読み替え前読み替え後
表に定義されている抽象データ型の列数表に定義されている抽象データ型の列のうち,更新対象となる抽象データ型列数
表に定義されているBLOB又はBINARY列表に定義されているBLOB又はBINARY列のうち,更新対象となるBLOB又はBINARY列
ただし,UAPで明示的に更新していないBLOB又はBINARY列のうち,表定義時に次の定義をした列数も加算してください。
  • 列定義にDEFAULT句を指定している列
  • 非ナル値制約指定にWITH DEFAULT句を指定している列
表に定義されている抽象データ型の種類の数表に定義されている抽象データ型の種類のうち,更新対象となる抽象データ型の種類の数
表に定義されている抽象データ型の属性数表に定義されている抽象データ型の属性のうち,更新対象となる抽象データ型の属性数
注※2
追い付き反映処理で発行したSQL種別がINSERT及びUPDATEの形式2となる場合,又は更新列だけ追い付き反映処理をする場合は,次に示すように読み替えてください。SQLの発行形式については,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。
読み替え前SQL種別読み替え後
UAPが更新する表の構成列数INSERT
(形式1)
UPDATE
(形式1)
UAPで明示的に更新した列数
ただし,UAPで明示的に更新していない列のうち,表定義時に次の定義をした列数も加算してください。
  • 列定義にDEFAULT句を指定している列
  • 非ナル値制約指定にWITH DEFAULT句を指定している列
INSERT
(形式2)
1
UPDATE
(形式2)
(凡例)
-:読み替え不要です。
(b) 必要最低限のSQLオブジェクト用バッファ長の求め方

追い付き反映処理時にSQLオブジェクト用バッファ不足が発生しない必要最低限の,SQLオブジェクト用バッファ長の見積もり式を次に示します。

〈計算式〉

MAX{ORG_SQL_OBJ_MAX_SIZE ,ORG_SQL_OBJ_AVE_SIZE×ORG_PROC_NUM×
          n
MIN(100 ,Σ ORG_SQL_KIND) }
          i=1 

変数の説明
ORG_SQL_OBJ_MAX_SIZE:追い付き反映処理中に実行されるSQLのSQLオブジェクト長を個々に求め,その中で最大となるSQLオブジェクト長
ORG_SQL_OBJ_AVE_SIZE:追い付き反映処理中に実行されるSQLのSQLオブジェクト長の平均値
ORG_PROC_NUM:追い付き反映プロセス数(pdorendコマンドの-mオプションの指定値)
-mオプションの省略時は2となります。
ORG_SQL_KIND:該当表に対して実行されるSQL種別数(INSERT,UPDATE,及びDELETEのうち,該当表に対して実行されるSQL種別数)
n:更新可能なオンライン再編成の対象表数
(c) SQLオブジェクト用バッファ長の再見積もりが必要なとき

次に示す場合は,SQLオブジェクト用バッファ長を見積もり直してください。