Hitachi

ノンストップデータベース HiRDB Version 10 システム導入・設計ガイド(UNIX(R)用)


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

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

HiRDB/シングルサーバの場合は,ここで求めるシステムログ量をシングルサーバで出力するログ量に加算してください。HiRDB/パラレルサーバの場合は,更新対象の表及びインデクスが格納されているRDエリアを管理する,バックエンドサーバ及びディクショナリサーバで出力するログ量に,ここで求めるシステムログ量をそれぞれ加算してください。

ただし,UAPがログレスモードの場合には,ログレスモードの表データ更新時に出力されるシステムログ量を求めてください。

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

システムログの種類

説 明

基本行ログ

基本行ログは,表中の行データを追加,削除又は更新するときに出力されます。

分岐行ログ

分岐行ログは,次に示すデータ型のデータを操作するときに出力されます。

  • VARCHAR※1

  • NVARCHAR※2

  • MVARCHAR※1

  • 繰返し列

  • 抽象データ型

  • BINARY型※3

インデクスログ

インデクスログは,インデクスのキーを追加,削除又は更新するときに出力されます。インデクスログ量は,データベースの操作内容(INSERT文,DELETE文及びUPDATE文)によって,表「データベースの操作内容と求めるログ量」に示すとおりに求めてください。

イベントログ

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

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

  • ノースプリットオプションの指定があり,実際の1行のデータ長の合計がページ長を超える場合

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

  • ノースプリットオプションの指定があり,実際の1行のデータ長の合計がページ長を超える場合

注※3 実際の1行のデータ長の合計がページ長を超える場合に分岐行ログが出力されます。
表16‒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) 基本行ログ量の見積もり

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

表16‒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列が定義されている場合,表「データ1件当たりの基本行ログ量の計算式」の行長はBLOB列のとき9バイト固定とし,次の表に示すログ量を加算してください。

表16‒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

604+180×p5+460+180×p6

all

2496+p1+8340×p2+(148 +lt)×p3

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

注4

pd_idx_without_rollback=Yを指定し,インデクスを定義したWITHOUT ROLLBACK指定表に対して,INSERT文,DELETE文又はインデクス構成列を更新するUPDATE文を実行する場合に312を加算してください。

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

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

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

表16‒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エリアごとに計算して,その合計を分岐行ログ量として求めてください。

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

データの操作内容(SQL文)

出力されるログ量(単位:バイト)

データの追加(INSERT文)

SPN×(b+152)

データの削除(DELETE文)

データの更新(UPDATE文)

SPN×(b+160)

データの連結演算(UPDATE文)※1

(b+160)+(SPN−1)×(b+152)

●pd_rpl_hdepathオペランドを指定する場合に加算します。

160

データの後方削除更新(UPDATE文)※1,※2

(b×2+160)+(↓(c−d)÷(b−57)↓)×(b+152)

●pd_rpl_hdepathオペランドを指定する場合に加算します。

160

注※1 

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

注※2 

圧縮列の場合は該当しません。圧縮列のデータの後方削除更新(UPDATE文)は,データの更新(UPDATE文)で算出してください。

b:RDエリアのページ長

c:更新前データ長

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

SPN:求め方を次に示します。

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

SPN=SPN1+SPN2

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

(c) 更新可能なオンライン再編成時に追加出力されるログ量

更新可能なオンライン再編成中(オンライン再編成閉塞状態の副系RDエリアにアクセスしている間)に更新可能なオンライン再編成実行対象RDエリアに対してUAPがアクセスするときに出力するログ量見積もりは,通常出力するログ量に加えて,pdorend反映プロセス向けのイベントログ量を追加する必要があります。追加するログ量について説明します。

  • 更新可能なオンライン再編成中は,1行分の更新で行更新開始イベントログ及び行更新終了イベントログを出力します。また,ロールバックするとき1行分の回復で行回復開始イベントログ及び行回復終了イベントログを出力します。そのため,システムログファイルの容量見積もり時,表「データ1件当たりの基本行ログ量の計算式」の計算式に,次の表に示すログ量を加算してください。

    表16‒7 更新可能なオンライン再編成時にデータ1件当たりに追加されるシステムログ量

    データの操作内容(SQL文)

    追加出力されるログ量(単位:バイト)

    INSERT

    320

    DELETE

    UPDATE

    320+c※1+160※2

    INSERTのロールバック

    320

    DELETEのロールバック

    UPDATEのロールバック

    496+行更新前データ長+c※1+160※2

    注※1

    オンライン再編成データベース静止化コマンド(pdorbegin)の-eオプション指定時にcを加算します。cの計算式を次に示します。

    (↑(↑(a−b+1)÷8↑+6)÷4↑)×4×2

    a:更新する列のうちで最も大きい列のID

    b:更新する列のうちで最も小さい列のID

    注※2

    定義長32001以上のBINARY型の列に対し連結演算,又は後方削除更新を行った場合に加算します。

  • 更新可能なオンライン再編成中は,表にBLOB列が定義されている場合はBLOB更新のイベントログが追加されます。そのため,システムログファイルの容量見積もり時,表「BLOB列のデータ1件当たりのログ量の計算式」の計算式に,次の表に示すログ量を加算してください。

    表16‒8 更新可能なオンライン再編成時にBLOB列のデータ1件当たりに追加されるログ量

    データの操作内容(SQL文)

    追加出力されるログ量(単位:バイト)

    INSERT

    0

    DELETE

    224

    UPDATE

    224+160※2

    INSERTのロールバック

    0

    DELETEのロールバック

    148+p1+8340×p2+(148+lt)×p3※1

    UPDATEのロールバック

    148+p1+8340×p2+(148+lt)×p3※1+160※2

    注※1

    変数p1,p2,p3,ltについては,表「BLOB列のデータ1件当たりのログ量の計算式」を参照してください。また,これらの変数には削除するBLOBデータ長を代入してください。

    注※2

    連結演算,又は後方削除更新を行った場合に加算します。

  • 更新可能なオンライン再編成中は,次の場合は新たに繰返し列更新のイベントログを出力します。そのため,システムログファイルの容量見積もり時,表「1行を操作したときに出力されるイベントログ量」の計算式に,次の表に示すログ量を加算してください。

    • 繰返し列を含む行を削除した場合

    • 繰返し列全体を指定して更新する場合

    • 繰返し列の要素を指定して更新する場合

    • 繰返し列の要素を指定して削除する場合

    • 繰返し列の指定した要素だけを指定して更新する場合

    表16‒9 更新可能なオンライン再編成時に繰返し列を含むデータ1件当たりに追加されるログ量

    データの操作内容(SQL文)

    追加出力されるログ量(単位:バイト)

    UPDATE-SET(列指定)

    164

    UPDATE-ADD(要素指定)

    (更新によって新たな要素が追加される場合)

    n

    Σ 164

    i=1

    UPDATE-DELETE(要素指定)

    (更新によって新たな要素が削除される場合)

    m

    Σ (p4+160)

    i=1

    UPDATE-SET(要素指定)

    (指定した要素だけを更新する場合)

    n

    Σ ((p4+160)×2)

    i=1

    DELETE

    156

    UPDATE-SET(列指定)のロールバック

    156

    UPDATE-ADD(要素指定)のロールバック

    (更新によって新たな要素が削除される場合)

    n

    Σ (p4+180)

    i=1

    UPDATE-DELETE(要素指定)のロールバック

    (更新によって新たな要素が追加される場合)

    m

    Σ 184

    i=1

    UPDATE-SET(要素指定)のロールバック

    (指定した要素だけを更新する場合)

    n

    Σ (p4+180)

    i=1

    DELETEのロールバック

    156

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

    m:削除対象の要素数

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

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

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

表16‒10 1本のインデクスログ量の計算式

キーの操作内容(SQL文)

出力されるログ量

(単位:バイト)

pd_indexlock_modeオペランドの指定値

KEY

NONE

非ユニーク属性のインデクス

ユニーク属性のインデクス

キーの追加

(INSERT文)

新しいキーを追加する場合

k1+156

k1+156

k1×2+356

追加するキーと同じ行が既にある場合

d≦200

k1+156

k1+156

d>200

k1+292

k1+292

キーの削除

(DELETE文)

キー値を削除する場合

k2+156

k2+156

k2+160+a

削除するキー値と同じ値を持つ行がほかにある場合

d≦200

k2+156

k2+156

d>200

k2+292

k2+308

キーの更新(UPDATE文)

キー削除のログ量+キー追加のログ量

d:キー値の重複数

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

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

a:次に示すどちらかを代入します。

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

(a) インデクスページスプリット時のインデクスログ量の見積もり

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

図16‒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回当たりのインデクスログ量の計算式を次の表に示します。

表16‒11 スプリット種別による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格納キー長のことです。キー長の求め方については,「インデクスの格納ページ数の計算方法」を参照してください。

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

n:スプリットが波及した上位ページの段数

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

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

表16‒12 ページ/セグメントの確保ログ量の計算式

条件

出力されるログ量

(単位:バイト)

データの追加(INSERT)又は更新(UPDATE)によって,行の格納ページを新しく確保する場合

440

データの追加(INSERT)又は更新(UPDATE)によって,インデクスのページスプリットが発生する場合

544×n+272

上記のページ確保に対して,セグメントの確保が発生する場合(セグメントサイズ数分のページ確保をするごとに発生します)

1940

n:ページスプリットが発生した時点のインデクスの段数+1

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

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

表16‒13 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

(5) ログレスモードの表データ更新時に出力されるシステムログ量の見積もり

ログレスモードの表データ更新時に出力されるシステムログ量は,次に示す計算式で求めます。

計算式
(a+b+c)×h×2
+((d+c)×156)
+((e+f)×148)
+m

a:更新対象表を格納するRDエリア数(個)

b:更新対象表のインデクスを格納するRDエリア数(個)

c:更新対象表のLOB列を格納するRDエリア数(個)

d:更新対象表数(個)

e:表データ更新による表の使用中セグメントの増加数:

↑(データ更新後の表の格納ページ数−データ更新前の表の格納ページ数)

 ÷更新対象表を格納するRDエリアのセグメントサイズ↑

f:表データ更新によるインデクスの使用中セグメントの増加数:

↑(データ更新後のインデクスの格納ページ数

 −データ更新前のインデクスの格納ページ数)

 ÷更新対象表のインデクスを格納するRDエリアのセグメントサイズ↑

h:↓pd_log_max_data_sizeオペランドの値/1000↓×1000

m:インナレプリカ機能を使用している環境の場合だけ,次の値を加算してください。

(a+b+c)×h