Bu sorgu SQL Server’da tempdb veritabanının disk kullanımını detaylı olarak göstermektedir. Aşağıdaki sorgu yardımıyla tempdb içerisinde ne kadar boş alan olduğunu alanın ne kadarı version store, internal ve user object olduğunu görebiliriz.
Tempdb ile ilgili bir sorun oluştuğu zaman ilk bakılması gereken işlemlerden biridir.
SELECT
(SUM(unallocated_extent_page_count) * 1.0 / 128) AS [Free space(MB)],
(SUM(version_store_reserved_page_count) * 1.0 / 128) AS [Used Space by VersionStore(MB)],
(SUM(internal_object_reserved_page_count) * 1.0 / 128) AS [Used Space by InternalObjects(MB)],
(SUM(user_object_reserved_page_count) * 1.0 / 128) AS [Used Space by UserObjects(MB)]
FROM tempdb.sys.dm_db_file_space_usage;
Aşağıdaki resimde bulunan kolonların ne işe yaradığını hangi durumlarda ne gibi senaryolar yapılacağını ele alalım.

Version Store tarafından kullanılan alan ilgili durumlarda artmaktadır. SNAPSHOT ISOLATION, READ COMMITTED SNAPSHOT, Uzun süren transaction’lar ve Online index rebuild işlemlerinde Version store artmaktadır.
Snapshot olup olmadığını görmek için sys.databases kısmından ilgili bölümlere bakılması gerekmektedir. Burada bulunan Database snapshotları kapatmak gerekiyor.

Bu ayar açıkken, uygulama isterse SET TRANSACTION ISOLATION LEVEL SNAPSHOT kullanabilir. Okuma işlemleri kilit almaz. Yazma işlemleri okumayı bloklamaz. SQL Server, satırların eski versiyonlarını tempdb’de tutar.Buna Version Store denir. Bu olayın kötü sonuçları: Update / Delete / Merge arttıkça, Uzun süren transaction varsa. Snapshot kullanan raporlar varsa tempdb Version Store büyür.
SELECT *
FROM sys.dm_tran_active_snapshot_database_transactions;
Eğer aktif snapshot transaction yoksa → risk düşük, Varsa → süreleri kontrol edilir.
Internal objects kısmı sql serverın kendi iç işlemleri için kullandığı alandır. Hash join, sort, spool, cursor, worktable işlemlerinde ilgili bölüm artmaktadır. Bu gibi durumlarda kötü bir execution planın çalışması, büyük sort veya hash işlemlerinde ve yetersiz index bu değerin artmasında en büyük sebeptir.
User Objects kısmında ise kullanıcı tarafında oluşturulan temp tablolar tarafından bu değer artmaktadır.(#tempTable, ##globalTemp, Table variable ) Eğer burası şişiyorsa büyük temp tablolardan kaynaklı olabilir. Drop edilmeyen temp objeler ve uygulama kaynaklı sorunlardan kaynaklanmaktadır.
Not: Tempdb veritabanı server açılır açılmaz hemen doluyorsa tempdb boyutunun artırılması gerekmektedir.
Bu makalede Tempdb Space Usage komutunu görmüş olduk. Başka makalede görüşmek dileğiyle..
“Nerede olursan ol Allah’a karşı gelmekten sakın; yaptığın kötülüğün arkasından bir iyilik yap ki bu onu yok etsin. İnsanlara karşı güzel ahlakın gereğine göre davran.” (Tirmizî, Birr, 55.)