スケーラブルデータベースサーバ HiRDB Version 8 システム定義(UNIX(R)用)

[目次][索引][前へ][次へ]

付録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) 計算式で使用する変数

変数名 説明
RCN SQLオブジェクトで使用する表,及びインデクスの合計数
Si SQL文中にある検索項目数(SQL文で指定する列がインデクス列の場合はその列数)
Pi SQL文中にある埋込み変数又はパラメタ数
Ti SQL文中にある表名数
Ci SQL文中にある列名数
表定義時に次に示す定義をした列数も加算してください(SQL文中にない列であっても加算します)。
  • 列定義にDEFAULTを指定している列
  • 非ナル値制約指定にWITH DEFAULTを指定している列
TCi SQL文中にある表の構成列数
Wi SQL文中にある論理演算子数※1
Ki SQL文中にある定数の数※1
Li SQL文中にある定数の合計長※1(単位:バイト)
Ii SQL文実行時に使用するインデクス数(SQL文で指定する表のうち,検索条件に指定するインデクス数)
Di SQL文中の表に定義された格納条件の総数(マトリクス分割表は2倍する)
SiT SQL文中にある選択式の抽象データ型数
SiS SQL文中にある選択式の抽象データ型のスーパタイプ数
SiN SQL文中にある選択式のサブタイプである抽象データ型のスーパタイプの総数
SiTA SQL文中にある選択式の抽象データ型の属性数
SiSA SQL文中にある選択式の抽象データ型のスーパタイプの属性数
SiNA SQL文中にある選択式のサブタイプである抽象データ型のコンポネント指定総数
nSPA SQL文中にある手続き文の呼び出し数
nSPP SQL文中にある手続き文の引数の総数
nFF SQL文中にある関数の呼び出し数※1
nFP SQL文中にある関数の引数の総数※1
nFC SQL文中にある関数の総関数定義候補数(関数呼出し数nFFに,引数が抽象データ型の各関数呼出しに対して,サブタイプを引数とする関数定義数を加算する)
nPFF SQLオブジェクトが使用するプラグイン関数呼出し数(SQL文中にあるプラグイン関数呼出し数+SELECTの場合は1,INSERT,UPDATE,DELETEの場合は6)
nSFF SQL文中にあるシステム定義スカラ関数の呼び出し数※1
nSFP SQL文中にあるシステム定義スカラ関数の引数の総数※1
nJFC SQL文中にある外部Java関数の呼び出し数
nJFP SQL文中にある外部Java関数の引数の総数
nAT SQL文中にあるコンポネント指定で使用する抽象データ型数(スーパタイプ,抽象データ型属性によって現れる抽象データ型を除く)
nAA SQL文中にあるコンポネント指定で使用する抽象データ型数(スーパタイプ,抽象データ型属性によって現れる抽象データ型を含む)
nAF SQL文中にあるコンポネント指定で使用する属性総数
nPAT SQLオブジェクトが使用するプラグイン関数の引数で使用する抽象データ型数(スーパタイプ,抽象データ型属性によって現れる抽象データ型を除く)
nPAA SQLオブジェクトが使用するプラグイン関数の引数で使用する抽象データ型数(スーパタイプ,サブタイプを含む)
nCAT SQL文中にあるコンストラクタ関数の呼び出し数
nCAA SQL文中にあるコンストラクタ関数の抽象データ型数(スーパタイプを含む)
nCAF SQL文中にあるコンストラクタ関数の抽象データ型の属性総数
nFT SQL文中にある外部表数
nFTS 外部表を検索するSQL文の長さ※2
nFTQ 外部表を検索するSQL文中の埋込み変数又は?パラメタの数※2
nTR SQL文の実行によって起動されるトリガ数
nTSN SQL文の実行によって起動される各トリガのトリガSQL文中の新値相関名によって修飾された列の総数
nTSO SQL文の実行によって起動される各トリガのトリガSQL文中の旧値相関名によって修飾された列の総数
nTCN SQL文の実行によって起動される各トリガのトリガ動作条件中の新値相関名によって修飾された列の総数
nTCO SQL文の実行によって起動される各トリガのトリガ動作条件中の旧値相関名によって修飾された列の総数
RCC SQL文中で,更新対象の表を参照する表の外部キーの構成列数と,主キーの構成列数の総数
RCT SQL文中で,更新対象の表を参照する表,及び更新対象の表が参照する表の総数
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オブジェクト長の計算式」で説明した計算式から求めてください。ただし,計算式中の変数の値については,次に示す表を参照してください。

変数名 説明
RCN 2
1SQLが発行されるときは,1表かつ1インデクスのため,合計2となります。
Si 0
UAPの検索(SELECT)は追い付き反映の対象外のため,0となります。
Pi SQL種別によって異なります。
  • INSERTの場合:UAPが更新する表の構成列数※2
  • UPDATE 表名 SETの場合:UAPが更新する表の構成列数※2+マッピングキー構成列数
    上記の式に,次のように更新している繰返し列の要素数を加算します。
    ・列名[添え字]
    ・列名[*]
  • UPDATE 表名 ADDの場合:UAPが更新する繰返し列数+マッピングキー構成列数
  • UPDATE 表名 DELETEの場合:マッピングキー構成列数
  • DELETEの場合:マッピングキー構成列数
なお,Piの計算結果が30001以上になる場合は,Piを30000としてください。
Ti 1
追い付き反映処理で実行されるSQLの場合は,表名は一つのため,1となります。
Ci SQL種別によって異なります。
  • INSERTの場合:表の構成列数※2
  • UPDATE 表名 SETの場合:UAPが更新する表の構成列数※2+マッピングキー構成列数
    上記の式に,更新している繰返し列の要素数を加算します。
  • UPDATE 表名 ADDの場合:UAPが更新する繰返し列数+マッピングキー構成列数
  • UPDATE 表名 DELETEの場合:マッピングキー構成列数
  • DELETEの場合:マッピングキー構成列数
なお,Ciの計算結果が30001以上になる場合は,Ciを30000としてください。
TCi UAPが更新する表の構成列数
Wi 0
Ki 0
Li 0
Ii 1
更新可能なオンライン再編成の場合は,ユニークインデクスを一つ決定して検索条件に指定するため,1となります。
Di 表の格納条件数
マトリクス分割の場合は2倍してください。
SiT 0
SiS 0
SiN 0
SiTA 0
SiSA 0
SiNA 0
nSPA 0
nSPP 0
nFF 表に定義されている抽象データ型の列数※1+更新対象のBLOB又はBINARY列でSUBSTR演算をしている列数
nFP Σ表に定義されている抽象データ型列※1+Σ{表に定義されているBLOB又はBINARY列※1でSUBSTR演算更新の数×3}
nFC 0
nPFF 表に定義されている抽象データ型列数※1+6
表に抽象データ型が定義されていない場合は0とします。
nSFF BLOB又はBINARY列をSUBSTR演算で更新している列数
nSFP BLOB又はBINARY列をSUBSTR演算で更新している列数×3
nJFC 0
nJFP 0
nAT 0
nAA 0
nAF 0
nPAT 0
nPAA 0
nCAT 表に定義されている抽象データ型列数※1
nCAA 表に定義されている抽象データ型の種類の数※1
nCAF Σ(表に定義されている抽象データ型の属性数※1×n)
n:SGMLTEXT型及びXML型の場合は1,FREEWORD型の場合は2になります。
nFT 0
nFTS 0
nFTQ 0
nTR 0
nTSN 0
nTSO 0
nTCN 0
nTCO 0
RCC SQL文中で,更新対象の表を参照する表の外部キーの構成列数と,主キーの構成列数の総数
RCT SQL文中で,更新対象の表を参照する表,及び更新対象の表が参照する表の総数

注※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オブジェクト用バッファ長を見積もり直してください。