ホームページ  >  記事  >  データベース  >  データベーススペース管理

データベーススペース管理

黄舟
黄舟オリジナル
2016-12-15 15:54:23952ブラウズ

データベーススペース管理の勉強ノート

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) は、ログ ファイルの使用状況を確認できます。


Tempdb システム データベースは、SQL Server のインスタンスに接続しているすべてのユーザーが利用できるグローバル リソースです。SQL Server2005 では、次のものを保存するために使用されます:

ユーザー オブジェクト

• ユーザー定義のテーブルとインデックス。

• システムテーブルとインデックス。

• グローバル一時テーブルとインデックス。

• ローカルの一時テーブルとインデックス。

• テーブル変数。

• テーブル値関数で返されるテーブル。


内部オブジェクト

• カーソルまたはスプール操作および一時的なラージ オブジェクト (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_pa​​ge_count)、システム オブジェクト (internal_object_reserved_pa​​ge_count)

、またはバージョン ストア (version_store_reserved_pa​​ge_count) ですか。

上記はデータベーススペース管理の内容です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。