SQL ServerのSGAM&GAM&IAM&PFSに関するいくつかの質問


8

SQL Serverの内部構造についていくつか質問があります。

データベースにテーブルがあるとしましょう。

  1. SGAMおよびGAMページは、単一のGAM間隔(〜4GB)内で共有エクステントと均一エクステントを追跡し、ページ/エクステントを割り当てるときに適切なタイプのエクステントを見つけるのに役立ちます(最初の8ページは、混合エクステントとそれらのページの位置から割り当てられます) IAMページへのレコーダー、およびその後のGAMエクステント(均一エクステント)からのこの情報は、次のチェーンIAMページに格納されます)。

    たとえば、テーブルのページが割り当てられ、テーブルのサイズが8ページを超えていて、しばらくしてから行が削除され、再利用可能な領域が残ったとします。SQL Serverは、エクステントに空き領域があることをどのように認識しますか?

    ページには空き領域のサイズに関する情報がありますが、すべてのページをチェックするには時間がかかりすぎます。SGAM&GAMページのビットは、extendが割り当てられているか、いくつかの空きページがあることを除いて何も通知しません(ページ全体が部分的にではなく、空きです)。

  2. ファイルヘッダー、SGAM、GAM、IAMページは、ファイル内の最初のページに含まれます。実際にそれらを指すデータ構造は何ですか?

回答:


11

SQL Serverは、エクステントに空き領域があることをどのように認識しますか?

SQL Serverは、ページの空き領域、ヒープテーブル、およびPSFページを内部で使用するLOBページを追跡します。

また、あなたが使用することができますsys.dm_db_file_space_usage見つけるためにDMVをtotal_page_countallocated_extent_page_countだけでなく、unallocated_extent_page_countデータベース内。

ページ空き領域(PFS)ページは、各ページの割り当て状態、個々のページが割り当てられているかどうか、および各ページの空き領域の量を記録します。PFSはページごとに1バイトを持ち、ページが割り当てられているかどうか、割り当てられている場合は、1〜50%フル、51〜80%フル、81〜95%フル、または96〜100%フルであるかどうかを記録します。

PFSページは、データファイルのファイルヘッダーページ(ページ番号1)の後の最初のページです。この後にGAMページ(ページ番号2)が続き、次にSGAMページ(ページ3)が続きます。最初のPFSページの後に、サイズが約8,000ページのPFSページがあります。2ページ目の最初のGAMページの後に別のGAMページ64,000エクステントがあり、3ページの最初のSGAMページの後に別のSGAMページ64,000エクステントがあります。次の図は、エクステントの割り当てと管理にデータベースエンジンが使用する一連のページを示しています。

拡大するにはここをクリック -DBCC PAGEを使用した出力

ここに画像の説明を入力してください

参照:ストレージエンジンの内部:GAM、SGAM、PFSおよびその他の割り当てマップ

ファイルヘッダー、SGAM、GAM、IAMページは、ファイル内の最初のページに含まれます。実際にそれらを指すデータ構造は何ですか?

私はこの質問を受けません。ストレージの最小単位はページです。8つの8Kページがエクステントを形成します。データページの構成は次のとおりです

ここに画像の説明を入力してください

SQLSkills.comのブログを読むことを強くお勧めします。Paulと彼のチームは、SQL Serverの内部について多くのブログを公開しています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.