tempdb データベース
tempdb システム データベースは、SQL Serverのインスタンスに接続されているすべてのユーザーが使用できるグローバル リソースであり、以下を保持するために使用されます。
グローバルまたはローカルな一時テーブル、一時ストアド プロシージャ、テーブル変数、カーソルなど、明示的に作成された一時的なユーザー オブジェクト。
SQL Server データベース エンジンによって作成される内部オブジェクト (たとえば、スプールや並べ替えの中間結果を格納する作業テーブル)。
行のバージョン管理を伴う READ COMMITTED 分離トランザクションまたはスナップショット分離トランザクションを使用するデータベースで、データ変更トランザクションによって生成される行バージョン。
オンライン インデックス操作、複数のアクティブな結果セット (MARS)、AFTER トリガーなどの機能に対してデータ変更トランザクションによって生成される行バージョン。
tempdb 内の操作は、最低限必要な情報だけがログに記録されます。 これにより、トランザクションをロールバックできます。 tempdb は、SQL Serverが開始されるたびに再作成されるため、システムは常にデータベースのクリーンコピーで開始されます。 一時テーブルと一時ストアド プロシージャは、切断時に自動的に削除され、システムのシャットダウン時にアクティブな接続はありません。 そのため、tempdb には、SQL Serverのあるセッションから別のセッションに保存されるものはありません。 tempdb では、バックアップ操作と復元操作は許可されません。
tempdb の物理プロパティ
次の表は、 tempdb のデータ ファイルとログ ファイルの初期構成値の一覧です。 これらのファイルのサイズは、 SQL Serverのエディションによって多少異なる場合があります。
ファイル | 論理名 | 物理名 | ファイル拡張 |
---|---|---|---|
プライマリ データ | tempdev | tempdb.mdf | ディスクがいっぱいになるまで 10% 自動拡張する |
ログ | templog | templog.ldf | 自動拡張を 10% から最大 2 テラバイトに |
tempdb のサイズは、システムのパフォーマンスに影響を与える可能性があります。 たとえば、tempdb のサイズが小さすぎると、データベースの自動拡張によってシステム処理が占有されすぎて、SQL Serverを開始するたびにワークロード要件をサポートする可能性があります。 tempdb のサイズを大きくすることで、このオーバーヘッドを回避できます。
tempdb でのパフォーマンスの強化
SQL Serverでは、tempdb のパフォーマンスは次の方法で向上します。
一時テーブルとテーブル変数をキャッシュできます。 キャッシュを使用することで、一時オブジェクトを削除および作成する操作を非常に高速に実行でき、ページ割り当ての競合が減少します。
割り当てページ ラッチ プロトコルが強化されています。 これにより、使用される UP (更新) ラッチの数が減少します。
tempdb に対するログ記録のオーバーヘッドが削減されています。 これにより、 tempdb ログ ファイルでのディスク I/O 帯域幅の消費量が減少します。
tempdb で混合ページを割り当てるアルゴリズムが改善されました。
tempdb のデータ ファイルとログ ファイルの移動
tempdb データ ファイルとログ ファイルを移動するには、「システム データベースの移動」を参照してください。
データベース オプション
次の表に、 tempdb データベースの各データベース オプションの既定値と、オプションを変更できるかどうかを示します。 これらのオプションの現在の設定を表示するには、 sys.databases カタログ ビューを使用します。
データベース オプション | 既定値 | 変更可否 |
---|---|---|
ALLOW_SNAPSHOT_ISOLATION | OFF | はい |
ANSI_NULL_DEFAULT | OFF | はい |
ANSI_NULLS | OFF | はい |
ANSI_PADDING | OFF | はい |
ANSI_WARNINGS | OFF | はい |
ARITHABORT | OFF | はい |
AUTO_CLOSE | OFF | いいえ |
AUTO_CREATE_STATISTICS | ON | はい |
AUTO_SHRINK | OFF | いいえ |
AUTO_UPDATE_STATISTICS | ON | はい |
AUTO_UPDATE_STATISTICS_ASYNC | OFF | はい |
CHANGE_TRACKING | OFF | いいえ |
CONCAT_NULL_YIELDS_NULL | OFF | はい |
CURSOR_CLOSE_ON_COMMIT | OFF | はい |
CURSOR_DEFAULT | GLOBAL | はい |
データベース可用性オプション | ONLINE MULTI_USER READ_WRITE |
いいえ いいえ いいえ |
DATE_CORRELATION_OPTIMIZATION | OFF | はい |
DB_CHAINING | ON | いいえ |
ENCRYPTION | OFF | いいえ |
NUMERIC_ROUNDABORT | OFF | はい |
PAGE_VERIFY | SQL Serverの新規インストールの CHECKSUM。 SQL Serverのアップグレードの場合は NONE。 |
はい |
PARAMETERIZATION | SIMPLE | はい |
QUOTED_IDENTIFIER | OFF | はい |
READ_COMMITTED_SNAPSHOT | OFF | いいえ |
RECOVERY | SIMPLE | いいえ |
RECURSIVE_TRIGGERS | OFF | はい |
Service Broker のオプション | ENABLE_BROKER | はい |
TRUSTWORTHY | OFF | いいえ |
これらのデータベース オプションの説明は、「ALTER DATABASE の SET オプション (Transact-SQL)」を参照してください。
制限
tempdb データベースでは、次の操作を実行できません。
ファイル グループの追加。
データベースのバックアップまたは復元。
照合順序の変更。 既定の照合順序はサーバーの照合順序です。
データベース所有者の変更。 tempdb は sa によって所有されています。
データベース スナップショットの作成。
データベースの削除。
データベースからの guest ユーザーの削除。
変更データ キャプチャの有効化。
データベース ミラーリングへの参加。
プライマリ ファイル グループ、プライマリ データ ファイル、またはログ ファイルの削除。
データベース名またはプライマリ ファイル グループ名の変更。
DBCC CHECKALLOC の実行。
DBCC CHECKCATALOG の実行。
データベースの OFFLINE への設定。
データベースまたはプライマリ ファイル グループの READ_ONLY への設定。
アクセス許可
すべてのユーザーが tempdb 内に一時オブジェクトを作成できます。 ユーザーは追加の権限を付与されない限り、自分で作成したオブジェクトにしかアクセスできません。 ユーザーが tempdb を使用できないように tempdb への接続権限を取り消すことはできますが、一部のルーチン処理で tempdb を使用する必要があるためお勧めしません。
関連コンテンツ
sys.master_files (Transact-SQL)