tempdb-Datenbanktempdb Database

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL DatabaseAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL Database

Die Systemdatenbank tempdb ist eine globale Ressource, die für alle Benutzer verfügbar ist, die mit der Instanz von SQL ServerSQL Server oder mit der SQL-Datenbank verbunden sind.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 wird verwendet, um Folgendes zu speichern:tempdb is used to hold:

  • Temporäre Benutzerobjekte, die explizit erstellt werden, z. B. globale oder lokale temporäre Tabellen und Indizes, temporär gespeicherte Prozeduren, Tabellenvariablen, in Tabellenwertfunktionen zurückgegebene Tabellen oder Cursor.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.

  • Interne Objekte, die von der Datenbank-Engine erstellt werden.Internal objects that are created by the database engine. Dazu gehören:These include:

    • Arbeitstabellen, in denen direkte Ergebnisse für Spools, Cursor, Sortierungen und temporäre große Objektspeicher (LOB) gespeichert werden.Work tables to store intermediate results for spools, cursors, sorts, and temporary large object (LOB) storage.
    • Arbeitsdateien für Hashjoin- oder Hashaggregatvorgänge.Work files for hash join or hash aggregate operations.
    • Zwischenergebnisse von Sortierungen für Vorgänge, wie z. B. das Erstellen oder Neuerstellen von Indizes (wenn SORT_IN_TEMPDB angegeben ist) oder bestimmte GROUP BY-, ORDER BY- oder UNION-Abfragen.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.

    Hinweis

    Jedes interne Objekt verwendet mindestens neun Seiten: eine IAM-Seite (Index Allocation Map) und eine achtseitige Erweiterung.Each internal object uses a minimum of nine pages; an IAM page and an eight-page extent. Weitere Informationen zu Seiten und Blöcken finden Sie unter Seiten und Blöcke.For more information about pages and extents, see Pages and Extents.

    Wichtig

    Azure SQL-Datenbank-Singletons und Pools für elastische Datenbanken unterstützen globale temporäre Tabellen und globale temporär gespeicherte Prozeduren, die in tempdb gespeichert werden und für die Datenbankebene gelten.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. Globale temporäre Tabellen und globale temporär gespeicherte Prozeduren werden für alle Benutzersitzungen innerhalb derselben Azure SQL-Datenbank freigegeben.Global temporary tables and global temporary stored procedures are shared for all users' sessions within the same Azure SQL database. Benutzersitzungen von anderen Azure SQL-Datenbanken können nicht auf globale temporäre Tabellen zugreifen.User sessions from other Azure SQL databases cannot access global temporary tables. Weitere Informationen finden Sie unter Database scoped global temporary tables (Azure SQL Database) (Globale temporäre Tabellen auf Datenbankebene (Azure SQL-Datenbank)).For more information, see Database scoped global temporary tables (Azure SQL Database). Verwaltete Azure SQL-Datenbank-Instanz) unterstützt die gleichen temporäre Objekte wie SQL Server.Azure SQL Database Managed Instance) supports the same temporary objects as does SQL Server. Für Azure SQL-Datenbank-Singletons und Pools für elastische Datenbanken gelten nur die Masterdatenbank und die tempdb-Datenbank.For Azure SQL Database single databases and elastic pools, only master database and tempdb database apply. Weitere Informationen finden Sie unter Was ist ein Azure SQL-Datenbank-Server.For more information, see What is an Azure SQL Database server. Eine Erläuterung von tempdb im Kontext von Azure SQL-Datenbank-Singletons und Pools für elastische Datenbanken finden Sie unter tempdb-Datenbank in Azure SQL-Datenbank-Singletons und Pools für elastische Datenbanken.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. Für die verwaltete Azure SQL-Datenbank-Instanz gelten alle Systemdatenbanken.For Azure SQL Database Managed Instance, all system databases apply.

  • Versionsspeicher, die aus einer Auflistung von Datenseiten bestehen, in denen die Datenzeilen enthalten sind, die zur Unterstützung der Funktionen, die die Zeilenversionsverwaltung verwenden, erforderlich ist.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. Es gibt zwei Versionsspeicher: ein allgemeiner Versionsspeicher und ein Onlineindexerstellungs-Versionsspeicher.There are two version stores: a common version store and an online-index-build version store. Die Versionsspeicher beinhalten Folgendes:The version stores contain:

    • Zeilenversionen, die von Datenänderungstransaktionen in einer Datenbank generiert werden, die READ COMMITTED mit Zeilenversionsverwaltung oder Transaktionen der Momentaufnahmeisolation verwendet.Row versions that are generated by data modification transactions in a database that uses read-committed using row versioning isolation or snapshot isolation transactions.
    • Zeilenversionen, die von Datenänderungstransaktionen für Funktionen, wie z. B. Onlineindexvorgänge, Multiple Active Result Sets (MARS) und AFTER-Trigger, generiert wurden.Row versions that are generated by data modification transactions for features, such as: online index operations, Multiple Active Result Sets (MARS), and AFTER triggers.

Vorgänge in tempdb werden minimal protokolliert, sodass ein Rollback für Transaktionen ausgeführt werden kann.Operations within tempdb are minimally logged so that transactions can be rolled back. tempdb wird bei jedem Start von SQL ServerSQL Server neu erstellt, sodass das System immer mit einer bereinigten Kopie der Datenbank startet.tempdb is re-created every time SQL ServerSQL Server is started so that the system always starts with a clean copy of the database. Temporäre Tabellen und gespeicherte Prozeduren werden beim Trennen der Verbindung automatisch gelöscht; es sind keine Verbindungen aktiv, wenn das System heruntergefahren wird.Temporary tables and stored procedures are dropped automatically on disconnect, and no connections are active when the system is shut down. Daher wird zwischen einzelnen SQL ServerSQL Server-Sitzungen nichts in tempdb gespeichert.Therefore, there is never anything in tempdb to be saved from one session of SQL ServerSQL Server to another. Sicherungs- und Wiederherstellungsvorgänge sind für tempdb nicht zulässig.Backup and restore operations are not allowed on tempdb.

Physische Eigenschaften von tempdb in SQL ServerPhysical Properties of tempdb in SQL Server

In der folgenden Tabelle werden die anfänglichen Konfigurationswerte der tempdb-Daten- und Protokolldateien in SQL Server aufgeführt, die auf den Standardeinstellungen der Modelldatenbank basieren.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. Die Größe dieser Dateien kann sich in den verschiedenen Editionen von SQL ServerSQL Servergeringfügig unterscheiden.The sizes of these files may vary slightly for different editions of SQL ServerSQL Server.

DateiFile Logischer Name (logical name)Logical name Physischer Name (physical name)Physical name Ursprüngliche GrößeInitial size Dateivergrößerung (file growth)File growth
Primäre DatenPrimary data tempdevtempdev tempdb.mdftempdb.mdf 8 Megabytes8 megabytes Automatische Vergrößerung um 64 MB, bis der Speicherplatz auf dem Datenträger erschöpft istAutogrow by 64 MB until the disk is full
Sekundäre Datendateien*Secondary data files* temp#temp# tempdb_mssql_#.ndftempdb_mssql_#.ndf 8 Megabytes8 megabytes Automatische Vergrößerung um 64 MB, bis der Speicherplatz auf dem Datenträger erschöpft istAutogrow by 64 MB until the disk is full
LogLog templogtemplog templog.ldftemplog.ldf 8 Megabytes8 megabytes Automatische Vergrößerung um 64 MB, bis der Maximalwert von 2 TB erreicht wirdAutogrow by 64 megabytes to a maximum of 2 terabytes

* Die Anzahl der Dateien hängt von der Anzahl der (logischen) Prozessoren auf dem Computer ab.* The number of files depends on the number of (logical) processors on the machine. Als allgemeine Regel gilt: Verwenden Sie die Anzahl von Datendateien, die der Anzahl von logischen Prozessoren entspricht, falls die Anzahl von logischen Prozessoren acht oder weniger beträgt.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. Verwenden Sie acht Datendateien, wenn die Anzahl von logischen Prozessoren größer als acht ist. Falls weiterhin ein Konflikt besteht, erhöhen Sie die Anzahl von Datendateien um ein Vielfaches von vier, bis der Konflikt auf ein akzeptables Ausmaß reduziert ist, oder ändern Sie die Workload bzw. den Code.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.

Hinweis

Der Standardwert für die Anzahl der Datendateien basiert auf den allgemeinen Richtlinien in KB 2154845.The default value for the number of data files is based on the general guidelines in KB 2154845.

Verschieben der tempdb-Daten- und -Protokolldateien in SQL ServerMoving the tempdb data and log files in SQL Server

Informationen zum Verschieben der Daten und Protokolldateien von tempdb finden Sie unter Verschieben von Systemdatenbanken.To move the tempdb data and log files, see Move System Databases.

Datenbankoptionen für tempdb in SQL ServerDatabase Options for tempdb in SQL Server

In der folgenden Tabelle werden die Standardwerte für alle einzelnen Datenbankoptionen der Datenbank tempdb aufgeführt und, ob die Option geändert werden kann.The following table lists the default value for each database option in the tempdb database and whether the option can be modified. Zum Anzeigen der aktuellen Einstellungen dieser Optionen verwenden Sie die Katalogsicht sys.databases .To view the current settings for these options, use the sys.databases catalog view.

DatenbankoptionDatabase option StandardwertDefault value Kann geändert werden.Can be modified
ALLOW_SNAPSHOT_ISOLATIONALLOW_SNAPSHOT_ISOLATION OFFOFF JaYes
ANSI_NULL_DEFAULTANSI_NULL_DEFAULT OFFOFF JaYes
ANSI_NULLSANSI_NULLS OFFOFF JaYes
ANSI_PADDINGANSI_PADDING OFFOFF JaYes
ANSI_WARNINGSANSI_WARNINGS OFFOFF JaYes
ARITHABORTARITHABORT OFFOFF JaYes
AUTO_CLOSEAUTO_CLOSE OFFOFF NeinNo
AUTO_CREATE_STATISTICSAUTO_CREATE_STATISTICS EINON JaYes
AUTO_SHRINKAUTO_SHRINK OFFOFF NeinNo
AUTO_UPDATE_STATISTICSAUTO_UPDATE_STATISTICS EINON JaYes
AUTO_UPDATE_STATISTICS_ASYNCAUTO_UPDATE_STATISTICS_ASYNC OFFOFF JaYes
CHANGE_TRACKINGCHANGE_TRACKING OFFOFF NeinNo
CONCAT_NULL_YIELDS_NULLCONCAT_NULL_YIELDS_NULL OFFOFF JaYes
CURSOR_CLOSE_ON_COMMITCURSOR_CLOSE_ON_COMMIT OFFOFF JaYes
CURSOR_DEFAULTCURSOR_DEFAULT GLOBALGLOBAL JaYes
DatenbankverfügbarkeitsoptionenDatabase Availability Options ONLINEONLINE

MULTI_USERMULTI_USER

READ_WRITEREAD_WRITE
NeinNo

NeinNo

NeinNo
DATE_CORRELATION_OPTIMIZATIONDATE_CORRELATION_OPTIMIZATION OFFOFF JaYes
DB_CHAININGDB_CHAINING EINON NeinNo
ENCRYPTIONENCRYPTION OFFOFF NeinNo
MIXED_PAGE_ALLOCATIONMIXED_PAGE_ALLOCATION OFFOFF NeinNo
NUMERIC_ROUNDABORTNUMERIC_ROUNDABORT OFFOFF JaYes
PAGE_VERIFYPAGE_VERIFY CHECKSUM für neue Installationen von SQL ServerSQL Server.CHECKSUM for new installations of SQL ServerSQL Server.

NONE für Upgrades von SQL ServerSQL Server.NONE for upgrades of SQL ServerSQL Server.
JaYes
PARAMETERIZATIONPARAMETERIZATION SIMPLESIMPLE JaYes
QUOTED_IDENTIFIERQUOTED_IDENTIFIER OFFOFF JaYes
READ_COMMITTED_SNAPSHOTREAD_COMMITTED_SNAPSHOT OFFOFF NeinNo
RECOVERYRECOVERY SIMPLESIMPLE NeinNo
RECURSIVE_TRIGGERSRECURSIVE_TRIGGERS OFFOFF JaYes
Service Broker-OptionenService Broker Options ENABLE_BROKERENABLE_BROKER JaYes
TRUSTWORTHYTRUSTWORTHY OFFOFF NeinNo

Eine Beschreibung dieser Datenbankoptionen finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).For a description of these database options, see ALTER DATABASE SET Options (Transact-SQL).

tempdb-Datenbank in SQL-Datenbanktempdb database in SQL Database

Tempdb-Größen für DTU-basierte Diensttarifetempdb sizes for DTU-based service tiers

SLOSLO Maximale Dateigröße für tempdb-Daten (GB)Max tempdb Data File Size (GBs) Anzahl der Datendateien von tempdb# of tempdb data files Maximale Datengröße von tempdb (GB)Max tempdb data size (GB)
BasicBasic 13,913.9 11 13,913.9
S0S0 13,913.9 11 13,913.9
S1S1 13,913.9 11 13,913.9
S2S2 13,913.9 11 13,913.9
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 13,913.9 1212 166,7166.7
P2P2 13,913.9 1212 166,7166.7
P4P4 13,913.9 1212 166,7166.7
P6P6 13,913.9 1212 166,7166.7
P11P11 13,913.9 1212 166,7166.7
P15P15 13,913.9 1212 166,7166.7
Elastischer Premium-Pool (alle DTU-Konfigurationen)Premium Elastic Pools (all DTU configurations) 13,913.9 1212 166,7166.7
Elastischer Standard-Pool (S0-S2)Standard Elastic Pools (S0-S2) 13,913.9 1212 166,7166.7
Elastischer Standard-Pool (S3 und höher)Standard Elastic Pools (S3 and above) 3232 1212 384384
Elastischer Basic-Pool (alle DTU-Konfigurationen)Basic Elastic Pools (all DTU configurations) 13,913.9 1212 166,7166.7

Tempdb-Größen für auf virtuellen Kern basierende Diensttarifetempdb sizes for vCore-based service tiers

Weitere Informationen finden Sie unter V-Kern-basierte Ressourceneinschränkungen.See vCore-based resource limits

BeschränkungenRestrictions

Die folgenden Vorgänge können auf der tempdb-Datenbank nicht ausgeführt werden:The following operations cannot be performed on the tempdb database:

  • Hinzufügen von DateigruppenAdding filegroups
  • Sichern und Wiederherstellen der DatenbankBacking up or restoring the database
  • Ändern der Sortierung.Changing collation. Die Standardsortierung entspricht der Serversortierung.The default collation is the server collation
  • Ändern des DatenbankbesitzersChanging the database owner. Der Besitzer von tempdb ist sa.tempdb is owned by sa
  • Erstellen einer DatenbankmomentaufnahmeCreating a database snapshot
  • Löschen der DatenbankDropping the database
  • Löschen des guest -Benutzers aus der DatenbankDropping the guest user from the database
  • Aktivieren von Change Data CaptureEnabling change data capture
  • Teilnehmen an der DatenbankspiegelungParticipating in database mirroring
  • Entfernen der primären Dateigruppe, der primären Datendatei oder der ProtokolldateiRemoving the primary filegroup, primary data file, or log file
  • Umbenennen der Datenbank oder der primären DateigruppeRenaming the database or primary filegroup
  • Ausführen von DBCC CHECKALLOCRunning DBCC CHECKALLOC
  • Ausführen von DBCC CHECKCATALOGRunning DBCC CHECKCATALOG
  • Versetzen der Datenbank in den OFFLINE-ModusSetting the database to OFFLINE
  • Versetzen der Datenbank oder der primären Dateigruppe in den READ_ONLY-ModusSetting the database or primary filegroup to READ_ONLY

BerechtigungenPermissions

Jeder Benutzer kann temporäre Objekte in tempdb erstellen.Any user can create temporary objects in tempdb. Benutzer haben nur Zugriff auf ihre eigenen Objekte, es sei denn, ihnen wurden zusätzliche Berechtigungen zugewiesen.Users can only access their own objects, unless they receive additional permissions. Die CONNECT-Berechtigung für tempdb kann widerrufen werden, um Benutzer daran zu hindern, tempdb zu verwenden. Davon wird jedoch abgeraten, da einige Routinevorgänge auf die Verwendung von tempdb angewiesen sind.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.

Optimieren der Leistung von tempdb in SQL ServerOptimizing tempdb performance in SQL Server

Die Größe und die physische Platzierung der tempdb-Datenbank kann sich auf die Leistung eines Systems auswirken.The size and physical placement of the tempdb database can affect the performance of a system. Wurde für tempdb beispielsweise eine zu kleine Größe definiert, muss bei jedem Neustart der SQL ServerSQL Server-Instanz möglicherweise ein Teil der Verarbeitungslast des Systems dafür aufgewendet werden, die tempdb-Datenbank automatisch auf den Umfang zu vergrößern, der zum Unterstützen der anfallenden Arbeitsauslastung erforderlich ist.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.

Verwenden Sie nach Möglichkeit die schnelle Dateiinitialisierung für Datenbank, um die Leistung von Datendateivergrößerungen zu verbessern.If possible, use database instant file initialization to improve the performance of data file grow operations.

Weisen Sie allen tempdb-Dateien im Voraus Speicherplatz zu, indem Sie die Dateigröße auf einen Wert festlegen, der hoch genug ist, um der üblichen Arbeitsauslastung in der Umgebung gerecht zu werden.Preallocate space for all tempdb files by setting the file size to a value large enough to accommodate the typical workload in the environment. Durch die Vorabzuordnung wird verhindert, dass tempdb zu häufig vergrößert und die Leistung dadurch beeinträchtigt wird.Preallocation prevents tempdb from expanding too frequently, which affects performance. Für die tempdb-Datenbank sollte die automatische Vergrößerung festgelegt werden, jedoch nur für den Fall eines zusätzlichen Speicherplatzbedarfs für nicht geplante Ausnahmen.The tempdb database should be set to autogrow, but this should be used to increase disk space for unplanned exceptions.

Datendateien sollten in jeder Dateigruppe die gleiche Größe haben, da SQL ServerSQL Server einen Algorithmus zum proportionalen Auffüllen verwendet, in dem Zuteilungen in Dateien mit mehr freiem Platz bevorzugt werden.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. Ein Aufteilen von tempdb in mehrere Datendateien gleicher Größe bietet einen hohen Grad an paralleler Effizienz in Vorgängen, in denen tempdb verwendet wird.Dividing tempdb into multiple data files of equal size provides a high degree of parallel efficiency in operations that use tempdb.

Legen Sie das Inkrement für die Dateivergrößerung auf eine sinnvolle Größe fest, damit die Vergrößerung der tempdb-Datenbank nicht zu gering ausfällt.Set the file growth increment to a reasonable size to avoid the tempdb database files from growing by too small a value. Wenn der Dateizuwachs im Vergleich zur Anzahl der Daten, die in tempdb geschrieben werden, zu gering ist, muss tempdb möglicherweise ständig vergrößert werden, was die Leistung beeinträchtigen kann.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.

Verwenden Sie die folgende Abfrage, um die aktuelle Größe und die Größenzuwachsparameter von tempdb zu überprüfen: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

Platzieren Sie die tempdb-Datenbank auf einem schnellen E/A-Subsystem.Put the tempdb database on a fast I/O subsystem. Verwenden Sie Datenträgerstriping, wenn viele Datenträger direkt angeschlossen sind.Use disk striping if there are many directly attached disks. Einzelne oder Gruppen von tempdb-Datendateien müssen nicht unbedingt auf verschiedenen Datenträgern oder Spindeln gespeichert sein, es sei denn, Sie stoßen auf E/A-Engpässe.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.

Platzieren Sie die tempdb-Datenbank auf Datenträgern, die sich von denen unterscheiden, die von Benutzerdatenbanken genutzt werden.Put the tempdb database on disks that differ from those that are used by user databases.

Leistungsverbesserungen in tempdb für SQL ServerPerformance improvements in tempdb for SQL Server

Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) wird die Leistung von tempdb auf folgende Weise weiter optimiert:Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), tempdb performance is further optimized in the following ways:

  • Temporäre Tabellen und Tabellenvariablen werden zwischengespeichert.Temporary tables and table variables are cached. Das Zwischenspeichern ermöglicht das sehr schnelle Ausführen von Vorgängen zum Löschen und Erstellen der temporären Objekte und reduziert das Auftreten von Seitenzuordnungskonflikten.Caching allows operations that drop and create the temporary objects to execute very quickly and reduces page allocation contention.
  • Das Latchprotokoll der Zuordnungsseite wurde verbessert, um die Anzahl der verwendeten Updatelatches zu verringern.Allocation page latching protocol is improved to reduce the number of UP (update) latches that are used.
  • Der Protokollierungsaufwand für tempdb wurde verringert, um die E/A-Bandbreite des Datenträgers für die tempdb-Protokolldatei zu reduzieren.Logging overhead for tempdb is reduced to reduce disk I/O bandwidth consumption on the tempdb log file.
  • Das Setup fügt während der Installation einer neuen Instanz mehrere tempdb-Datendateien hinzu.Setup adds multiple tempdb data files during a new instance installation. Diese Aufgabe kann mit der neuen Eingabesteuerung der Benutzeroberfläche im Bereich Datenbank-Engine-Konfiguration und einem Befehlszeilenparameter /SQLTEMPDBFILECOUNT durchgeführt werden.This task can be accomplished with the new UI input control on the Database Engine Configuration section and a command-line parameter /SQLTEMPDBFILECOUNT. Standardmäßig fügt das Setup die Anzahl von tempdb-Datendateien hinzu, die der Anzahl von logischen Prozessoren entspricht, höchstens jedoch acht.By default, setup adds as many tempdb data files as the logical processor count or eight, whichever is lower.
  • Wenn mehrere tempdb-Datendateien vorhanden sind, werden alle Dateien gleichzeitig und im selben Umfang je nach Wachstumseinstellungen automatisch vergrößert.When there are multiple tempdb data files, all files autogrow at same time and by the same amount depending on growth settings. Ablaufverfolgungsflag 1117 ist nicht mehr erforderlich.Trace flag 1117 is no longer required.
  • Alle Zuordnungen in tempdb verwenden einheitliche Erweiterungen.All allocations in tempdb use uniform extents. Ablaufverfolgungsflag 1118 ist nicht mehr erforderlich.Trace flag 1118 is no longer required.
  • Für die primäre Dateigruppe ist die AUTOGROW_ALL_FILES-Eigenschaft aktiviert und kann nicht geändert werden.For the primary filegroup, the AUTOGROW_ALL_FILES property is turned on and the property cannot be modified.

Weitere Informationen zu Leistungsverbesserungen in tempdb finden Sie im folgenden Blogartikel:For more information on performance improvements in tempdb, see the following blog article:

TEMPDB – Files and Trace Flags and Updates, Oh My! (TEMPDB: Dateien, Ablaufverfolgungsflags und Updates)TEMPDB - Files and Trace Flags and Updates, Oh My!

Speicheroptimierte tempdb-MetadatenMemory-Optimized tempdb Metadata

Bislang stellten Metadatenkonflikte in tempdb einen Engpass für die Skalierbarkeit vieler Workloads dar, die in SQL ServerSQL Server ausgeführt wurden.Metadata contention in tempdb has historically been a bottleneck to scalability for many workloads running on SQL ServerSQL Server. Mit SQL Server 2019 (15.x)SQL Server 2019 (15.x) wird eine neue Funktion eingeführt, die Teil der In-Memory Database-Featurefamilie ist. Hierbei handelt es sich um speicheroptimierte tempdb-Metadaten, durch die dieser Engpass effektiv behoben wird und sich eine neue Ebene der Skalierbarkeit für tempdb-intensive Workloads ergibt.SQL Server 2019 (15.x)SQL Server 2019 (15.x) 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. In SQL Server 2019 (15.x)SQL Server 2019 (15.x) können die Systemtabellen, die an der Verwaltung von Metadaten temporärer Tabellen beteiligt sind, in nicht dauerhafte speicheroptimierte Tabellen ohne Latches verschoben werden.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), the system tables involved in managing temporary table metadata can be moved into latch-free non-durable memory-optimized tables.

Sehen Sie sich dieses siebenminütige Video an, um einen Überblick zu erhalten, wie und wann die speicheroptimierten tempdb-Metadaten verwendet werden sollten:Watch this 7-minute video for an overview of how and when to use memory-optimized tempdb metadata:

Zur Verwendung dieser neuen Funktion führen Sie das folgende Skript aus:In order to opt-in to this new feature, use the following script:

ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON 

Damit diese Konfigurationsänderung wirksam wird, muss der Dienst neu gestartet werden.This configuration change requires a restart of the service to take effect.

Bei dieser Implementierung sind einige Einschränkungen zu beachten:There are some limitations with this implementation that are important to note:

  1. Das Ein- und Ausschalten dieser Funktion ist nicht dynamisch.Toggling the feature on and off is not dynamic. Aufgrund der systeminternen Änderungen, die an der Struktur von tempdb vorgenommen werden müssen, ist ein Neustart erforderlich, um das Feature zu aktivieren oder zu deaktivieren.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. Eine einzelne Transaktion kann nicht auf speicheroptimierte Tabellen in mehreren Datenbanken zugreifen.A single transaction may not access memory-optimized tables in more than one database. Das bedeutet, dass Transaktionen, bei denen eine speicheroptimierte Tabelle in einer Benutzerdatenbank beteiligt ist, nicht innerhalb derselben Transaktion auf tempdb-Systemsichten zugreifen können.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. Wenn Sie versuchen, in derselben Transaktion wie eine speicheroptimierte Tabelle in einer Benutzerdatenbank auf tempdb-Systemsichten zuzugreifen, wird die folgende Fehlermeldung angezeigt: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.
    

    Beispiel: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. Abfragen für speicheroptimierte Tabellen unterstützen keine Sperr- und Isolationshinweise, sodass Sperr- und Isolationshinweise bei Abfragen für speicheroptimierte tempdb-Katalogsichten nicht berücksichtigt werden.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. Wie bei anderen Systemkatalogsichten in SQL ServerSQL Server erfolgen alle Transaktionen für Systemsichten in READ COMMITTED-Isolation (oder in diesem Fall in READ COMMITTED SNAPSHOT-Isolation).As with other system catalog views in SQL ServerSQL Server, all transactions against system views will be in READ COMMITTED (or in this case READ COMMITTED SNAPSHOT) isolation.

  4. Columnstore-Indizes können nicht für temporäre Tabellen erstellt werden, wenn speicheroptimierte tempdb-Metadaten aktiviert sind.Columnstore indexes cannot be created on temporary tables when memory-optimized tempdb metadata is enabled.

  5. Aufgrund der Einschränkung für Columnstore-Indizes wird die Verwendung der gespeicherten Systemprozedur sp_estimate_data_compression_savings mit dem Datenkomprimierungsparameter COLUMNSTORE oder COLUMNSTORE_ARCHIVE nicht unterstützt, wenn speicheroptimierte tempdb-Metadaten aktiviert sind.Due to the limitation on columnstore indexes, use of the sp_estimate_data_compression_savings system stored procedure with the COLUMNSTORE or COLUMNSTORE_ARCHIVE data compression parameter is not supported when memory-optimized tempdb metadata is enabled.

Hinweis

Diese Einschränkungen gelten nur beim Verweisen auf tempdb-Systemsichten, und Sie können beim Zugriff auf eine speicheroptimierte Tabelle in einer Benutzerdatenbank bei Bedarf eine temporäre Tabelle in derselben Transaktion erstellen.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.

Mit dem folgenden T-SQL-Befehl können Sie überprüfen, ob tempdb speicheroptimiert ist:You can verify whether or not tempdb is memory-optimized by using the following T-SQL command:

SELECT SERVERPROPERTY('IsTempdbMetadataMemoryOptimized')

Wenn nach dem Aktivieren von speicheroptimierten tempdb-Metadaten aus irgendeinem Grund ein Fehler beim Starten des Servers auftritt, können Sie das Feature umgehen, indem Sie SQL Server mithilfe der Startoption -f in der Minimalkonfiguration starten.If the server fails to start for any reason after enabling memory-optimized tempdb metadata, you can bypass the feature by starting the SQL Server with minimal configuration using the -f startup option. Dadurch können Sie die Funktion deaktivieren und SQL Server anschließend im normalen Modus neu starten.This will enable you to disable the feature and then restart SQL Server in normal mode.

Kapazitätsplanung für tempdb in SQL ServerCapacity Planning for tempdb in SQL Server

Das Festlegen der angemessenen Größe von tempdb in einer SQL ServerSQL Server-Produktionsumgebung hängt von vielen Faktoren ab.Determining the appropriate size for tempdb in a SQL ServerSQL Server production environment depends on many factors. Wie bereits zuvor in diesem Artikel beschrieben, schließen diese Faktoren die vorhandene Workload und die verwendeten SQL ServerSQL Server-Funktionen ein.As described previously in this article, these factors include the existing workload and the SQL ServerSQL Server features that are used. Es wird empfohlen, die vorhandene Workload durch Ausführen folgender Aufgaben in einer SQL Server-Testumgebung zu analysieren:We recommend that you analyze the existing workload by performing the following tasks in a SQL Server test environment:

  • Legen Sie die automatische Vergrößerung für tempdb fest.Set autogrow on for tempdb.
  • Führen Sie einzelne Abfragen oder Ablaufverfolgungsdateien für die Arbeitsauslastung aus, und überwachen Sie die Speicherplatzbelegung von tempdb.Execute individual queries or workload trace files and monitor tempdb space use.
  • Führen Sie Indexverwaltungsvorgänge aus, erstellen Sie beispielsweise Indizes neu, und überwachen Sie den Speicherplatz von tempdb.Execute index maintenance operations, such as rebuilding indexes and monitor tempdb space.
  • Verwenden Sie die Werte zur Speicherplatzverwendung aus den vorherigen Schritten, um die Gesamtarbeitsauslastung vorherzusagen. Passen Sie diesen Wert für prognostizierte gleichzeitige Aktivitäten an, und legen Sie dann die Größe von tempdb entsprechend fest.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.

Überwachen der Speicherplatzverwendung in tempdbHow to Monitor tempdb use

Wenn nicht mehr genügend Speicherplatz in tempdb vorhanden ist, kann das erhebliche Störungen in der SQL ServerSQL Server-Produktionsumgebung verursachen und dazu führen, dass ausgeführte Anwendungen Vorgänge nicht abschließen können.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. Sie können mit der dynamischen Verwaltungssicht sys.dm_db_file_space_usage den in den tempdb-Dateien verwendeten Speicherplatz überwachen: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;

Darüber hinaus können Sie die dynamischen Verwaltungssichten sys.dm_db_session_space_usage und sys.dm_db_task_space_usage verwenden, um die Seitenzuordnung und die Zuordnungsaufhebung in tempdb auf der Sitzungs- oder Taskebene zu überwachen.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. Mithilfe dieser Sichten können große Abfragen, temporäre Tabellen oder Tabellenvariablen identifiziert werden, die große Speicherplatzmengen von tempdb belegen.These views can be used to identify large queries, temporary tables, or table variables that are using lots of tempdb disk space. Es gibt ebenfalls mehrere Leistungsindikatoren, die zum Überwachen des in tempdb verfügbaren freien Speicherplatzes verwendet werden können. Diese können auch verwendet werden, um die Ressourcen zu überwachen, die tempdb verwenden.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. Weitere Informationen finden Sie im nächsten Abschnitt.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;;

SORT_IN_TEMPDB-Option für Indizes SORT_IN_TEMPDB Option For Indexes
Systemdatenbanken System Databases
sys.databases sys.databases
sys.master_files sys.master_files
Verschieben von DatenbankdateienMove Database Files