SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server の データページの領域管理に使用されているページ

leave a comment

基本的な情報は以下の URL に記載されています。
ページとエクステントのアーキテクチャ

Books Online を見ながら SQL Server のデータページの管理領域についてまとめてみたいと思います。
SQL Server のデータページを管理するためのページとして以下の領域があります。

– 管理ページの種類 –

  1. File Header Page
    そのファイルの属性に関する情報が格納されています
  2. PFS (Page Free Space)
    各ページの割り当て状態、個々のページが割り当て済みかどうか、および各ページの空き領域の量が記録されます。
    0%、1 ~ 50%、51 ~ 80%、81 ~ 95%、96 ~ 100% の 5 段階で示します
  3. GAM (Global Allocation Map)
    どのエクステントが既に割り当てられているかが記録されます。
    1 つの GAM で 64,000 のエクステント、つまり約 4 GB のデータが対象となります。
  4. SGAM (Shared Global Allocation Map)
    混合エクステントとして使用中であり、1 ページ以上が未使用であるエクステントが記録されます。
    1 つの SGAM で 64,000 のエクステント、つまり約 4 GB のデータが対象となります。
  5. DCM (Differential Changed Map)
    最後の BACKUP DATABASE ステートメント以降に変更されたエクステントが追跡されます。
    差分バックアップでは、DCM ページを読み取るだけで、変更されているエクステントを判断します。
  6. BCM (Bulk Changed Map)
    最後の BACKUP LOG ステートメント以降に、一括ログ記録操作によって変更されたエクステントが追跡されます。
    データベースで一括ログ復旧モデルを使用している場合にのみ使用します。
  7. IAM (Index Allocation Map)
    アロケーション ユニットが使用する 4 GB 分のデータベース ファイルのエクステントがマップされます。
  8. 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 コマンドを使用することでページの情報を取得することもできますので、
次はこのコマンドを紹介してみたいと思います。

Share

Written by Masayuki.Ozawa

11月 21st, 2009 at 8:24 am

Posted in SQL Server

Leave a Reply