DBAtlas · Veritabanı operasyon atlası

tempdb çekişmesi (SQL Server)

Belirti

PAGELATCH_UP/EX beklemeleri, tempdb allocation (PFS/GAM/SGAM) sayfalarında çekişme, genel yavaşlık.

1. Çekişmeyi doğrula

tempdb'nin sistem sayfalarındaki (2:1:1 gibi) PAGELATCH beklemeleri allocation çekişmesini işaret eder.

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 kullanımını çıkar

Kim ne kadar tempdb kullanıyor? İç nesneler (sort/hash spill) mi, sürüm deposu mu, kullanıcı nesneleri mi?

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. Dosya yapılandırmasını düzelt

tempdb için CPU çekirdek sayısına eşit (8'e kadar), EŞİT boyutlu birden çok data file kullan. SQL 2016+ bunu kurulumda önerir; eski sürümlerde trace flag 1117/1118. Dosyaları hızlı diske (yerel NVMe) al.

4. Kaçak sorguyu bul

Büyük sort/hash spill yapan sorgular tempdb'yi patlatır. Bellek grant'i yetersiz veya kötü plan olanları hedefle; index/plan ile spill'i azalt.

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. Analog: diğer veritabanları

Aynı 'geçici alan çekişmesi' Oracle'da TEMP tablespace (v$tempseg_usage / v$sort_usage), PostgreSQL'de temp_files ve work_mem taşmasıdır. Kök çözüm hep aynı: spill yapan sorguyu düzelt, geçici alanı hızlandır.

DBAtlas'ta aç →