Yet another OSS DB:Firebird(3)

仕組みを「見える化」してみた

Firebird日本ユーザー会
アナハイムテクノロジー
はやしつとむ
2009/2/19
 

PageType=8:Blobデータページ(Blob Page)

 PageType=8は、Blobデータページです。小さなBlobはデータページに格納されますが、データページに収まらない大きなBlobは、一連のBlobページに格納されます。

 Blobデータページのヘッダの追加情報としては、このBlobが格納されている最初のページ番号、このBlobが格納されているBlobページのリスト中でこのページが何番目かを示すシーケンス、このページ上に格納されているデータのbyte数、その次はBlobをロングワード境界で開始する(その方が効率良く処理できる)ためのワードのPAD(つまり穴埋め)、となります。

 Blobデータページの残りは、単一のBlobのためのデータとなります。

●Blobデータページ


PageType=9:ジェネレータページ(Generator Page)

 PageType=9はジェネレータページです。

 ジェネレータページのヘッダには追加の情報は特にありませんが、いくつかの「ゴミ」が残っています。というのも、もともとジェネレータページはポインタページを流用していて、独自のタイプを持っていなかったのです。それがジェネレータが32bitから64bitに拡張されたときに、別のタイプを作らなくてはいけなくなったものの、ヘッダサイズを変更してしまうと古いデータベースとの非互換性が生じてしまうため、そのままになってしまったというわけです。

 いつか直さなくてはいけないということになっていますが、取りあえずシーケンス番号だけは追加されています。

 ジェネレータページには、64bitの整数の配列が格納されていて、各要素は各ジェネレータの現在の値を保持しています。

●ジェネレータページ
 

最後に

 以上、Firebirdのデータベースファイルの内部構造について、詳しく見てきました。データベースの管理上必要なもの、パフォーマンスを上げるために必要なもの、いろいろな要素がここから見えてくるかと思います。また、時々発生する「データベースファイルが壊れた!」というようなアクシデントの際にも、どこで何が起きているのかが分かると問題の把握に役立つかもしれません。

前のページへ 4/4

Index
仕組みを「見える化」してみた

Page 1
・はじめに
 VisualODSの使い方
 ISQLでサンプルデータベースを作成

Page 2
 PageType=2:ページインベントリページ(Page Inventory Page)
 PageType=3:トランザクションインベントリページ(Transaction Inventory Page)

Page 3
 PageType=4:ポインタページ(Pointer Page)
 PageType=5:データページ(Data Page)
 PageType=6:インデックスルートページ(Index Root Page)
 PageType=7:インデックスページ(Index<B-tree> Page)
→ Page 4
 PageType=8:Blobデータページ(Blob Page)
 PageType=9:ジェネレータページ(Generator Page)
・最後に
Yet another OSS DB:Firebird


Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間