tempdb データベースtempdb Database

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

tempdb システム データベースは、SQL ServerSQL Server のインスタンスまたは SQL Database に接続しているすべてのユーザーが使用できるグローバル リソースです。The tempdb system database is a global resource that is available to all users connected to the instance of SQL ServerSQL Server or connected to SQL Database. Tempdb で保持するもの:Tempdb is used to hold:

  • グローバルまたはローカルな一時テーブルおよびインデックス、一時ストアド プロシージャ、テーブル変数、テーブル値関数で返されるテーブル、カーソルなど、明示的に作成された一時的なユーザー オブジェクトTemporary user objects that are explicitly created, such as: global or local temporary tables and indexes, temporary stored procedures, table variables, Tables returned in table-valued functions, or cursors.

  • データベース エンジンによって作成された内部オブジェクトInternal objects that are created by the database engine. たとえば、次のオブジェクトにアクセスできます。These include:

    • スプール、カーソル、並べ替え、および一時的なラージ オブジェクト (LOB) 記憶域の中間結果を格納する作業テーブル。Work tables to store intermediate results for spools, cursors, sorts, and temporary large object (LOB) storage.
    • ハッシュ結合操作またはハッシュ集計操作用の作業ファイルWork files for hash join or hash aggregate operations.
    • インデックスの作成または再構築などの操作 (SORT_IN_TEMPDB を指定した場合) や、GROUP BY、ORDER BY、または UNION クエリにおける並べ替えの中間結果Intermediate sort results for operations such as creating or rebuilding indexes (if SORT_IN_TEMPDB is specified), or certain GROUP BY, ORDER BY, or UNION queries.

    注意

    各内部オブジェクトでは、少なくとも 9 つのページが使用されます (IAM ページと 8 ページ分のエクステント)。Each internal object uses a minimum of nine pages; an IAM page and an eight-page extent. ページとエクステントの詳細については、「ページとエクステント」を参照してください。For more information about pages and extents, see Pages and Extents.

    重要

    Azure SQL Database 単一データベースおよびエラスティック プールは、tempdb に保存され、データベース レベルまで調べられるグローバル一時テーブルとグローバル一時ストアド プロシージャをサポートしています。Azure SQL Database single databases and elastic pools support global temporary tables and global temporary stored procedures that are stored in tempdb and are scoped to the database level. グローバル一時テーブルとグローバル一時ストアド プロシージャは、同じ Azure SQL データベース内ですべてのユーザーのセッションで共有されます。Global temporary tables and global temporary stored procedures are shared for all users' sessions within the same Azure SQL database. 他の Azure SQL データベースからのユーザー セッションは、グローバル一時テーブルにアクセスできません。User sessions from other Azure SQL databases cannot access global temporary tables. 詳細については、「Database scoped global temporary tables (Azure SQL Database)」(データベース スコープ グローバル一時テーブル (Azure SQL Database)) を参照してください。For more information, see Database scoped global temporary tables (Azure SQL Database). Azure SQL Database Managed Instance) では、SQL Server と同じ一時オブジェクトがサポートされます。Azure SQL Database Managed Instance) supports the same temporary objects as does SQL Server. Azure SQL Database 単一データベースおよびエラスティック プールでは、master データベースと tempdb データベースのみが適用されます。For Azure SQL Database single databases and elastic pools, only master database and tempdb database apply. 詳しくは、「Azure SQL Database サーバーとは」をご覧ください。For more information, see What is an Azure SQL Database server. Azure SQL Database 単一データベースおよびエラスティック プールのコンテキストでの tempdb の説明については、Azure SQL Database 単一データベースおよびエラスティック プール内の tempdb データベースに関するページをご覧ください。For a discussion of tempdb in the context of Azure SQL Database single databases and elastic pools, see tempdb Database in Azure SQL Database single databases and elastic pools. Azure SQL Database Managed Instance の場合、すべてのシステム データベースが適用されます。For Azure SQL Database Managed Instance, all system databases apply.

  • バージョン ストア。これは行のバージョン管理を使用する機能のサポートに必要なデータ行を保持するデータ ページのコレクションです。Version stores, which are a collection of data pages that hold the data rows that are required to support the features that use row versioning. 共通バージョン ストアとオンライン インデックス構築用のバージョン ストアの 2 つのバージョン ストアがあります。There are two version stores: a common version store and an online-index-build version store. バージョン ストアに保持される内容:The version stores contain:

    • 行のバージョン管理を伴う READ COMMITTED 分離トランザクションまたはスナップショット分離トランザクションを使用するデータベースで、データ変更トランザクションによって生成される行バージョン。Row versions that are generated by data modification transactions in a database that uses read-committed using row versioning isolation or snapshot isolation transactions.
    • オンライン インデックス操作、複数のアクティブな結果セット (MARS)、AFTER トリガーなどの機能に対してデータ変更トランザクションによって生成される行バージョン。Row versions that are generated by data modification transactions for features, such as: online index operations, Multiple Active Result Sets (MARS), and AFTER triggers.

トランザクションをロールバックできるように、tempdb のログ記録は最小限に抑えられます。Operations within tempdb are minimally logged so that transactions can be rolled back. tempdbSQL ServerSQL Server が起動されるたびに再作成され、システムが常にデータベースのクリーンなコピーで起動されるようにします。tempdb is re-created every time SQL ServerSQL Server is started so that the system always starts with a clean copy of the database. 一時テーブルと一時ストアド プロシージャは、切断時に自動的に削除され、システムのシャットダウン時にアクティブな接続はありません。Temporary tables and stored procedures are dropped automatically on disconnect, and no connections are active when the system is shut down. そのため、 tempdb には、 SQL ServerSQL Server のあるセッションから別のセッションに保存されるものは一切含まれません。Therefore, there is never anything in tempdb to be saved from one session of SQL ServerSQL Server to another. tempdbでは、バックアップ操作と復元操作は実行できません。Backup and restore operations are not allowed on tempdb.

SQL Server の tempdb の物理プロパティPhysical Properties of tempdb in SQL Server

次の表は、SQL Server の tempdb のデータ ファイルとログ ファイルの初期構成値 (Model データベースの既定値に基づく) の一覧です。The following table lists the initial configuration values of the tempdb data and log files in SQL Server, which are based on the defaults for the Model database. これらのファイルのサイズは、 SQL ServerSQL Serverのエディションによって多少異なる場合があります。The sizes of these files may vary slightly for different editions of SQL ServerSQL Server.

ファイルFile 論理名Logical name 物理名Physical name 初期サイズInitial size ファイル拡張File growth
プライマリ データPrimary data tempdevtempdev tempdb.mdftempdb.mdf 8 MB8 megabytes ディスクがいっぱいになるまで 64 MB ずつ自動拡張Autogrow by 64 MB until the disk is full
セカンダリ データ ファイル*Secondary data files* temp#temp# tempdb_mssql_#.ndftempdb_mssql_#.ndf 8 MB8 megabytes ディスクがいっぱいになるまで 64 MB ずつ自動拡張Autogrow by 64 MB until the disk is full
LogLog templogtemplog templog.ldftemplog.ldf 8 MB8 megabytes 最大 2 TB まで 64 MB ずつ自動拡張Autogrow by 64 megabytes to a maximum of 2 terabytes

* コンピューター上の (論理) プロセッサの数に依存するファイル数です。* The number of files depends on the number of (logical) processors on the machine. 一般的なルールとして、論理プロセッサの数が 8 以下の場合、論理プロセッサと同じ数のデータ ファイルを使用します。As a general rule, if the number of logical processors is less than or equal to eight, use the same number of data files as logical processors. 論理プロセッサの数が 8 より大きい場合、8 つのデータ ファイルを使用し、競合が続く場合、競合が許容できるレベルに減少するまでデータ ファイルの数を 4 の倍数分ずつ増やすか、ワークロード/コードを変更します。If the number of logical processors is greater than eight, use eight data files and then if contention continues, increase the number of data files by multiples of 4 until the contention is reduced to acceptable levels or make changes to the workload/code.

注意

データ ファイルの数の既定値は、 KB 2154845の一般的なガイドラインに基づいています。The default value for the number of data files is based on the general guidelines in KB 2154845.

SQL Server の tempdb のデータ ファイルとログ ファイルの移動Moving the tempdb data and log files in SQL Server

tempdb データ ファイルとログ ファイルを移動するには、「 システム データベースの移動」を参照してください。To move the tempdb data and log files, see Move System Databases.

SQL Server の tempdb のデータベース オプションDatabase Options for tempdb in SQL Server

tempdb データベースの各データベース オプションの既定値とそのオプションを変更できるかどうかを次の表に示します。The following table lists the default value for each database option in the tempdb database and whether the option can be modified. これらのオプションの現在の設定を表示するには、 sys.databases カタログ ビューを使用します。To view the current settings for these options, use the sys.databases catalog view.

データベース オプションDatabase option 既定値Default value 変更可否Can be modified
ALLOW_SNAPSHOT_ISOLATIONALLOW_SNAPSHOT_ISOLATION OFFOFF はいYes
ANSI_NULL_DEFAULTANSI_NULL_DEFAULT OFFOFF はいYes
ANSI_NULLSANSI_NULLS OFFOFF はいYes
ANSI_PADDINGANSI_PADDING OFFOFF はいYes
ANSI_WARNINGSANSI_WARNINGS OFFOFF はいYes
ARITHABORTARITHABORT OFFOFF はいYes
AUTO_CLOSEAUTO_CLOSE OFFOFF いいえNo
AUTO_CREATE_STATISTICSAUTO_CREATE_STATISTICS ONON はいYes
AUTO_SHRINKAUTO_SHRINK OFFOFF いいえNo
AUTO_UPDATE_STATISTICSAUTO_UPDATE_STATISTICS ONON はいYes
AUTO_UPDATE_STATISTICS_ASYNCAUTO_UPDATE_STATISTICS_ASYNC OFFOFF はいYes
CHANGE_TRACKINGCHANGE_TRACKING OFFOFF いいえNo
CONCAT_NULL_YIELDS_NULLCONCAT_NULL_YIELDS_NULL OFFOFF はいYes
CURSOR_CLOSE_ON_COMMITCURSOR_CLOSE_ON_COMMIT OFFOFF はいYes
CURSOR_DEFAULTCURSOR_DEFAULT GLOBALGLOBAL はいYes
データベース可用性オプションDatabase Availability Options ONLINEONLINE

MULTI_USERMULTI_USER

READ_WRITEREAD_WRITE
いいえNo

いいえNo

いいえNo
DATE_CORRELATION_OPTIMIZATIONDATE_CORRELATION_OPTIMIZATION OFFOFF はいYes
DB_CHAININGDB_CHAINING ONON いいえNo
ENCRYPTIONENCRYPTION OFFOFF いいえNo
MIXED_PAGE_ALLOCATIONMIXED_PAGE_ALLOCATION OFFOFF いいえNo
NUMERIC_ROUNDABORTNUMERIC_ROUNDABORT OFFOFF はいYes
PAGE_VERIFYPAGE_VERIFY SQL ServerSQL Serverの新規インストールの場合は CHECKSUMCHECKSUM for new installations of SQL ServerSQL Server.

SQL ServerSQL Serverのアップグレードの場合は NONENONE for upgrades of SQL ServerSQL Server.
はいYes
PARAMETERIZATIONPARAMETERIZATION SIMPLESIMPLE はいYes
QUOTED_IDENTIFIERQUOTED_IDENTIFIER OFFOFF はいYes
READ_COMMITTED_SNAPSHOTREAD_COMMITTED_SNAPSHOT OFFOFF いいえNo
RECOVERYRECOVERY SIMPLESIMPLE いいえNo
RECURSIVE_TRIGGERSRECURSIVE_TRIGGERS OFFOFF はいYes
Service Broker のオプションService Broker Options ENABLE_BROKERENABLE_BROKER はいYes
TRUSTWORTHYTRUSTWORTHY OFFOFF いいえNo

これらのデータベース オプションの説明は、「ALTER DATABASE の SET オプション (Transact-SQL)」を参照してください。For a description of these database options, see ALTER DATABASE SET Options (Transact-SQL).

SQL Database の Tempdb データベースTempdb database in SQL Database

DTU に基づくサービス層の tempdb のサイズtempdb sizes for DTU-based service tiers

SLOSLO 最大 Tempdb データ ファイル サイズ (GB)Max Tempdb Data File Size (GBs) tempdb データ ファイルの数# of tempdb data files 最大 tempdb データ サイズ (GB)Max tempdb data size (GB)
BasicBasic 1313 11 1313
S0S0 1313 11 1313
S1S1 1313 11 1313
S2S2 1313 11 1313
S3S3 3232 11 3232
S4S4 3232 22 6464
S6S6 3232 33 9696
S7S7 3232 66 192192
S9S9 3232 1212 384384
S12S12 3232 1212 384384
P1P1 1313 1212 156156
P2P2 1313 1212 156156
P4P4 1313 1212 156156
P6P6 1313 1212 156156
P11P11 1313 1212 156156
P15P15 1313 1212 156156
Premium エラスティック プール (すべての DTU 構成)Premium Elastic Pools (all DTU configurations) 1313 1212 156156
Standard エラスティック プール (S0-S2)Standard Elastic Pools (S0-S2) 1313 1212 156156
Standard エラスティック プール (S3 以降)Standard Elastic Pools (S3 and above) 3232 1212 384384
Basic エラスティック プール (すべての DTU 構成)Basic Elastic Pools (all DTU configurations) 1313 1212 156156

vCore に基づくサービス層の tempdb のサイズtempdb sizes for vCore-based service tiers

仮想コアベースのリソース制限に関するページを参照してください。See vCore-based resource limits

制限Restrictions

tempdb データベースでは、次の操作は実行できません。The following operations cannot be performed on the tempdb database:

  • ファイル グループの追加Adding filegroups
  • データベースのバックアップまたは復元Backing up or restoring the database
  • 照合順序の変更。Changing collation. 既定の照合順序はサーバーの照合順序ですThe default collation is the server collation
  • データベース所有者の変更。Changing the database owner. tempdbsaが所有しますtempdb is owned by sa
  • データベース スナップショットを作成するCreating a database snapshot
  • データベースの削除Dropping the database
  • データベースからの guest ユーザーの削除Dropping the guest user from the database
  • 変更データ キャプチャの有効化Enabling change data capture
  • データベース ミラーリングへの参加Participating in database mirroring
  • プライマリ ファイル グループ、プライマリ データ ファイル、またはログ ファイルの削除Removing the primary filegroup, primary data file, or log file
  • データベースまたはプライマリ ファイル グループの名前変更Renaming the database or primary filegroup
  • DBCC CHECKALLOC の実行Running DBCC CHECKALLOC
  • DBCC CHECKCATALOG の実行Running DBCC CHECKCATALOG
  • データベースの OFFLINE への設定Setting the database to OFFLINE
  • データベースまたはプライマリ ファイル グループの READ_ONLY への設定Setting the database or primary filegroup to READ_ONLY

アクセス許可Permissions

すべてのユーザーが tempdb 内に一時オブジェクトを作成できます。Any user can create temporary objects in tempdb. ユーザーは追加の権限を付与されない限り、自分で作成したオブジェクトにしかアクセスできません。Users can only access their own objects, unless they receive additional permissions. ユーザーが tempdb を使用できないように tempdb への接続アクセス許可を取り消すことはできますが、一部のルーチン処理で tempdb を使用する必要があるためお勧めしません。It is possible to revoke the connect permission to tempdb to prevent a user from using tempdb, but is not recommended as some routine operations require the use of tempdb.

SQL Server の tempdb のパフォーマンスの最適化Optimizing tempdb performance in SQL Server

tempdb データベースのサイズと物理的な配置場所は、システムのパフォーマンスに影響を与えることがあります。The size and physical placement of the tempdb database can affect the performance of a system. たとえば、tempdb 用に定義されているサイズが小さすぎると、SQL ServerSQL Server のインスタンスを再起動するたびに、tempdb のサイズがワークロードのサポートに必要なサイズまで自動的に拡張されるので、システムの処理負荷の一部が占有されます。For example, if the size that is defined for tempdb is too small, part of the system-processing load may be taken up with auto growing tempdb to the size required to support the workload every time you restart the instance of SQL ServerSQL Server.

可能な場合は、データベースのファイルの瞬時初期化を使用して、データ ファイル拡張操作のパフォーマンスを向上します。If possible, use database instant file initialization to improve the performance of data file grow operations.

すべての tempdb ファイルに対する領域をあらかじめ割り当てるには、環境における一般的なワークロードに十分に対応できる大きさの値にファイル サイズを設定します。Preallocate space for all tempdb files by setting the file size to a value large enough to accommodate the typical workload in the environment. 事前に割り当てることで、tempdb が頻繁に拡張されることなく、パフォーマンスに影響が出ません。Preallocation prevents tempdb from expanding too frequently, which affects performance. tempdb データベースは自動拡張が行われるように設定する必要がありますが、これは想定外の例外に対してディスク領域を増加するために使用する必要があります。The tempdb database should be set to autogrow, but this should be used to increase disk space for unplanned exceptions.

ファイル グループ内でデータ ファイルのサイズは等しくする必要があります。これは、SQL ServerSQL Server がより多くの空き領域を持つファイル内の割り当てを優先する比例配分アルゴリズムを使用していることによります。Data files should be of equal size within each filegroup, as SQL ServerSQL Server uses a proportional-fill algorithm that favors allocations in files with more free space. サイズの等しい複数のデータ ファイルに tempdb を分割すると、tempdb を使用する操作において効率の高い並列処理を実現できます。Dividing tempdb into multiple data files of equal size provides a high degree of parallel efficiency in operations that use tempdb.

tempdb データベース ファイルの拡張単位が小さすぎることのないように、ファイル拡張の増分値を妥当なサイズに設定します。Set the file growth increment to a reasonable size to avoid the tempdb database files from growing by too small a value. tempdb に書き込まれたデータ量と比較してファイルの拡張単位が小さすぎると、tempdb を頻繁に拡張する必要が生じ、パフォーマンスに影響が出る場合があります。If the file growth is too small, compared to the amount of data that is being written to tempdb, tempdb may have to constantly expand and affect performance.

現在の tempdb のサイズと拡張パラメーターを確認するには、次のクエリを使用します。To check current tempdb size and growth parameters, use the following query:

 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

高速な I/O サブシステムに tempdb データベースを配置します。Put the tempdb database on a fast I/O subsystem. 直接アタッチされたディスクが多数ある場合は、ディスク ストライピングを使用します。Use disk striping if there are many directly attached disks. I/O ボトルネックが発生しない限り、tempdb データ ファイルの個々またはグループを必ずしも別々のディスクまたはスピンドルに配置する必要はありません。Individual or groups of tempdb data files do not necessarily need to be on different disks or spindles unless you are also encountering I/O bottlenecks.

ユーザー データベースによって使用されるディスクとは異なるディスクに tempdb データベースを配置します。Put the tempdb database on disks that differ from those that are used by user databases.

SQL Server の tempdb でのパフォーマンスの強化Performance improvements in tempdb for SQL Server

SQL Server 2016 (13.x)SQL Server 2016 (13.x) 以降では、tempdb のパフォーマンスが次の方法でさらに最適化されています。Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), tempdb performance is further optimized in the following ways:

  • 一時テーブルとテーブル変数はキャッシュされます。Temporary tables and table variables are cached. キャッシュを使用することで、一時オブジェクトを削除および作成する操作を非常に高速に実行でき、ページ割り当ての競合が減少します。Caching allows operations that drop and create the temporary objects to execute very quickly and reduces page allocation contention.
  • 割り当てページのラッチ プロトコルが改善され、使用される UP (更新) ラッチの回数が減っています。Allocation page latching protocol is improved to reduce the number of UP (update) latches that are used.
  • tempdb のログ記録オーバーヘッドが減らされ、tempdb ログ ファイルのディスク I/O 帯域幅消費が減りました。Logging overhead for tempdb is reduced to reduce disk I/O bandwidth consumption on the tempdb log file.
  • セットアップによって、新しいインスタンスのインストール中に複数の tempdb データ ファイルが追加されます。Setup adds multiple tempdb data files during a new instance installation. この操作を実行するには、 [データベース エンジンの構成] セクションの新しい UI 入力コントロールまたはコマンドライン パラメーター /SQLTEMPDBFILECOUNT を使用します。This task can be accomplished with the new UI input control on the Database Engine Configuration section and a command-line parameter /SQLTEMPDBFILECOUNT. 既定では、セットアップ時に、論理プロセッサ数または 8 のいずれか小さい方と同数の tempdb データ ファイルが追加されます。By default, setup adds as many tempdb data files as the logical processor count or eight, whichever is lower.
  • 複数の tempdb データ ファイルがある場合は、拡張設定に応じて、すべてのファイルが同時に同量ずつ自動拡張されます。When there are multiple tempdb data files, all files autogrow at same time and by the same amount depending on growth settings. トレース フラグ 1117 は必須ではなくなりました。Trace flag 1117 is no longer required.
  • tempdb 内のすべての割り当てで単一エクステントが使用されます。All allocations in tempdb use uniform extents. トレース フラグ 1118 は必須ではなくなりました。Trace flag 1118 is no longer required.
  • プライマリ ファイル グループの場合は、AUTOGROW_ALL_FILES プロパティがオンで、プロパティは変更できません。For the primary filegroup, the AUTOGROW_ALL_FILES property is turned on and the property cannot be modified.

tempdb でのパフォーマンスの向上の詳細については、次のブログ記事を参照してください。For more information on performance improvements in tempdb, see the following blog article:

TEMPDB - ファイル、トレース フラグ、更新プログラムTEMPDB - Files and Trace Flags and Updates, Oh My!

メモリ最適化 tempdb メタデータMemory-Optimized TempDB Metadata

tempdb メタデータの競合は、従来から、SQL Server 上で実行されている多くのワークロードのスケーラビリティに対するボトルネックになっていました。TempDB metadata contention has historically been a bottleneck to scalability for many workloads running on SQL Server. SQL Server 2019SQL Server 2019 では、メモリ内データベース機能ファミリの一部として、メモリ最適化 tempdb メタデータという新機能が導入されています。この機能により、効果的にこのボトルネックが除去され、tempdb が多用されるワークロードに対して新たなレベルのスケーラビリティが実現されます。introduces a new feature that is part of the In-Memory Database feature family, memory-optimized tempdb metadata, which effectively removes this bottleneck and unlocks a new level of scalability for tempdb-heavy workloads. SQL Server 2019SQL Server 2019 では、一時テーブルのメタデータの管理に関連するシステム テーブルを、ラッチ フリーの非持続的メモリ最適化テーブルに移動できます。In SQL Server 2019SQL Server 2019, the system tables involved in managing temp table metadata can be moved into latch-free non-durable memory-optimized tables. SQL Server 2019SQL Server 2019 では、メモリ内データベース機能ファミリの一部として、メモリ最適化 tempdb メタデータという新機能が導入されています。この機能により、効果的にこのボトルネックが除去され、tempdb が多用されるワークロードに対して新たなレベルのスケーラビリティが実現されます。introduces a new feature that is part of the In-Memory Database feature family, memory-optimized tempdb metadata, which effectively removes this bottleneck and unlocks a new level of scalability for tempdb-heavy workloads. SQL Server 2019SQL Server 2019 では、一時テーブルのメタデータの管理に関連するシステム テーブルを、ラッチ フリーの非持続的メモリ最適化テーブルに移動できます。この新しい機能にオプトインするには、次のスクリプトを使用します。In SQL Server 2019SQL Server 2019, the system tables involved in managing temp table metadata can be moved into latch-free non-durable memory-optimized tables.In order to opt-in to this new feature, use the following script:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON 

この構成の変更を有効にするには、サービスの再起動が必要です。This configuration change requires a restart of the service to take effect.

この実装には、注意すべき重要な制限がいくつかあります。There are some limitations with this implementation that are important to note:

  1. 機能のオンとオフの切り替えは、動的ではありません。Toggling the feature on and off is not dynamic. tempdb の構造を根本的に変更する必要があるため、この機能を有効または無効にするには再起動が必要です。Because of the intrinsic changes that need to be made to the structure of tempdb, a restart is required to either enable or disable the feature.
  2. 1 つのトランザクションで複数のデータベース内のメモリ最適化テーブルにアクセスすることはできません。A single transaction may not access memory-optimized tables in more than one database. つまり、ユーザー データベースにメモリ最適化テーブルが含まれるすべてのトランザクションでは、同じトランザクション内の tempdb システム ビューにアクセスできなくなります。This means that any transactions that involve a memory-optimized table in a user database will not be able to access TempDB system views in the same transaction. ユーザー データベース内のメモリ最適化テーブルと同じトランザクションで tempdb システム ビューにアクセスしようとした場合、次のエラーを受け取ります。If you attempt to access TempDB system views in the same transaction as a memory-optimized table in a user database, you will receive the following error:
    A user transaction that accesses memory optimized tables or natively compiled modules cannot access more than one user database or databases model and msdb, and it cannot write to master.
    
    例:Example:
    BEGIN TRAN
    SELECT *
    FROM tempdb.sys.tables  -----> Creates a user In-Memory OLTP Transaction on Tempdb
    INSERT INTO <user database>.<schema>.<mem-optimized table>
    VALUES (1)  ----> Attempts to create user In-Memory OLTP transaction but will fail
    COMMIT TRAN
    
  3. メモリ最適化テーブルに対するクエリではロックと分離のヒントがサポートされていないため、メモリ最適化 tempdb カタログ ビューに対するクエリでは、ロックと分離のヒントは適用されません。Queries against memory-optimized tables do not support locking and isolation hints, so queries against memory-optimized TempDB catalog views will not honor locking and isolation hints. SQL Server 内の他のシステム カタログ ビューと同じように、システム ビューに対するすべてのトランザクションは、READ COMMITTED (または、このケースでは READ COMMITTED SNAPSHOT) の分離になります。As with other system catalog views in SQL Server, all transactions against system views will be in READ COMMITTED (or in this case READ COMMITTED SNAPSHOT) isolation.
  4. メモリ最適化 tempdb メタデータが有効になっていると、一時テーブルの列ストア インデックスで問題が発生する場合あります。There may be some issues with columnstore indexes on temporary tables when memory-optimized tempdb metadata is enabled. このプレビュー リリースでは、メモリ最適化 tempdb メタデータを使用するときは、一時テーブルで列ストア インデックスを使用しないことをお勧めします。For this preview release, it is best to avoid columnstore indexes on temporary tables when using memory-optimized tempdb metadata.

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. このページの下部にある [フィードバック] セクション内で [このページ] ボタンをクリックしてください。You can click the This page button in the Feedback section at the bottom of this page. SQL に関するフィードバックのすべての項目に目を通しています (通常は翌日)。We read every item of feedback about SQL, typically the next day. よろしくお願いいたします。Thanks.

注意

これらの制限は、tempdb システム ビューを参照するときにのみ適用されます。ユーザー データベース内のメモリ最適化テーブルにアクセスするときは、必要であれば、同じトランザクションで一時テーブルを作成することができます。These limitations only apply when referencing TempDB system views, you will be able to create a temp table in the same transaction as you access a memory-optimized table in a user database if desired.

次の T-SQL コマンドを使用して、tempdb がメモリ最適化かどうかを確認できます。You can verify whether or not TempDB is memory-optimized by using the following T-SQL command:

SELECT SERVERPROPERTY('IsTempdbMetadataMemoryOptimized')

SQL Server の tempdb に使用するディスク領域の計画Capacity Planning for tempdb in SQL Server

SQL Server 運用環境での tempdb の適切なサイズを判断するには、多くの要因が関係します。Determining the appropriate size for tempdb in a SQL Server production environment depends on many factors. この記事で前述されているように、これらの要因には既存のワークロードや使用されている SQL ServerSQL Server の機能などがあります。As described previously in this article, these factors include the existing workload and the SQL ServerSQL Server features that are used. SQL Server のテスト環境で次のタスクを実行して、既存のワークロードを分析することをお勧めします。We recommend that you analyze the existing workload by performing the following tasks in a SQL Server test environment:

  • tempdb に自動拡張を設定する。Set autogrow on for tempdb.
  • 個々のクエリまたはワークロード トレース ファイルを実行し、tempdb 領域の使用を監視する。Execute individual queries or workload trace files and monitor tempdb space use.
  • インデックスの再構築などのインデックス メンテナンス操作を実行し、tempdb 領域を監視する。Execute index maintenance operations, such as rebuilding indexes and monitor tempdb space.
  • 前の手順の使用領域値を使用してワークロード全体の使用量を予測し、予測される同時処理に合わせてこの値を調整し、それに応じて tempdb のサイズを設定する。Use the space-use values from the previous steps to predict your total workload usage; adjust this value for projected concurrent activity, and then set the size of tempdb accordingly.

tempdb の使用状況を監視する方法How to Monitor tempdb use

tempdb のディスク領域が不足すると、SQL ServerSQL Server の運用環境で重大な障害が発生したり、実行中のアプリケーションの操作を完了できなくなったりする場合があります。Running out of disk space in tempdb can cause significant disruptions in the SQL ServerSQL Server production environment and can prevent applications that are running from completing operations. sys.dm_db_file_space_usage 動的管理ビューを使用して、tempdb ファイルで使用されているディスク領域を監視できます。You can use the sys.dm_db_file_space_usage dynamic management view to monitor the disk space that is used in the tempdb files:

 -- 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;

また、tempdb のページの割り当てや割り当て解除の状態をセッション レベルまたはタスク レベルで監視するには、sys.dm_db_session_space_usage 動的管理ビューと sys.dm_db_task_space_usage 動的管理ビューを使用できます。Additionally, to monitor the page allocation or deallocation activity in tempdb at the session or task level, you can use the sys.dm_db_session_space_usage and sys.dm_db_task_space_usage dynamic management views. これらのビューを使用すると、tempdb のディスク領域を大量に使用している大きなクエリ、一時テーブル、またはテーブル変数を特定できます。These views can be used to identify large queries, temporary tables, or table variables that are using lots of tempdb disk space. さらに、tempdb で使用できる空き領域と tempdb を使用しているリソースの監視に使用できるいくつかのカウンターもあります。There are also several counters that can be used to monitor the free space that is available in tempdb and also the resources that are using tempdb. 詳細については、次のセクションを参照してください。For more information, see the next section.

-- 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;;