基本的な情報は以下の URL に記載されています。
ページとエクステントのアーキテクチャ
Books Online を見ながら SQL Server のデータページの管理領域についてまとめてみたいと思います。
SQL Server のデータページを管理するためのページとして以下の領域があります。
– 管理ページの種類 –
- File Header Page
そのファイルの属性に関する情報が格納されています
- PFS (Page Free Space)
各ページの割り当て状態、個々のページが割り当て済みかどうか、および各ページの空き領域の量が記録されます。
0%、1 ~ 50%、51 ~ 80%、81 ~ 95%、96 ~ 100% の 5 段階で示します
- GAM (Global Allocation Map)
どのエクステントが既に割り当てられているかが記録されます。
1 つの GAM で 64,000 のエクステント、つまり約 4 GB のデータが対象となります。
- SGAM (Shared Global Allocation Map)
混合エクステントとして使用中であり、1 ページ以上が未使用であるエクステントが記録されます。
1 つの SGAM で 64,000 のエクステント、つまり約 4 GB のデータが対象となります。
- DCM (Differential Changed Map)
最後の BACKUP DATABASE ステートメント以降に変更されたエクステントが追跡されます。
差分バックアップでは、DCM ページを読み取るだけで、変更されているエクステントを判断します。
- BCM (Bulk Changed Map)
最後の BACKUP LOG ステートメント以降に、一括ログ記録操作によって変更されたエクステントが追跡されます。
データベースで一括ログ復旧モデルを使用している場合にのみ使用します。
- IAM (Index Allocation Map)
アロケーション ユニットが使用する 4 GB 分のデータベース ファイルのエクステントがマップされます。
- Boot Page
データベースの属性情報が格納されているデータベース ブート ページです。
SQL Server では上記のページを使用して使用済みのエクステント / 差分バックアップの取得対象
最小ログ操作時にトランザクションログのバックアップで取得されるエクステントが判断されます。
IAM が配置されるページ番号はランダムのようなのですが、他の管理領域に関してはページが決まっているようです。
# IAM はデータページの使用状況によって配置される場所が変わりますので。
ページ番号と種別をまとめると以下のようになります。
ページタイプは [DBCC PAGE] の実行結果の [m_type] の値です。
– ページの配置 –
ページ番号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
種別 | File Header Page |
PFS | GAM | SGAM | ? | ? | DCM | BCM | ? | Boot Page |
ページタイプ | 15 | 11 | 8 | 9 | ? | ? | 16 | 17 | ? | 13 |
?
上記は MDF (プライマリ データファイル) の場合のページの配置になります。
NDF (セカンダリ データファイル) の場合は、
ページ番号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
種別 | File Header Page |
PFS | GAM | SGAM | ? | ? | DCM | BCM |
ページタイプ | 15 | 11 | 8 | 9 | ? | ? | 16 | 17 |
?
となります。
NDF も基本的なページの配置は同じなのですが、[Boot Page] に関しては、プライマリデータファイルにしか存在していません。
ページの配置状況をみるのに便利なツールとして CodePlex の Internals Viewer というものがあります。
インストールも簡単にできますので、SQL Server のページ配置に関して興味があるかたはお試しください。
# SQL Server 2008 R2 November CTP の SSMS で試したらエラーになってしまいましたが、2005 / 2008 の SSMS で動作します。
DBCC PAGE という DBCC コマンドを使用することでページの情報を取得することもできますので、
次はこのコマンドを紹介してみたいと思います。