DBAtlas · Veritabanı operasyon atlası

tempdb contention ve alan kullanımını teşhis et

SQL ServerPerformans

Komut

-- 1) Anlik tempdb sayfa latch beklemeleri (2:1:1 PFS, 2:1:2 GAM, 2:1:3 SGAM):
SELECT wt.session_id, wt.wait_type, wt.wait_duration_ms, wt.resource_description
FROM   sys.dm_os_waiting_tasks wt
WHERE  wt.wait_type LIKE N'PAGELATCH[_]%'
  AND  wt.resource_description LIKE N'2:%';

-- 2) tempdb'yi en cok kullanan oturumlar (MB):
SELECT TOP (20) su.session_id, s.login_name, s.program_name,
       (su.user_objects_alloc_page_count - su.user_objects_dealloc_page_count) * 8 / 1024         AS user_obj_mb,
       (su.internal_objects_alloc_page_count - su.internal_objects_dealloc_page_count) * 8 / 1024 AS internal_obj_mb
FROM   sys.dm_db_session_space_usage su
  JOIN sys.dm_exec_sessions s ON s.session_id = su.session_id
WHERE  s.is_user_process = 1
ORDER BY su.user_objects_alloc_page_count + su.internal_objects_alloc_page_count
       - su.user_objects_dealloc_page_count - su.internal_objects_dealloc_page_count DESC;

-- 3) Genel dagilim ve version store:
SELECT SUM(unallocated_extent_page_count) * 8 / 1024       AS free_mb,
       SUM(user_object_reserved_page_count) * 8 / 1024     AS user_obj_mb,
       SUM(internal_object_reserved_page_count) * 8 / 1024 AS internal_obj_mb,
       SUM(version_store_reserved_page_count) * 8 / 1024   AS version_store_mb
FROM   tempdb.sys.dm_db_file_space_usage;

SELECT DB_NAME(database_id) AS db, reserved_page_count * 8 / 1024 AS version_store_mb
FROM   sys.dm_tran_version_store_space_usage
ORDER BY reserved_page_count DESC;

-- 4) Dosya sayisi / esit boyut ve memory-optimized metadata:
SELECT name, type_desc, size * 8 / 1024 AS size_mb, growth * 8 / 1024 AS growth_mb, is_percent_growth
FROM   tempdb.sys.database_files;
SELECT SERVERPROPERTY('IsTempdbMetadataMemoryOptimized') AS tempdb_metadata_memopt;

Ne yapar?

tempdb allocation sayfalarındaki (PFS/GAM/SGAM) ve sistem tablolarındaki PAGELATCH beklemelerini, tempdb'yi en çok kullanan oturumları (temp tablo vs. sort/hash spill), version store'u hangi veritabanının şişirdiğini ve dosya yapılandırmasını gösterir.

Ne zaman kullanılır?

Yoğun temp tablo kullanan iş yükünde PAGELATCH_UP/EX beklemeleri artınca, tempdb dolduğunda (1105/9002), version store büyümesinde.

Dikkat

2:1:1, 2:1:2, 2:1:3 ve 8088'in katı PFS sayfaları allocation contention'dır: çözüm eşit boyutlu, eşit growth'lu birden çok data file'dır (8 çekirdeğe kadar çekirdek başına bir, sonra 4'er artır). Sistem tablosu sayfalarında (2:1:1xx) contention için 2019+ memory-optimized tempdb metadata açılır (restart gerektirir). Version store büyüyorsa en eski açık snapshot transaction'ı bul; tempdb shrink çözüm değildir. Sadece sorgu; risksiz.

DBAtlas'ta aç →

İlgili