スケーラブルデータベースサーバ HiRDB Version 8 システム導入・設計ガイド(Windows(R)用)

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

17.1.4 表データ更新時に出力されるシステムログ量

表中の行を操作すると次の表に示すシステムログが出力されます。

表17-1 表中の行を操作したときに出力されるシステムログの種類

システムログの種類 説 明
基本行ログ 基本行ログは,表中の行データを追加,削除又は更新するときに出力されます。
分岐行ログ 分岐行ログは,次に示すデータ型のデータを操作するときに出力されます。
  • VARCHAR※1
  • NVARCHAR※2
  • MVARCHAR※1
  • 繰返し列
  • 抽象データ型
  • BINARY型※3
インデクスログ インデクスログは,インデクスのキーを追加,削除又は更新するときに出力されます。インデクスログ量は,データベースの操作内容(INSERT文,DELETE文及びUPDATE文)によって,表17-2に示すとおりに求めてください。
イベントログ イベントログは,HiRDB Datareplicatorを使用しているとき,繰返し列を含む行データを追加,削除又は更新すると出力されます。

注※1 次に示すどちらかの条件を満たす場合に分岐行ログが出力されます。
  • ノースプリットオプションの指定がなく,実際のデータ長が256バイト以上の場合
  • ノースプリットオプションの指定があり,実際の1行のデータ長の合計がページ長を超える場合

注※2 次に示すどちらかの条件を満たす場合に分岐行ログが出力されます。
  • ノースプリットオプションの指定がなく,実際のデータ長が128文字以上の場合
  • ノースプリットオプションの指定があり,実際の1行のデータ長の合計がページ長を超える場合

注※3 実際の1行のデータ長の合計がページ長を超える場合に分岐行ログが出力されます。

表17-2 データベースの操作内容と求めるログ量

操作内容(SQL文) 求めるログ量
キーの追加(INSERT文) 追加ログ量
キーの削除(DELETE文) 削除ログ量
キーの更新(UPDATE文) 更新前キーの削除ログ量+更新後キーの追加ログ量
 

データベースを更新(INSERT,DELETE及びUPDATE)する場合に出力されるシステムログ量は,操作内容(INSERT,DELETE及びUPDATE)によって異なります。システムログ量の計算式を次に示します。

なお,ログを取得しないUAP実行時に出力されるシステムログ量は,セグメント確保が発生する場合のログ量として460バイトとなります。

条件 計算式(単位:バイト)
表にn行追加(INSERT)する場合又は表からn行削除(DELETE)する場合に出力されるシステムログ量 (a+b+c)×n
表中のn行を更新(UPDATE)する場合に出力されるシステムログ量 (a※1+d※2+e※3)×n

a:基本行ログ量(バイト)

b:全分岐行ログ量の合計値(バイト)

c:全インデクスログ量の合計値(バイト)

d:更新対象分岐行ログ量の合計値(バイト)

e:更新対象インデクスログ量の合計値(バイト)

n:操作する行数(件)

注※1 更新(UPDATE)する列値が基本行内にある場合に加算します。

注※2 更新(UPDATE)する列値が分岐行内にある場合に加算します。

注※3 更新(UPDATE)する列にインデクスを定義する場合に加算します。
<この項の構成>
(1) 基本行ログ量の見積もり
(2) 分岐行ログ量の見積もり
(3) インデクスログ量の見積もり
(4) イベントログ量の見積もり

(1) 基本行ログ量の見積もり

データ1件当たりの基本行ログ量の計算式を次の表に示します。

表17-3 データ1件当たりの基本行ログ量の計算式

データの操作内容(SQL文) 出力されるログ量(単位:バイト)
データの追加(INSERT文) k+152
データの削除(DELETE文)
データの更新
(UPDATE文)
FIX表でf≦12 f
Σ di
i=1
f
Σ dj+4×f+152
j=1
非FIX表
又はf>12
k1+k2+160
●pd_nowait_scan_optionオペランドにLOCKを指定する場合に加算します。
314×2
行インタフェース使用時 2×k1+160

k:追加又は削除する行長

k1:更新する行の更新前行長

k2:更新する行の更新後行長

f:更新する列数

di:更新する列の更新前データ長

dj:更新する列の更新後データ長

注1
k,k1,k2の値は,操作する表にFIX指定をするかどうかによって異なります。それぞれの計算式を次に示します。なお,表のデータ長については次を参照してください。

注2
HiRDB Datareplicatorを使用している場合,FIX表に対して12列以下のUPDATEを列単位で実行すると,13列以上のUPDATEと同量のログが出力されます。

注3
表にBLOB列が定義されている場合,表17-3の行長はBLOB列のとき9バイト固定とし,次の表に示すログ量を加算してください。

表17-4 BLOB列のデータ1件当たりのログ量の計算式

データの操作内容
(SQL文)
recoveryの指定 出力されるログ量(単位:バイト)
データの追加
(INSERT文)
なし又はpartial 604+180×p5
all 2348+p1+8340×p2+(148+lt)×p3
no 300
データの削除
(DELETE文)
なし又はpartial 460+180×p6
all
no 468
データの更新
(UPDATE文)
なし又はpartial 1324
all 604+180×p5+460+180×p6
no 312
データの連結演算
(UPDATE文)
Bb≦7168
なし又はpartial 2344
all 8340×a+1600+d+8340×p4+(148+lt2)×p3
no 428
データの連結演算
(UPDATE文)
Bb>7168
なし又はpartial 2772
all 2772+Ba+8340×p4+(148+lt2)×p3
no 428
データの後方削除更新
(UPDATE文)
Bb≦7168
なし又はpartial 2344
all 9512
no 428
データの後方削除更新
(UPDATE文)
Bb>7168
なし又はpartial 2492+180×↑(Bb-Bd)÷8192↑
all 2492+180×↑(Bb-Bd)÷8192↑
no 428+180×↑(Bb-Bd)÷8192↑
Bi:BLOBデータ長(単位:バイト)
Ba:次のどちらかの値
  • Bb>7168の場合:8192−{(Bb−7168)−↓(Bb−7168)÷8192↓×8192}
  • Bb≦7168の場合:0
Bb:BLOB更新前データ長(単位:バイト)
Bc:BLOB追加データ長(単位:バイト)
Bd:更新後データ長(SUBSTR関数の値式3の指定値)(単位:バイト)
lt:次のどちらかの値
  • Bi>7168の場合:Bi−7168−↓(Bi−7168)÷8192↓×8192
  • Bi≦7168の場合:0
lt2:次のどちらかの値
  • Bc+Bb>7168の場合:(Bc+Bb−Ba−7168)−↓(Bc+Bb−Ba−7168)÷8192↓×8192
  • Bc+Bb≦7168の場合:0
p1:次のどちらかの値
  • Bi>7168の場合:7168
  • Bi≦7168の場合:Bi
p2:次のどちらかの値
  • Bi>7168の場合:↓(Bi−7168)÷8192↓
  • Bi≦7168の場合:0
p3:次のどちらかの値
  • lt=0又はlt2=0の場合:0
  • lt>0又はlt2>0の場合:1
p4:次のどちらかの値
  • Bc+Bb>7168の場合:↓(Bc+Bb−Ba−7168)÷8192↓
  • Bc+Bb≦7168の場合:0
p5:次のどちらかの値
  • Bi>0の場合:↑(Bi+1024)÷8192↑
  • Bi=0の場合:0
p6:次のどちらかの値
  • Bb>0の場合:↑(Bb+1024)÷8192↑
  • Bb=0の場合:0
a:次のどちらかの値
  • Bb>0の場合:1
  • Bb=0の場合:0
d:次のどちらかの値
  • Bc+Bb≦7168の場合:Bc+Bb
  • Bc+Bb>7168の場合:7168

(2) 分岐行ログ量の見積もり

(a) ノースプリットオプション指定なしのVARCHAR,NVARCHAR及びMVARCHARの分岐行ログ量

発生する分岐行分のログ量を算出してその合計値を求めます。1分岐行ログ量の計算式を次の表に示します。

表17-5 1分岐行のログ量の計算式(その1)

データの操作内容(SQL文) 出力されるログ量
(単位:バイト)
データの追加(INSERT文) k+152
データの削除(DELETE文)
データの更新
(UPDATE文)
更新によって新たな分岐行ができる場合 k2+160
分岐行を更新する場合 k1+k2+160
更新によって分岐行が削除される場合 k1+160

k:追加又は削除する一つの分岐行長

k1:更新する一つの更新前分岐行長

k2:更新する一つの更新後分岐行長

注 k,k1及びk2の行長は,次に示す計算式で求めます。
8+MIN(平均データ長の実長 ,RDエリアのページ長−48 )
(b) 抽象データ型の列,繰返し列,BINARY型の列,ノースプリットオプション指定ありのVARCHAR,NVARCHAR及びMVARCHARの分岐行ログ量

発生する分岐行分のログ量を算出してその合計値を求めます。1分岐行ログ量の計算式を次の表に示します。

ただし,表格納RDエリアが複数あり,ページ長が各RDエリアで異なる場合は,同じページ長のRDエリアごとに計算して,その合計を分岐行ログ量として求めてください。

表17-6 1分岐行のログ量の計算式(その2)

データの操作内容(SQL文) 出力されるログ量(単位:バイト)
データの追加(INSERT文) SPN×(b+152)
データの削除(DELETE文)
データの更新(UPDATE文) SPN×(b+160)
データの連結演算(UPDATE文) (b+160)+(SPN−1)×(b+152)
●pd_rpl_hdepathオペランドを指定する場合に加算します。
160
データの後方削除更新(UPDATE文) (b×2+160)+(↓(c−d)÷(b−57)↓)×(b+152)
●pd_rpl_hdepathオペランドを指定する場合に加算します。
160

注※ BINARY型の列の場合だけです。

b:RDエリアのページ長

c:更新前データ長

d:更新後データ長(SUBSTR関数の値式3の指定値)

SPN:求め方を次に示します。
分岐する列がある場合(分岐する条件については「表16-1 データ長一覧」の注※5で説明),INSERT文及びDELETE文は表を構成するすべての列について,UPDATE文は更新対象列について次に示す値を求めてください。ただし,BINARY型の列の連結演算の場合,diは追加するデータ長として計算してください。

SPN=SPN1+SPN2
SPN1,及びSPN2については「16.1.2 表の格納ページ数の計算方法」の「(3)計算式中で使用する変数」を参照してください。ただし,aの値には1を設定してください。

(3) インデクスログ量の見積もり

1本のインデクスの1行ごとの操作で出力するインデクスログ量は,次の表に示す計算式で求めます。

表17-7 1本のインデクスログ量の計算式

キーの操作内容(SQL文) 出力されるログ量
(単位:バイト)
キーの追加
(INSERT文)
新しいキーを追加する場合 k1+156
又は(k1+156)×2
追加するキーと同じ行が既にある場合 d≦200 k1+156
d>200 k1+292
キーの削除
(DELETE文)
キー値を削除する場合 k2+156
削除するキー値と同じ値を持つ行がほかにある場合 d≦200 k2+156
d>200 k2+292
キーの更新(UPDATE文) キー削除のログ量+キー追加のログ量

d:キー値の重複数

k1:追加するキー長(バイト)

k2:削除するキー長(バイト)

ここでいうキー長とは,DB格納キー長のことです。キー長の求め方については,「16.1.3 インデクスの格納ページ数の計算方法」を参照してください。

注※
インデクスキー無排他を適用したUNIQUE指定のインデクスのときの計算式です。
(a) インデクスページスプリット時のインデクスログ量の見積もり

インデクスページスプリットの概念を次の図に示します。

図17-1 インデクスページスプリットの概念

[図データ]

〔説明〕
  1. リーフページの一番右側(図中の最大キーが格納されているページ)にキーが追加され,ページが二つに分割されていることを最大キーが入っているページスプリットといいます。
  2. そのほかのリーフページにキーが追加され,ページが二つに分割されていることを最大キーが入っていないページスプリットといいます。

インデクス格納ページをスプリットする場合,HiRDBは次に示す二つの方法でキー値を格納します。

●最大キー値が入っていないページスプリットの場合
キー値を追加又は削除すると,キーと未使用領域の比率をおよそ50:50にスプリットしてキー値を格納します。最大キー値が入っていないページスプリットが発生する条件を次に示します。
  • インデクス格納ページ内にキーが入らないとき
  • 重複するキー値が201件以上あり,同じキー値を持つ行をa件以上追加するとき
    aは次に示す計算式で求めます。このとき,a件に1回はスプリットが発生します。
計算式
a=↑インデクスを格納するRDエリアのページ長(バイト)÷4↑

●最大キー値が入っているページスプリットの場合
最大キー値が格納されているインデクス格納ページに対してキー値を追加又は更新すると,キーと未使用領域の比率をCREATE INDEXのPCTFREEオペランドの指定値に従ってスプリットし,キー値を格納します。
例えば,PCTFREE=30と指定すると,キーと未使用領域の比率をおよそ70:30にスプリットしてキー値を格納します。
キーの追加によってCREATE INDEXのPCTFREEオペランドに指定する分の空き領域が確保できないときに,最大キー値が入っているページスプリットが発生します。ただし,上位レベルページは該当しません。

スプリット種別による1回当たりのインデクスログ量の計算式を次の表に示します。

表17-8 スプリット種別による1回当たりのインデクスログ量の計算式

スプリット
種別
条件 出力されるログ量
(単位:バイト)
最大キーが入っているページのスプリット インデクス中のキー値と異なるキーを追加した場合 上位ページにキーを追加するための空き領域が未使用領域にある場合 2×k1+a+8×(m+1)≦31516の場合 2×k1+472+a+8×(m+1)
2×k1+a+8×(m+1)>31516の場合 2×k1+632+a+8×(m+1)
上位ページにキーを追加するための空き領域が未使用領域にない場合 2×k1+a+8×(m+1)≦31516の場合 n-1
Σ(288+a)
i=2
+2×k1+472+a+8×(m+1)
2×k1+a+8×(m+1)>31516の場合 n-1
Σ(288+a)
i=2
+2×k1+628+a+8×(m+1)
インデクス中に追加するキー値と同じキーがある場合 d1≦200 上位ページにキーを追加するための空き領域が未使用領域にある場合 2×k1+472+a+8×(m+1)
上位ページにキーを追加するための空き領域が未使用領域にない場合 n-1
Σ(288+a)
i=2
+2×k1+472+a+8×(m+1)
d1>200 下位ページにキーを追加するための空き領域が未使用領域にある場合 k1+472+a
下位ページにキーを追加するための空き領域が未使用領域にない場合 k1+462+2×a
最大キーが入っていないページのスプリット キーを追加するための空き領域が未使用領域にない場合 上位ページにキーを追加するための空き領域が未使用領域にある場合 2×k1+a+8×(m+1)≦31516の場合 2×k1+332+a+8×(m+1)
2×k1+a+8×(m+1)>31516の場合 2×k1+492+a+8×(m+1)
上位ページにキーを追加するための空き領域が未使用領域にない場合 2×k1+a+8×(m+1)≦31516の場合 n-1
Σ(288+a)
i=2
+2×k1+332+a+8×(m+1)
2×k1+a+8×(m+1)>31516の場合 n-1
Σ(288+a)
i=2
+2×k1+492+a+8×(m+1)

a:インデクスを格納しているRDエリアのページ長(バイト)

d1:キー値の重複数

k1:追加するキー長(バイト)
ここでいうキー長とは,DB格納キー長のことです。キー長の求め方については,「16.1.3 インデクスの格納ページ数の計算方法」を参照してください。

m:スプリットが発生した時点のインデクス段数

n:スプリットが波及した上位ページの段数
リーフページのスプリットによって波及した上位ページが,さらにスプリットした場合はn=3(n≧3)となります。

この計算式は,1件当たりの行及びインデクス部分の更新ログ量の見積もり式です。このため,この計算式には,追加及び更新によって,新しいページ又はセグメントを確保したときのシステム管理情報に関するログ量を含んでいません。したがって,大量のデータを扱う場合は,次の表に示すログ量を加算して見積もる必要があります。

表17-9 ページ/セグメントの確保ログ量の計算式

条件 出力されるログ量
(単位:バイト)
データの追加(INSERT)又は更新(UPDATE)によって,行の格納ページを新しく確保する場合 440
データの追加(INSERT)又は更新(UPDATE)によって,インデクスのページスプリットが発生する場合 544×n+272
上記のページ確保に対して,セグメントの確保が発生する場合(セグメントサイズ数分のページ確保をするごとに発生します) 1940
n:ページスプリットが発生した時点のインデクスの段数+1

(4) イベントログ量の見積もり

イベントログはHiRDB Datareplicatorを使用しているときに,繰返し列を含む行データを追加,削除又は更新すると出力されます。1行を操作したときに出力されるイベントログ量を次の表に示します。

表17-10 1行を操作したときに出力されるイベントログ量

データ操作内容 イベントログ量
(単位:バイト)
データの追加(INSERT文) 156×n
データの更新(UPDATE文) 更新によって新しい要素が追加される場合(UPDATE ADD) 164×n
更新によって要素が削除される場合
(UPDATE DELETE)
n
Σ (p5 +160)
i=1
指定した要素だけを更新する場合
(UPDATE SET)
n
Σ (p5 +160)
i=1
指定した繰返し列を更新する場合
(UPDATE SET)
164×n

n:更新対象となる繰返し列の数

p5:↑{↑(指定する最大添字番号の平均値−指定する最小添字番号の平均値+1)÷8↑}÷4↑×4