SQLServerシステムデータベースの紹介

1.基本的な紹介

1.1データベース構成

データベースのストレージ構造は、論理ストレージ構造と物理ストレージ構造に分けられます。

  • 論理ストレージ構造

データベースがどのような情報で構成されているかを説明します。SQL Serverのデータベースは、データの格納だけでなく、データ処理操作に関連するすべての情報がデータベースに格納されます。

  • 物理ストレージ構造

データベースはディスク上のファイル単位で保存され、データベースファイルとトランザクションログファイルで構成されます。データベースには、少なくとも1つのデータベースファイルと1つのトランザクションログファイルが含まれている必要があります。

SQL Serverデータベースシステムのデータベースファイルは、データファイルとログファイルで構成され、データファイルはエクステント単位でメモリに格納されます。

1.2データファイル

1.データファイル

データベースファイルとは、データベースデータとデータベースオブジェクトをデータベースに格納するために使用されるファイルのことです。データベースには1つ以上のデータベースファイルを含めることができ、データベースファイルは1つのデータベースにのみ属することができます。

複数のデータベースファイルがある場合、1つのファイルがメインデータファイルとして指定され、データベースの起動情報と一部またはすべてのデータを格納するために使用されます。データベースは1つのメインデータベースファイルのみを持つことができます。

データファイルは、さまざまなページと領域に分割されています。ページは、データを格納するためのSQLServerの基本単位です。

  • マスターデータファイル

データベースの開始点は、データベースファイルの他の部分を指します。各データベースには、拡張子が.mdfのメインデータファイルがあります。

  • 二次データファイル

メインデータベースファイルを除くすべてのデータファイルが含まれます。データベースには、拡張子が.ndfのセカンダリデータファイルまたは複数のセカンダリデータファイルを含めることはできません。

2.ログファイル

ログファイルには、ストレージデータベースの更新状況などのトランザクションログ情報が記録され、データベースの挿入、削除、更新などのユーザーの操作がログファイルに記録されます。データベースが破損している場合は、ログファイルに基づいてエラーの原因を分析できます。データが失われた場合は、トランザクションログを使用してデータベースを復元することもできます。各データベースには少なくとも1つのトランザクションログファイルが必要であり、複数のログファイルを使用できます。

1.35つのシステムデータベース

システムデータベース 説明 バックアップが必要ですか リカバリモード 注釈
主人 インスタンスのすべてのシステムレベルの情報を記録します はい シンプル マスターライブラリが利用できない場合、インスタンスを正常に起動できません
msdb エージェントのアラームとタスクのスケジューリング、操作記録、バックアップとリカバリの履歴 はい シンプル
モデル 他のすべてのデータベース作成に使用されるテンプレート はい シンプル(デフォルト) フルバックアップに設定することをお勧めします。モデルライブラリは小さく、変更されることはめったにないため、ログをバックアップする必要はありません。
資源 すべてのシステムオブジェクトを含む読み取り専用データベース 番号 - データベースを隠す
tempdb 一時的または中間の結果セットを保存するために使用されます はい シンプル Tempdbは、インスタンスが再起動されるたびに再構築されます

第二に、マスターデータベース

2.1基本情報

マスターデータベースは、次のようなすべてのシステムレベルの情報をSQLServerに記録します。

  • ログインアカウント情報、リンクサーバー、システム構成設定など。
  • 他のデータベースのメタ情報(データベース内のすべてのファイルの位置情報など)
  • SQLServerの初期化情報

マスターデータベースの物理ストレージ情報:

ファイル 論理名 物理名 ファイルの増加
主なデータ 主人 master.mdf ディスクがいっぱいになるまで、10%の割合で自動的に増加します。
ログ マストログ mastlog.ldf 10%の割合で最大2TBまで自動的に増加します。

2.2制限

マスターデータベースでは、次の操作は実行できません。

  • ファイルまたはファイルグループを追加します。
  • 並べ替えルールを変更します。デフォルトの並べ替えルールはサーバーの並べ替えルールです。
  • データベースの所有者を変更します。マスターの所有者はsaです。
  • フルテキストカタログまたはフルテキストインデックスを作成します。
  • データベースのシステムテーブルにトリガーを作成します。
  • データベースを削除します。
  • データベースからゲストユーザーを削除します。
  • 変更データのキャプチャを有効にします。
  • データベースミラーリングに参加します。
  • メインファイルグループ、メインデータファイル、またはログファイルを削除します。
  • データベースまたはメインファイルグループの名前を変更します。
  • データベースをOFFLINEに設定します。
  • データベースまたはメインファイルグループをREAD_ONLYに設定します。

2.3使用に関する推奨事項

  • 使用可能なマスターデータベースの現在のバックアップは常にあります。

  • 次の操作を実行した後、できるだけ早くマスターデータベースをバックアップしてください。

    データベースの作成、変更、または削除
    サーバーまたはデータベースの構成値の
    変更ログインアカウントの変更または追加

  • マスターでユーザーオブジェクトを作成しないでください。それ以外の場合は、マスターをより頻繁にバックアップする必要があります。

  • マスターデータベースのTRUSTWORTHYオプションをONに設定しないでください。

3、msdbデータベース

3.1基本情報

msdbデータベースは、SQL Serverエージェントの実行に関する情報を提供します。これには、主にいくつかのアラームと、バックアップおよびリカバリイベントログなどの毎日スケジュールされたタスクのスケジューリングに関する情報が含まれます。

デフォルトでは、msdbデータベースで使用されるリカバリモードはシンプルモードです。バックアップを使用して履歴テーブルを復元する必要がある場合は、データベースのリカバリモードをフルモードに設定することをお勧めします。SQL Serverが最初にインストール/アップグレードまたは再構築されるとき、msdbのリカバリモードはデフォルトでシンプルモードに設定されることに注意してください。

msdbデータベースの物理ストレージ情報:

ファイル 論理名 物理名 ファイルの増加
主なデータ MSDBData MSDBData.mdf ディスクがいっぱいになるまで、10%の割合で自動的に増加します。
ログ MSDBLog MSDBLog.ldf 10%の割合で最大2TBまで自動的に増加します。

3.2制限

次の操作は、msdbデータベースでは実行できません。

  • 並べ替えルールを変更します。デフォルトの並べ替えルールはサーバーの並べ替えルールです。
  • データベースを削除します。
  • データベースからゲストユーザーを削除します。
  • 変更データのキャプチャを有効にします。
  • データベースミラーリングに参加します。
  • メインファイルグループ、メインデータファイル、またはログファイルを削除します。
  • データベースまたはメインファイルグループの名前を変更します。
  • データベースをOFFLINEに設定します。
  • メインファイルグループをREAD_ONLYに設定します。

4、モデルデータベース

4.1基本情報

モデルデータベースは、主にすべてのデータベースを作成するときに使用されるテンプレートです。新しいデータベースが作成されると、SQL Serverは最初にデータベースオプションを含むモデルデータベースのコンテンツ全体をコピーし、データベースでの後続の操作は残りの空白ページを埋め続けます。

モデルデータベースの構成を変更すると、インスタンス全体のデータベース作成に影響します。SQL Serverでは、モデルデータベースは他のデータベースによって常に使用される可能性があるため、データベースを削除することはできず、永久に存在する必要があります。

モデルデータベースの物理ストレージ情報:

ファイル 論理名 物理名 ファイルの増加
主なデータ モデルハウス model.mdf ディスクがいっぱいになるまで、64MBの速度で自動的に増加します。
ログ モデル modellog.ldf 64MBの速度で最大2TBまで自動的に増加します。

4.2制限

モデルデータベースでは、次の操作は実行できません。

  • ファイルまたはファイルグループを追加します。
  • 並べ替えルールを変更します。デフォルトの並べ替えルールはサーバーの並べ替えルールです。
  • データベースの所有者を変更します。モデルの所有者はsaです。
  • データベースを削除します。
  • データベースからゲストユーザーを削除します。
  • 変更データのキャプチャを有効にします。
  • データベースミラーリングに参加します。
  • メインファイルグループ、メインデータファイル、またはログファイルを削除します。
  • データベースまたはメインファイルグループの名前を変更します。
  • データベースをOFFLINEに設定します。
  • メインファイルグループをREAD_ONLYに設定します。
  • WITH ENCRYPTIONオプションを使用して、プロシージャ、ビュー、またはトリガーを作成します。暗号化キーは、オブジェクトが作成されたデータベースにバインドされています。モデルデータベースで作成された暗号化されたオブジェクトは、モデルでのみ使用できます。

5、リソースデータベース

5.1基本情報

リソースライブラリは、SQL Serverのすべてのシステムオブジェクト(sys.objectsなど)を記録する非表示のライブラリです。情報は実際にはリソースライブラリに物理的に格納されますが、論理的には各データベースのsysアーキテクチャに表示されます。データベースは読み取り専用ライブラリであるため、一部のユーザー情報(マスターライブラリに格納されている)は格納できません。

リソースライブラリのバージョンアップグレードは比較的簡単です。アップグレードを完了するには、対応するバージョンのリソースデータベースファイルをローカルサーバーにコピーするだけで済みます。

5.2リソースライブラリ関連のコマンド

1.リソースライブラリのバージョン情報を表示します

SELECT SERVERPROPERTY('ResourceVersion');  
GO

2.リソースライブラリの最終アップグレード時刻を表示します

SELECT SERVERPROPERTY('ResourceLastUpdateDateTime');  
GO

6、tempdbデータベース

6.1基本概念

tempdbデータベースは、SQLServerデータベースに接続するすべてのユーザーが使用できるグローバルリソースです。主に次の側面で使用されます。

  • 明示的に作成された一時ユーザーオブジェクト

グローバルまたはローカルの一時テーブル/インデックス、一時ストアドプロシージャ、テーブル変数、テーブル、またはテーブル値関数から返されるカーソルなど。

  • データベースエンジンによって作成された内部オブジェクト

スプール、カーソル、一時的なラージオブジェクトストレージ

ハッシュ結合またはハッシュ集約操作用の一時ファイル

インデックス操作の作成または再構築、グループ化、内部ソート結果による順序付け、

  • バージョンストレージ

RC分離レベルおよびスナップショット分離レベルでのデータ変更によるマルチバージョンデータレコード

オンラインインデックス作成操作、複数のアクティブな結果セット(MARS)、およびAFTERトリガー操作によって生成されたマルチバージョンデータレコード

トランザクションをロールバックできるように、tempdbに対するすべての操作もログに記録されます。Tempdbは、インスタンスが再起動されるたびに再構築されます。セッションスレッドごとに、セッションリンクが切断されると、それが保持している一時テーブル、一時ストアドプロシージャなどが自動的に削除されます。tempdbデータベースをバックアップおよび復元する必要がないのは、まさにこの機能のためです。

すべてのユーザーはtempDBライブラリに一時オブジェクトを作成でき、ユーザーはさらにアクセス許可を取得しない限り、自分のオブジェクトにのみアクセスできます。

モデルデータベースの物理ストレージ情報:

ファイル 論理名 物理名 初期サイズ ファイルの増加
主なデータ tempdev tempdb.mdf 8 MB ディスクがいっぱいになるまで、64MBの速度で自動的に拡張します
二次データファイル* temp# tempdb_mssql _#。ndf 8 MB ディスクがいっぱいになるまで、64MBの速度で自動的に拡張します
ログ templog templog.ldf 8 MB 2 TBの上限に達するまで、64MBの速度で自動的に拡張します

6.2制限

次の操作は、TempDBデータベースでは実行できません。

  • ファイルグループを追加
  • データベースのバックアップまたは復元
  • 並べ替えルールを変更します。デフォルトの照合順序はサーバー照合順序です
  • データベースの所有者を変更します。TempDBの所有者はsaです
  • データベーススナップショットを作成する
  • データベースを削除する
  • データベースからゲストユーザーを削除します
  • 変更データのキャプチャを有効にする
  • データベースミラーリングに参加する
  • メインファイルグループ、メインデータファイルまたはログファイルを削除します
  • データベースまたはメインファイルグループの名前を変更します
  • DBCCCHECKALLOCを実行します
  • DBCCCHECKCATALOGを実行します
  • データベースをオフラインに設定します
  • データベースまたはメインファイルグループをREAD_ONLYに設定します

6.3tempdbライブラリ関連のコマンド

1.現在のtempdbライブラリのサイズと拡張パラメータを確認します

1)tempdbデータベースの設定が小さすぎることはできません。パラメーターの設定が小さすぎると、インスタンスが開始されるたびに、現在必要なサイズに達するまでtempdbを拡張するために追加のコンピューティングリソースが消費されます。

2)tempdbライブラリのデータファイルは、tempdbスペースの偶発的な不足を回避するために自動的に大きくなるように設定する必要があります

3)tempdbの各ファイルグループのデータファイルサイズは同じに保つ必要があります。SQLServerは、比例充填アルゴリズムを使用して、並列効率を効果的に向上させます。

4)TempDBデータベースファイルの増分が小さすぎないように、ファイルの増分を適切なサイズに設定します。tempDBに書き込まれるデータの量と比較してファイルの増分が小さすぎる場合、tempDBを継続的に拡張する必要があり、パフォーマンスに影響を与える可能性があります。

SELECT name AS FileName,
    size*1.0/128 AS FileSizeInMB,
    CASE max_size
        WHEN 0 THEN 'Autogrowth is off.'
        WHEN -1 THEN 'Autogrowth is on.'
        ELSE 'Log file grows to a maximum size of 2 TB.'
    END,
    growth AS 'GrowthValue',
    'GrowthIncrement' =
        CASE
            WHEN growth = 0 THEN 'Size is fixed.'
            WHEN growth > 0 AND is_percent_growth = 0
                THEN 'Growth value is in 8-KB pages.'
            ELSE 'Growth value is a percentage.'
        END
FROM tempdb.sys.database_files;
GO

2.tempdbスペース使用量の監視

1)tempdbスペース使用量の監視

-- Determining the Amount of Free Space in TempDB
SELECT SUM(unallocated_extent_page_count) AS [free pages],
  (SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;

-- Determining the Amount Space Used by the Version Store
SELECT SUM(version_store_reserved_page_count) AS [version store pages used],
  (SUM(version_store_reserved_page_count)*1.0/128) AS [version store space in MB]
FROM sys.dm_db_file_space_usage;

-- Determining the Amount of Space Used by Internal Objects
SELECT SUM(internal_object_reserved_page_count) AS [internal object pages used],
  (SUM(internal_object_reserved_page_count)*1.0/128) AS [internal object space in MB]
FROM sys.dm_db_file_space_usage;

-- Determining the Amount of Space Used by User Objects
SELECT SUM(user_object_reserved_page_count) AS [user object pages used],
  (SUM(user_object_reserved_page_count)*1.0/128) AS [user object space in MB]
FROM sys.dm_db_file_space_usage;

2)現在のセッションまたはタスクのtempdbスペースの占有を監視します

-- Obtaining the space consumed by internal objects in all currently running tasks in each session
SELECT session_id,
  SUM(internal_objects_alloc_page_count) AS task_internal_objects_alloc_page_count,
  SUM(internal_objects_dealloc_page_count) AS task_internal_objects_dealloc_page_count
FROM sys.dm_db_task_space_usage
GROUP BY session_id;

-- Obtaining the space consumed by internal objects in the current session for both running and completed tasks
SELECT R2.session_id,
  R1.internal_objects_alloc_page_count
  + SUM(R2.internal_objects_alloc_page_count) AS session_internal_objects_alloc_page_count,
  R1.internal_objects_dealloc_page_count
  + SUM(R2.internal_objects_dealloc_page_count) AS session_internal_objects_dealloc_page_count
FROM sys.dm_db_session_space_usage AS R1
INNER JOIN sys.dm_db_task_space_usage AS R2 ON R1.session_id = R2.session_id
GROUP BY R2.session_id, R1.internal_objects_alloc_page_count,
  R1.internal_objects_dealloc_page_count;;

記事の参照:

 https://www.cnblogs.com/libingql/p/4078728.html
 https://docs.microsoft.com/zh-cn/sql/relational-databases/databases/system-databases?view=sql-server-ver15

おすすめ

転載: blog.csdn.net/weixin_37692493/article/details/107306767