DBAtlas · Atlas für Datenbankbetrieb

tempdb-Contention (SQL Server)

Symptom

PAGELATCH_UP/EX-Waits, Contention auf den tempdb-Allokationsseiten (PFS/GAM/SGAM), allgemeine Langsamkeit.

1. Die Contention bestätigen

PAGELATCH-Waits auf tempdb-Systemseiten (etwa 2:1:1) deuten auf Allokations-Contention hin.

SQL Server

SELECT session_id, wait_type, wait_duration_ms, resource_description
FROM sys.dm_os_waiting_tasks
WHERE wait_type LIKE 'PAGELATCH%' AND resource_description LIKE '2:%'
ORDER BY wait_duration_ms DESC;

2. tempdb-Nutzung aufschlüsseln

Wer nutzt wie viel tempdb? Interne Objekte (Sort-/Hash-Spills), der Version Store oder Benutzerobjekte?

SQL Server

SELECT * FROM sys.dm_db_file_space_usage;
SELECT TOP 10 session_id, user_objects_alloc_page_count, internal_objects_alloc_page_count
FROM sys.dm_db_task_space_usage ORDER BY internal_objects_alloc_page_count DESC;

3. Die Dateikonfiguration korrigieren

Verwende für tempdb mehrere GLEICH große Datendateien, entsprechend der Anzahl der CPU-Kerne (bis zu 8). Ab SQL 2016+ wird das bei der Installation empfohlen; in älteren Versionen nutze die Trace Flags 1117/1118. Lege die Dateien auf eine schnelle Platte (lokale NVMe).

4. Die ausufernde Abfrage finden

Abfragen mit großen Sort-/Hash-Spills lassen tempdb explodieren. Nimm diejenigen mit unzureichenden Memory Grants oder schlechten Plänen ins Visier; verringere Spills mit Indizes/Plänen.

SQL Server

SELECT TOP 10 t.text, mg.requested_memory_kb, mg.granted_memory_kb
FROM sys.dm_exec_query_memory_grants mg CROSS APPLY sys.dm_exec_sql_text(mg.sql_handle) t
ORDER BY mg.requested_memory_kb DESC;

5. Entsprechungen in anderen Datenbanken

Dieselbe 'Contention um temporären Platz' ist in Oracle der TEMP-Tablespace (v$tempseg_usage / v$sort_usage) und in PostgreSQL temp_files und Überlauf von work_mem. Die eigentliche Lösung ist immer dieselbe: die auslagernde Abfrage korrigieren und den temporären Speicher beschleunigen.

In DBAtlas öffnen →