データベーススペース管理の勉強ノート
SQL Server のデータストレージの基本単位はページ (Page) です。ディスク I/O 操作はページ レベルで実行されます。
SQL Server がデータを読み書きする最小単位は、8 KB 単位のページです。
各ページの先頭は 96 B ヘッダーであり、ページに関するシステム情報を保存するために使用されます。ページ番号、ページ タイプ、ページ上の利用可能なスペース、およびページを所有するオブジェクトのアロケーション ユニット ID が含まれます。さまざまなタイプのデータがさまざまなタイプのページに保存されます。
通常のデータ ページでは、データ行はページのヘッダーの直後に連続して配置されます。ページの最後には、ページ内の各行に 1 つのエントリを含む行オフセット テーブルがあります。
各エントリは、対応する行の最初のバイトとページの先頭の間の距離を記録します。行オフセット テーブルのエントリは、ページ内の行の逆の順序になっています。
-----------------ここに Song Dashen のメモを挿入----------------------- -
ページヘッダーが占めるスペースと行オフセット行列が占めるスペースを除き、中央の残りのスペースはデータ行に使用されます。データ行には、データ行を表すために使用されるその他の情報もあります。具体的な構造は次のとおりです。 ステータス ビット A 1 バイト ステータス ビット B 1 バイトの固定長データ型の長さ 2 バイトの固定長データの内容 特定の数値固定長データバイト列の数 2 バイト NULL ビットマップ列番号/8 バイト 可変長列数 2 バイト可変長列のオフセット行列 可変長列数 * 2 バイト 可変長列 データ固有の可変長データバイトは少なくとも 1+1+2+2+1=7 を占めます
--------------------------- ------ ----------------------------------
指定したページを出力するには、次を使用できます: DBCC PAGE(< ;db_id>,
Db_id は、sp_helpdb の結果から取得できます。
File_idはsp_helpfileの結果から取得できます。
Format_id は、指定した出力形式です。
DBCC PAGE を実行する前に、トレース フラグ 3604 をオンにする必要もあります
SQL Server では、行をページにまたがることはできず、同じ行に属するすべてのフィールドのデータは同じページに配置する必要があります。 1 ページの最大データ サイズは 8,060 B (8 KB) です。
したがって、一般的なデータ型フィールドで構成される行の最大合計長は 8 KB を超えることはできません。
ただし、この制限には、テキスト/イメージ データ型フィールドのデータは含まれません。
これらのタイプのフィールドのデータは、LOB (LargeObject) ページに個別に保存されます。
SQL Server 2005 からは、varchar(max)、nvarchar(max)、varbinary(max) などのデータ型が提供されています。
このタイプのデータのフィールドを含む行の合計長が 8 KB を超えない場合でも、データは通常のデータ ページにまとめて保存されます。
合計の長さが 8 KB を超える場合、SQL Server はこれらのフィールドのデータを分離し、Row-Overflow と呼ばれるページに個別に保存します。
エクステントは、物理的に連続した 8 ページのコレクションであり、ページを効果的に管理するために使用されます。すべてのページはエクステントに保存されます。
• 単一のオブジェクトが所有する統合されたエリア。ゾーン内の 8 ページすべては 1 つのオブジェクトのみ使用できます。
• 最大 8 つのオブジェクトで共有される混合エリア。ゾーン内の 8 ページはそれぞれ、異なるオブジェクトによって所有されることができます。ただし、ページは常に 1 つのオブジェクトにのみ属することができます。
ページは通常、混合エクステントから新しいテーブルまたはインデックスに割り当てられます。テーブルまたはインデックスが 8 ページに増加すると、以降の割り当てには均一エクステントの使用に変更されます。
DBCC SHOWFILESTATS
このコマンドは、GAM や SGAM などのシステム割り当てページから領域割り当て情報を直接読み取り、データベース ファイルに割り当てられている領域の数を直接計算できます。 CSP_SPACEUSED (+ UpdateUSAGE は正確です)
Dbcc ShowContig データベーススペースのサイズを分析してみましょう。
ログ ファイルはページ/セクションごとに整理されていません。
データベース エンジンは内部で各物理ログ ファイルを複数の仮想ログ ユニットに分割します。仮想ログ ユニットには固定サイズがなく、物理ログ ファイルに含まれる仮想ログ ユニットの数も固定ではありません。
ログ ファイルが自動的に増大するたびに、少なくとも 1 つの仮想ログ ユニットが追加されます。
ログ ファイルに小さな自動増加が複数回発生した場合、その中の仮想ログ ユニットの数は通常のログ ファイルよりもはるかに大きくなります。
この状況は、ログ ファイル管理の効率に影響を与え、データベースに時間がかかるようになる場合もあります。
トランザクションログはラッパーファイルです。データベースが作成されると、論理ログ ファイルは物理ログ ファイルの先頭から始まります。
新しいログ レコードは論理ログの末尾に追加され、物理ログの末尾に向かって展開されます。
論理ログの終わりが物理ログ ファイルの終わりに達すると、新しいログ レコードは物理ログ ファイルの先頭に戻り、逆方向に書き込みを続けます。
DBCC SQLPERF(LOGSPACE) は、ログ ファイルの使用状況を確認できます。。
• ユーザー定義のテーブルとインデックス。
• システムテーブルとインデックス。
• グローバル一時テーブルとインデックス。
• ローカルの一時テーブルとインデックス。
• テーブル変数。
• テーブル値関数で返されるテーブル。
内部オブジェクト
• カーソルまたはスプール操作および一時的なラージ オブジェクト (LOB) ストレージに使用されるワークテーブル。
• ハッシュ結合またはハッシュ集約操作のための作業ファイル。
• インデックスの作成または再構築 (SORT_IN_TEMPDB が指定されている場合) などの操作の中間ソート結果、
、または特定の GROUP BY、ORDER BY、または UNION クエリの中間ソート結果に使用されます。
内部オブジェクトごとに少なくとも 9 ページを使用します (IAM ページが 1 つ、8 ページのエクステントが 1 つ)。
バージョンストア
• スナップショット分離レベルまたは読み取りコミット分離レベル(行バージョン管理に基づく)を使用して、データベース内のデータ変更トランザクションによって生成された行バージョン。
• オンライン インデックス操作、複数のアクティブな結果セット (MARS)、AFTER トリガーなどの機能のデータ変更トランザクションによって生成される行バージョン。
Tempdb スペース使用量の主な特徴は、sys.allocation_units や sys.partitions などの管理ビューを使用して管理できるのは、ユーザーが作成した一時テーブルやテーブル変数などの一部のオブジェクトだけであることです。
tempdb のスペース使用量は、sp_spaceused を使用して追跡できません。 (不正確)
sys.dm_db_file_space_usage このビューは、いくつかの主要なカテゴリにおける tempdb のスペース使用量の分布を反映できます。
ユーザー オブジェクト (user_object_reserved_page_count)、システム オブジェクト (internal_object_reserved_page_count)
、またはバージョン ストア (version_store_reserved_page_count) ですか。
上記はデータベーススペース管理の内容です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。