tempdb データベース
tempdb システム データベースは、SQL Server のインスタンスに接続しているすべてのユーザーが使用できるグローバル リソースであり、以下のものを保持するために使用されます。
グローバルまたはローカルな一時テーブル、一時ストアド プロシージャ、テーブル変数、カーソルなど、明示的に作成された一時的なユーザー オブジェクト。
スプールまたは並べ替えのために中間結果を格納するための作業テーブルなど、SQL Server データベース エンジンが作成する内部オブジェクト。
行のバージョン管理を伴う READ COMMITTED 分離トランザクションまたはスナップショット分離トランザクションを使用するデータベースで、データ変更トランザクションによって生成される行バージョン。
オンライン インデックス操作、複数のアクティブな結果セット (MARS)、AFTER トリガーなどの機能に対してデータ変更トランザクションによって生成される行バージョン。
tempdb 内の操作は、最低限必要な情報だけがログに記録されます。これにより、トランザクションをロールバックできます。システムが常にデータベースのクリーンなコピーで起動されるように、SQL Server が起動されるたびに、tempdb が再作成されます。一時テーブルと一時ストアド プロシージャは、切断時に自動的に削除され、システムのシャットダウン時にアクティブな接続はありません。そのため、tempdb には、SQL Server のあるセッションから別のセッションに保存されるものは一切含まれません。tempdb では、バックアップ操作と復元操作は実行できません。
tempdb の物理プロパティ
次の表は、tempdb のデータ ファイルとログ ファイルの初期構成値の一覧です。これらのファイルのサイズは、SQL Server のエディションによって多少異なる場合があります。
ファイル |
論理名 |
物理名 |
ファイル拡張 |
---|---|---|---|
プライマリ データ |
tempdev |
tempdb.mdf |
ディスクがいっぱいになるまで 10% ずつ自動拡張 |
ログ |
templog |
templog.ldf |
最大 2 TB まで 10% ずつ自動拡張 |
tempdb のサイズは、システムのパフォーマンスに影響を及ぼすことがあります。たとえば、tempdb のサイズが小さすぎると、ワークロードの要件をサポートするために、SQL Server が起動されるたびに、システム処理の大部分がデータベースの自動拡張に費やされる可能性があります。このオーバーヘッドは、tempdb のサイズを増やすことで回避できます。詳細については、「tempdb のパフォーマンスの最適化」および「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 の所有者は dbo です。
データベース スナップショットの作成。
データベースの削除。
データベースからの guest ユーザーの削除。
変更データ キャプチャの有効化。
データベース ミラーリングへの参加。
プライマリ ファイル グループ、プライマリ データ ファイル、またはログ ファイルの削除。
データベース名またはプライマリ ファイル グループ名の変更。
DBCC CHECKALLOC の実行。
DBCC CHECKCATALOG の実行。
データベースの OFFLINE への設定。
データベースまたはプライマリ ファイル グループの READ_ONLY への設定。
権限
すべてのユーザーが tempdb 内に一時オブジェクトを作成できます。ユーザーは追加の権限を付与されない限り、自分で作成したオブジェクトにしかアクセスできません。ユーザーが tempdb を使用できないように tempdb への接続権限を取り消すことはできますが、一部のルーチン処理で tempdb を使用する必要があるためお勧めしません。