REDOログに関する検証 その6

投稿日: 2001年8月08日

< REDOログに関する検証 その6 > ペンネーム つけまい

— 内部構造を理解し
パフォーマンスの向上に役立てる —

前回は、DUMPコマンドを用いて、実際のREDOログ・ファイルの中身を覗いてみ
た。

今回は、DUMP中の重要な部分について、もう少し詳しく解説を行う。

************** DUMPの解説 ***************

REDOログ・ファイルのDUMP

上記のDUMPは、以下のトランザクション処理部分のみのDUMPデータを抜粋した
ものである。

———- SQL文 ———-

DESC WORK03

名前                            NULL?    タイプ
------------------------------- -------- ----
EMPNO                                    NUMBER(4)
ENAME                                    VARCHAR2(6)
ADDRESS                                  VARCHAR2(12)
JOB                                      VARCHAR2(8)
MGR                                      NUMBER(4)
SAL                                      NUMBER(7)
COMM                                     NUMBER(7)
DEPTNO                                   NUMBER(2)

※ EMPNOにはインデックスは作成していない

UPDATE WORK03
SET ENAME = 'haneda'
WHERE EMPNO = 1001 ;

1行が更新されました。

COMMIT ;

コミットが完了しました。

上記のトランザクションを実行すると、以下の1~4に対する変更を記録した
4つのチェンジベクターが生成される。

1.ロールバックセグメントのトランザクション表
    (ロールバックセグメントのセグメントヘッダー内に存在している)

2.ロールバックセグメントのデータブロック

3.テーブルWORK03のブロック

4.コミット情報

それでは、各チェンジベクターが、それぞれどのような関連を持っているのか
を見てみよう。

———————————————————————-

・行3のDBAは、トランザクション表が存在するディスク上の位置を指したアド
  レスである。

・行5のubaは、ロールバックセグメントのデータブロックが存在するアドレス
  である。したがって、行6のロールバックセグメントのデータブロックが存在
  するアドレスDBAと同じはずである。

・行18のbdba及びhdbaは、テーブルWORK03のデータブロック及びヘッダーブロッ
  クが存在するアドレスである。したがって、行27のテーブルWORK03のデータ
  ブロック及びヘッダーブロックが存在するアドレスbdba及びhdbaと同じはず
  である。

・行20、29のslotは、ブロック中の何レコード目に存在するかを表したもので
  ある。したがって、これらの値は同じはずである。このトランザクションの
  EMPNO=1001は、テーブルWORK03中の1レコード目に存在するので、ここには0
  が入っている(5レコード目は4)。

・行21、30のsizeは、更新前と更新後のデータ長の差分を表したものである。
  このトランザクションは、ENAMEをnaritaからhanedaに変更しており、データ
  長は共に6バイトなので、それぞれに0が入っている。もし仮に、6バイトから
  5バイトに変更した場合、行21には1が入り、行30には-1が入ることになる。

・行22、31のcolは、テーブル中の何カラム目かを表したものである。したがっ
  て、これらの値は同じはずである。項目ENAMEは、テーブルWORK03中の2番目
  に位置するので、ここには1が入る。

・行22、31の[ 6 ]は、実際に格納されるデータのバイト長を表したものである。

・行22、31の【6e 61 72 69 74 61】及び【68 61 6e 65 64 61】は、実際に格
  納されるデータをキャラクタコードで表したものである。
  行22の【6e 61 72 69 74 61】は、更新前の旧データであるnaritaを、
  行31の【68 61 6e 65 64 61】は、更新後の新データであるhanedaをそれぞれ
  意味している。

・行23のDBAは、テーブルWORK03中の、トランザクションの対象となるデータが
  格納されているブロックのアドレスである。したがって、行18、27のbdbaと
  同じはずである。

・行26のubaは、トランザクションのUNDOデータが格納されているブロックのア
  ドレスである。したがって、行6のDBAと同じはずである。

・行35のDBAは、コミット情報をトランザクション表に書き出した際のアドレス
  である。したがって、行3のDBAと同じはずである。

・行37のubaは、コミットの対象となるロールバックセグメントのデータブロッ
  クが存在するアドレスである。したがって、行6のDBAと同じはずである。

この辺の情報は、Oracle8iからの新機能であるログマイナーの方が見やすいだろう。
ログマイナーに関しては、別の機会で検証する予定である。

次回は、REDOログに関する統計情報についての解説を行う。

以上 猛暑も一休みの茅ヶ崎にて