Contenção no tempdb (SQL Server)
Sintoma
Esperas PAGELATCH_UP/EX, contenção nas páginas de alocação do tempdb (PFS/GAM/SGAM), lentidão geral.
1. Confirme a contenção
Esperas PAGELATCH em páginas de sistema do tempdb (como 2:1:1) indicam contenção de alocação.
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. Detalhe o uso do tempdb
Quem está usando quanto do tempdb? Objetos internos (spills de sort/hash), o version store ou objetos de usuário?
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. Corrija a configuração dos arquivos
Use vários arquivos de dados de tamanho IGUAL para o tempdb, em número igual ao de núcleos de CPU (até 8). O SQL 2016+ recomenda isso na instalação; em versões antigas, use os trace flags 1117/1118. Coloque os arquivos em disco rápido (NVMe local).
4. Encontre a consulta descontrolada
Consultas com grandes spills de sort/hash estouram o tempdb. Mire nas que têm memory grants insuficientes ou planos ruins; reduza os spills com índices/planos.
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. Equivalentes em outros bancos
A mesma 'contenção de espaço temporário' é o tablespace TEMP no Oracle (v$tempseg_usage / v$sort_usage) e temp_files e estouro de work_mem no PostgreSQL. A correção de raiz é sempre a mesma: corrija a consulta que faz spill e acelere o espaço temporário.