Training
Modul
Konfigurieren von SQL Server-Ressourcen für optimale Leistung - Training
Konfigurieren von SQL Server-Ressourcen für optimale Leistung
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
SQL-Datenbank in Microsoft Fabric
Dieser Artikel beschreibt die tempdb
-Systemdatenbank, eine globale Ressource, die allen Benutzern zur Verfügung steht, die mit einer Instanz von SQL-Server, Azure SQL-Datenbank oder Azure SQL Managed Instance verbunden sind.
Die tempdb
-Systemdatenbank ist eine globale Ressource, die Folgendes umfasst:
Temporäre Benutzerobjekte, die explizit erstellt werden. Hierzu gehören globale oder lokale temporäre Tabellen und Indizes, temporäre gespeicherte Prozeduren, Tabellenvariablen, in Tabellenwertfunktionen zurückgegebene Tabellen und Cursor.
Interne Objekte, die von der Datenbank-Engine erstellt werden. Dazu gehören:
SORT_IN_TEMPDB
angegeben ist) oder bei bestimmten GROUP BY
-, ORDER BY
- oder UNION
-Abfragen.Jedes interne Objekt verwendet mindestens neun Seiten: eine IAM-Seite (Index Allocation Map) und eine achtseitige Erweiterung. Weitere Informationen zu Seiten und Erweiterungen finden Sie unter Seiten und Blöcke.
Versionsspeicher. Dies sind Sammlungen von Datenseiten, in denen die Datenzeilen zur Unterstützung von Features für die Zeilenversionsverwaltung gespeichert werden. Es gibt zwei Speichertypen: einen allgemeinen Versionsspeicher und einen Versionsspeicher für die Online-Indexerstellung. Die Versionsspeicher beinhalten Folgendes:
READ COMMITTED
durch Isolation der Zeilenversionsverwaltung oder durch Transaktionen der Momentaufnahmeisolation verwendet.AFTER
-Trigger.Vorgänge in tempdb
werden minimal protokolliert, sodass ein Rollback für Transaktionen ausgeführt werden kann. tempdb
wird bei jedem Start von SQL-Server neu erstellt, sodass das System immer mit einer bereinigten Kopie der Datenbank startet. Temporäre Tabellen und gespeicherte Prozeduren werden beim Trennen der Verbindung automatisch gelöscht; es sind keine Verbindungen aktiv, wenn das System heruntergefahren wird.
tempdb
muss zwischen einzelnen SQL-Server-Sitzungen niemals etwas speichern. Sicherungs- und Wiederherstellungsvorgänge sind für tempdb
nicht zulässig.
In der folgenden Tabelle sind die anfänglichen Konfigurationswerte der Daten- und Protokolldateien von tempdb
in SQL Server aufgelistet. Diese Werte basieren auf den Standardwerten für die model
-Datenbank. Die Größe dieser Dateien kann sich in den verschiedenen Editionen von SQL-Server geringfügig unterscheiden.
Datei | Logischer Name | Physikalischer Name | Ursprüngliche Größe | Dateivergrößerung (file growth) |
---|---|---|---|---|
Primäre Daten | tempdev |
tempdb.mdf |
8 Megabytes | Automatische Vergrößerung um 64 MB, bis der Speicherplatz auf dem Datenträger erschöpft ist |
Sekundäre Datendateien | temp# |
tempdb_mssql_#.ndf |
8 Megabytes | Automatische Vergrößerung um 64 MB, bis der Speicherplatz auf dem Datenträger erschöpft ist |
Protokoll | templog |
templog.ldf |
8 Megabytes | Automatische Vergrößerung um 64 MB, bis der Maximalwert von 2 TB erreicht wird |
Die Anzahl von sekundären Datendateien richtet sich nach der Anzahl der (logischen) Prozessoren auf dem Computer. 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. Wenn mehr als acht logische Prozessoren vorhanden sind, verwenden Sie acht Datendateien. Sollte weiterhin ein Konflikt bestehen, erhöhen Sie die Anzahl von Datendateien um ein Vielfaches von vier, bis der Konflikt auf ein akzeptables Ausmaß reduziert ist. Alternativ dazu können Sie auch die Arbeitsauslastung oder den Code ändern.
Der Standardwert für die Anzahl der Datendateien basiert auf den allgemeinen Richtlinien in KB 2154845.
Fragen Sie die Sicht tempdb.sys.database_files
ab, um die aktuelle Größe und die Vergrößerungsparameter von tempdb
zu überprüfen.
Informationen zum Verschieben der Daten- und Protokolldateien von tempdb
finden Sie unter Verschieben von Systemdatenbanken.
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. Zum Anzeigen der aktuellen Einstellungen dieser Optionen verwenden Sie die Katalogsicht sys.databases .
Datenbankoption | Standardwert | Kann geändert werden. |
---|---|---|
ALLOW_SNAPSHOT_ISOLATION | OFF | Ja |
ANSI_NULL_DEFAULT | OFF | Ja |
ANSI_NULLS | OFF | Ja |
ANSI_PADDING | OFF | Ja |
ANSI_WARNINGS | OFF | Ja |
ARITHABORT | OFF | Ja |
AUTO_CLOSE | OFF | No |
AUTO_CREATE_STATISTICS | ON | Ja |
AUTO_SHRINK | OFF | No |
AUTO_UPDATE_STATISTICS | ON | Ja |
AUTO_UPDATE_STATISTICS_ASYNC | OFF | Ja |
CHANGE_TRACKING | OFF | No |
CONCAT_NULL_YIELDS_NULL | OFF | Ja |
CURSOR_CLOSE_ON_COMMIT | OFF | Ja |
CURSOR_DEFAULT | GLOBAL | Ja |
Datenbankverfügbarkeitsoptionen | ONLINE MULTI_USER READ_WRITE |
No Nr. No |
DATE_CORRELATION_OPTIMIZATION | OFF | Ja |
DB_CHAINING | ON | No |
ENCRYPTION | OFF | No |
MIXED_PAGE_ALLOCATION | OFF | No |
NUMERIC_ROUNDABORT | OFF | Ja |
PAGE_VERIFY | CHECKSUM für neue Installationen von SQL-Server NONE für Upgrades von SQL Server |
Ja |
PARAMETERIZATION | SIMPLE | Ja |
QUOTED_IDENTIFIER | OFF | Ja |
READ_COMMITTED_SNAPSHOT | OFF | No |
RECOVERY | SIMPLE | No |
RECURSIVE_TRIGGERS | OFF | Ja |
Service Broker-Optionen | ENABLE_BROKER | Ja |
TRUSTWORTHY | OFF | No |
Eine Beschreibung dieser Datenbankoptionen finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).
Das Verhalten von tempdb
in Azure SQL-Datenbank unterscheidet sich vom Verhalten in SQL Server, Azure SQL Managed Instance und SQL Server auf Azure-VMs.
Einzel- und Pooldatenbanken in Azure SQL-Datenbank unterstützen globale temporäre Tabellen und globale temporäre gespeicherte Prozeduren, die auf die Datenbankebene beschränkt sind und in tempdb
gespeichert werden. Globale temporäre Tabellen und globale temporäre gespeicherte Prozeduren sind für alle Benutzersitzungen innerhalb derselben Datenbank freigegeben. Benutzersitzungen von anderen Datenbanken können nicht auf globale temporäre Tabellen zugreifen. Weitere Informationen finden Sie unter Database scoped global temporary tables (Azure SQL-Datenbank) (Globale temporäre Tabellen auf Datenbankebene (Azure SQL-Datenbank)).
Bei Singletons verfügt jeder einzelne Singleton auf einem logischen Server über einen eigenen tempdb
. In einem Pool für elastische Datenbanken ist tempdb
eine freigegebene Ressource für alle Datenbanken desselben Pools, aber in einer Datenbank erstellte temporäre Objekte sind nicht in den anderen Datenbanken desselben Pools sichtbar.
Bei Einzel- und Pooldatenbanken in Azure SQL-Datenbank sind von allen Systemdatenbanken nur die master
-Datenbank und die tempdb
-Datenbanken zugänglich. Weitere Informationen finden Sie unter Was ist ein logischer Server in Azure?
Informationen zu tempdb
-Größen in Azure SQL-Datenbank finden Sie hier:
Azure SQL Managed Instance unterstützt temporäre Objekte auf dieselbe Weise wie SQL Server, wobei alle globalen temporären Tabellen und globalen temporären gespeicherten Prozeduren für alle Benutzersitzungen innerhalb derselben verwalteten Instanz zugänglich sind. Ebenso ist der Zugriff auf alle Systemdatenbanken möglich.
Sie können die Anzahl der tempdb
-Dateien, deren Vergrößerungsinkremente und deren maximale Größe konfigurieren. Weitere Informationen zum Konfigurieren von tempdb
-Einstellungen in Azure SQL Managed Instance finden Sie unter Konfigurieren von tempdb-Einstellungen für Azure SQL Managed Instance.
Weitere Informationen zu tempdb
-Größen in Azure SQL Managed Instance finden Sie unter Ressourcenlimits.
Eine SQL-Datenbank in Microsoft Fabric unterstützt globale temporäre Tabellen und globale temporäre gespeicherte Prozeduren auf Datenbankebene und gespeichert in tempdb
. Globale temporäre Tabellen und globale temporäre gespeicherte Prozeduren sind für alle Benutzersitzungen innerhalb derselben Datenbank freigegeben. Benutzersitzungen von anderen Datenbanken können nicht auf globale temporäre Tabellen zugreifen. Weitere Informationen finden Sie unter "Datenbankbereichsbezogene temporäre Tabellen".
Weitere Informationen zu tempdb
Größen in der SQL-Datenbank in Microsoft Fabric finden Sie in den Ressourcengrenzwerten im Featurevergleich: Azure SQL-Datenbank und SQL-Datenbank in Microsoft Fabric.
Die folgenden Vorgänge können in der tempdb
-Datenbank nicht ausgeführt werden:
tempdb
befindet sich im Besitz von sa.DBCC CHECKALLOC
.DBCC CHECKCATALOG
.OFFLINE
.READ_ONLY
.Jeder Benutzer kann temporäre Objekte in tempdb
erstellen. Benutzer haben nur Zugriff auf ihre eigenen Objekte, es sei denn, ihnen wurden zusätzliche Berechtigungen zugewiesen. Es ist möglich, die Berechtigung zum Herstellen einer Verbindung mit tempdb
zu widerrufen, um einen Benutzer an der Verwendung von tempdb
zu hindern. Dies wird jedoch nicht empfohlen, da die Verwendung von tempdb
für einige Routinevorgänge erforderlich ist.
Die Größe und die physische Platzierung der tempdb
-Datenbank kann sich auf die Leistung eines Systems auswirken. Wenn z. B. eine zu geringe Größe für tempdb
definiert wurde, muss bei jedem Neustart der SQL-Server-Instanz möglicherweise ein Teil der Systemverarbeitungslast dafür aufgewendet werden, die tempdb
-Datenbank automatisch auf den Umfang zu vergrößern, der für den anfallenden Workload erforderlich ist.
Verwenden Sie nach Möglichkeit die schnelle Dateiinitialisierung, um die Leistung von Vergrößerungsvorgängen für Datendateien zu verbessern.
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. Durch die Vorabzuordnung wird verhindert, dass tempdb
zu häufig vergrößert und die Leistung dadurch beeinträchtigt wird. Für die tempdb
-Datenbank sollte die automatische Vergrößerung festgelegt werden, um den Speicherplatz für nicht geplante Ausnahmen zu erhöhen.
Die Datendateien müssen in jeder Dateigruppe gleich groß sein, da SQL Server einen Algorithmus zum proportionalen Füllen verwendet, der Zuweisungen in Dateien mit mehr freiem Speicherplatz bevorzugt. 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.
Setzen Sie das Vergrößerungsinkrement der Datei auf einen angemessenen Wert, der in allen Datendateien gleich groß ist, um zu verhindern, dass die tempdb
-Datenbankdateien um einen zu kleinen Wert anwachsen. Wenn das Wachstum der Datei im Vergleich zur in tempdb
geschrieben Datenmenge zu gering ist, muss tempdb
möglicherweise häufig über automatische Vergrößerungs-Events erweitert werden. Autogrowth-Ereignisse wirken sich negativ auf die Leistung aus.
Verwenden Sie die folgende Abfrage, um die aktuelle Größe und die Vergrößerungsparameter von tempdb
zu überprüfen:
SELECT FileName = df.name,
current_file_size_MB = df.size*1.0/128,
max_size = CASE df.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_value =
CASE
WHEN df.growth = 0 THEN df.growth
WHEN df.growth > 0 AND df.is_percent_growth = 0 THEN df.growth*1.0/128.0
WHEN df.growth > 0 AND df.is_percent_growth = 1 THEN df.growth
END,
growth_increment_unit =
CASE
WHEN df.growth = 0 THEN 'Size is fixed.'
WHEN df.growth > 0 AND df.is_percent_growth = 0 THEN 'Growth value is MB.'
WHEN df.growth > 0 AND df.is_percent_growth = 1 THEN 'Growth value is a percentage.'
END
FROM tempdb.sys.database_files AS df;
GO
Platzieren Sie die tempdb
-Datenbank auf einem schnellen E/A-Subsystem. Verwenden Sie Datenträgerstriping, wenn viele Datenträger direkt angeschlossen sind. Einzelne oder Gruppen von tempdb
-Datendateien müssen nicht unbedingt auf verschiedenen Datenträgern oder Spindeln gespeichert sein, es sei denn, Sie stellen außerdem E/A-Engpässe fest.
Platzieren Sie die tempdb
-Datenbank nicht auf denselben Datenträgern, die auch von Benutzerdatenbanken genutzt werden.
Hinweis
Obwohl die Datenbankoption DELAYED_DURABILITY
auf DEAKTIVIERT tempdb
festgelegt ist, verwendet SQL Server faule Commits zum Leeren von tempdb
-Protokolländerungen auf dem Datenträger, da tempdb
beim Start erstellt wird und den Wiederherstellungsvorgang nicht ausführen muss.
UP
-Latches (Updatelatches) zu verringern.tempdb
wurde verringert, um die E/A-Bandbreite des Datenträgers für die tempdb
-Protokolldatei zu reduzieren.tempdb
-Datendateien hinzu. Für diese Aufgabe können Sie die neue Eingabesteuerung der Benutzeroberfläche im Abschnitt Datenbank-Engine-Konfiguration und den Befehlszeilenparameter /SQLTEMPDBFILECOUNT
verwenden. Standardmäßig fügt das Setup die Anzahl von tempdb
-Datendateien hinzu, die der Anzahl von logischen Prozessoren entspricht, höchstens jedoch acht.tempdb
-Datendateien vorhanden sind, werden alle Dateien je nach Wachstumseinstellungen automatisch gleichzeitig und um denselben Wert vergrößert. Ablaufverfolgungsflag 1117 ist nicht mehr erforderlich. Weitere Informationen finden Sie unter -T1117- und -T1118-Änderungen für TEMPDB und Benutzerdatenbanken.tempdb
verwenden einheitliche Erweiterungen. Ablaufverfolgungsflag 1118 ist nicht mehr erforderlich. Weitere Informationen zu Leistungsverbesserungen in tempdb
finden Sie im Blogbeitrag TEMPDB - Files and Trace Flags and Updates, Oh My! (TEMPDB – Dateien und Ablaufverfolgungsflags und Updates, o je!).AUTOGROW_ALL_FILES
aktiviert. Diese kann nicht geändert werden.tempdb
-Dateizuweisung. SQL Setup warnt Kunden, wenn die anfängliche Dateigröße auf einen Wert von mehr als 1 GB festgelegt ist und wenn die Schnelle Dateiinitialisierung nicht aktiviert ist, um Instanz-Startup-Verzögerungen zu verhindern.tempdb
-Versionsspeichernutzung für DBAs dienen, welche die tempdb
-Größenanpassung basierend auf der Anforderung bei der Versionsspeichernutzung pro Datenbank proaktiv planen können.tempdb
-Auslastung reduziert wird.FILE_FLAG_WRITE_THROUGH
-Option nicht beim Öffnen von Dateien für tempdb
, um maximalen Datenträgerdurchsatz zu ermöglichen. Da tempdb
beim Starten von SQL Server neu erstellt wird, sind diese Optionen nicht wie für für andere Systemdatenbanken und Benutzerdatenbanken zur Konsistenz von Daten erforderlich. Weitere Informationen zu FILE_FLAG_WRITE_THROUGH
finden Sie unter Protokollierungs- und Datenspeicheralgorithmen zur Erweiterung der Datenzuverlässigkeit in SQL Server.tempdb
und erschließen eine neue Ebene der Skalierbarkeit. Weitere Informationen hierzu finden Sie im Demo-Video zu „How (and When) To: Speicheroptimierte TempDB-Metadaten. Weitere Informationen finden Sie unter Überwachung und Problembehandlung für speicheroptimierte tempdb-Metadaten.tempdb
sehr häufig auftretendes Problem. Diese Verbesserung ändert die Verwaltung paralleler Vorgänge bei PFS-Aktualisierungen, sodass die Aktualisierung nicht mit einem exklusiven Latch, sondern über einen gemeinsamen Latch erfolgen kann. Dieses Verhalten ist ab SQL Server 2019 (15.x) in allen Datenbanken (TempDB eingeschlossen) standardmäßig aktiviert. Weitere Informationen zu PFS-Seiten finden Sie Hintergrundinformationen: GAM-, SGAM- und PFS-Seiten.tempdb
-Datendateien, deren Anzahl sich nach der Anzahl von logischen Kernen richtet (bis zu acht Datendateien). Dies gilt nicht für direkte Upgrades der Neben- oder Hauptversion. Jede tempdb
-Datei ist 8 MB groß und wird automatisch um 64 MB vergrößert. Dieses Verhalten ähnelt dem der SQL Server-Standardinstallation unter Windows.tempdb
-lastige Workloads von Nutzen. Weitere Informationen zu GAM- und SGAM-Seiten finden Sie in Hintergrundinformationen: GAM-, SGAM- und PFS-Seiten. Weitere Informationen hierzu finden Sie in Verbesserungen für die Parallelität von Systemseitenlatches (Ep. 6) | Verfügbar gemachte Daten.Bislang stellten Metadatenkonflikte in tempdb
einen Engpass für die Skalierbarkeit vieler Workloads auf SQL-Server dar. SQL-Server 2019 (15.x) führt ein neues Feature ein, das zur In-Memory Database-Featurefamilie gehört: Speicheroptimierte tempdb-Metadaten.
Dieses Feature beseitigt diesen Engpass und ermöglicht ein neues Maß an Skalierbarkeit für tempdb
-intensive Workloads. In SQL Server 2019 (15.x) können die an der Verwaltung von Metadaten temporärer Tabellen beteiligten Systemtabellen in nicht dauerhafte speicheroptimierte Tabellen ohne Latches verschoben werden.
Hinweis
Derzeit ist das speicheroptimierte TempDB-Metadatenfeature in Azure SQL-Datenbank, SQL-Datenbank in Microsoft Fabric oder Azure SQL verwaltete Instanz nicht verfügbar.
In diesem siebenminütigen Video erhalten Sie einen Überblick darüber, wann und wie speicheroptimierte TempDB-Metadaten verwendet werden sollten:
Mit dem folgenden Skript können Sie dieses neue Feature aktivieren:
ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON;
Damit diese Konfigurationsänderung wirksam wird, muss der Dienst neu gestartet werden.
Mit dem folgenden T-SQL-Befehl können Sie überprüfen, ob tempdb
speicheroptimiert ist:
SELECT SERVERPROPERTY('IsTempdbMetadataMemoryOptimized');
Wenn nach dem Aktivieren von speicheroptimierten TempDB-Metadaten der Server aus irgendeinem Grund nicht startet, können Sie das Feature umgehen, indem Sie die SQL Server-Instanz in der Minimalkonfiguration über die Startoption -f starten. Dann können Sie das Feature deaktivieren und SQL Server im normalen Modus neu starten.
Zum Schutz des Servers vor potenziellen Bedingungen mit nicht genügendem Arbeitsspeicher können Sie tempdb
an einen Ressourcenpool binden. Dies erfolgt über den Befehl ALTER SERVER
anstelle der Schritte, die Sie normalerweise befolgen, um einen Ressourcenpool an eine Datenbank zu binden.
ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON (RESOURCE_POOL = 'pool_name');
Diese Änderung erfordert außerdem einen Neustart, um wirksam zu werden, selbst dann, wenn die speicheroptimierten TempDB-Metadaten bereits aktiviert sind.
Das Ein- und Ausschalten dieser Funktion ist nicht dynamisch. 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.
Eine einzelne Transaktion darf nicht auf speicheroptimierte Tabellen in mehreren Datenbanken zugreifen. Bei Transaktionen, an denen eine speicheroptimierte Tabelle in einer Benutzerdatenbank beteiligt ist, ist ein Zugriff auf tempdb
-Systemsichten nicht innerhalb derselben Transaktion möglich. Wenn Sie versuchen, in derselben Transaktion auf tempdb
-Systemsichten zuzugreifen, wird die folgende Fehlermeldung angezeigt:
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:
BEGIN TRAN;
SELECT *
FROM tempdb.sys.tables; -----> Creates a user in-memory OLTP transaction in tempdb
INSERT INTO <user database>.<schema>.<mem-optimized table>
VALUES (1); ----> Tries to create a user in-memory OLTP transaction in the user database but will fail
COMMIT TRAN;
Abfragen in speicheroptimierten Tabellen unterstützen keine Sperr- und Isolationshinweise, daher werden diese Hinweise bei Abfragen in speicheroptimierten tempdb
-Katalogsichten nicht berücksichtigt. Ebenso wie bei anderen Systemkatalogsichten in SQL-Server erfolgen alle Transaktionen für Systemsichten in READ COMMITTED
-Isolation (bzw. in diesem Fall in READ COMMITTED SNAPSHOT
-Isolation).
Columnstore-Indizes können nicht für temporäre Tabellen erstellt werden, wenn speicheroptimierte TempDB-Metadaten aktiviert sind.
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.
Eine gespeicherte Systemprozedur ist verfügbar, um manuell zu bewirken, dass die In-Memory-Engine Speicher im Zusammenhang mit gelöschten Zeilen von In-Memory-Daten freigibt, die zur automatischen Speicherbereinigung freigegeben sind. Dies kann bei der Problembehandlung bestimmter Fehler bei speicheroptimierten tempdb-Metadaten (HkTempDB) aufgrund ungenügenden Arbeitsspeichers helfen. Weitere Informationen finden Sie unter sys.sp_xtp_force_gc (Transact-SQL).
Hinweis
Diese Einschränkungen kommen nur beim Verweisen auf tempdb
-Systemsichten zum Tragen. Sie können bei Bedarf eine temporäre Tabelle in derselben Transaktion erstellen, wenn Sie auf eine speicheroptimierte Tabelle in einer Benutzerdatenbank zugreifen.
Das Festlegen der angemessenen Größe von tempdb
in einer SQL Server-Produktionsumgebung hängt von vielen Faktoren ab. Wie bereits erläutert, gehören die vorhandene Arbeitsauslastung und die verwendeten SQL-Server-Features zu diesen Faktoren.
Es wird empfohlen, die vorhandene Workload durch Ausführen folgender Aufgaben in einer SQL Server-Testumgebung zu analysieren:
tempdb
fest.tempdb
.tempdb
-Speicherplatz.tempdb
entsprechend fest.Unzureichender Speicherplatz in tempdb
kann erhebliche Unterbrechungen in der -SQL-Server-Produktionsumgebung verursachen. Dieses Problem kann auch dazu führen, dass Anwendungen Vorgänge nicht abschließen können. Mit der dynamischen Verwaltungssicht sys.dm_db_file_space_usage können Sie den in den tempdb
-Dateien verwendeten Speicherplatz überwachen:
Die folgenden vier Beispielskripts ermitteln beispielsweise den freien Speicherplatz in tempdb
, den vom Versionsspeicher verwendeten Speicherplatz, den von internen Objekten verwendeten Speicherplatz und den von Benutzerobjekten verwendeten Speicherplatz:
-- 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 tempdb.sys.dm_db_file_space_usage;
-- Determining the amount of 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 tempdb.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 tempdb.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 tempdb.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. Mit diesen Sichten können Sie umfangreiche Abfragen, temporäre Tabellen oder Tabellenvariablen identifizieren, die sehr viel Speicherplatz in tempdb
belegen. Sie können auch verschiedene Leistungsindikatoren verwenden, um den in tempdb
verfügbaren freien Speicherplatz sowie die Ressourcen zu überwachen, die tempdb
verwenden.
Verwenden Sie beispielsweise das folgende Skript, um den von internen Objekten verbrauchten tempdb
-Speicherplatz in allen derzeit ausgeführten Aufgaben in jeder Sitzung zu erhalten:
-- 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;
Verwenden Sie das folgende Skript, um den von internen Objekten verbrauchten tempdb
-Speicherplatz sowohl für derzeit ausgeführte wie für beendete Aufgaben in jeder Sitzung zu erhalten:
-- 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;
Training
Modul
Konfigurieren von SQL Server-Ressourcen für optimale Leistung - Training
Konfigurieren von SQL Server-Ressourcen für optimale Leistung
Dokumentation
Verkleinern der tempdb-Datenbank - SQL Server
Erfahren Sie, wie Sie die tempdb-Datenbank mithilfe von Transact-SQL verkleinern.
Empfehlungen zur Verringerung der Zuordnungsverknügung - SQL Server
Dieser Artikel enthält Eine Lösung für das Problem, bei dem Sie beim Auftreten einer hohen Auslastung des Servers eine schwere Blockierung feststellen.
Sicherstellen, dass ausreichend Speicherplatz für TempDB vorhanden ist
VBA-Referenzdokumentation zum Office-Entwicklerclient