SQL Server TempDB Doldu: Alanı Kimin Tükettiğini Bulma
TempDB dosyası, version store ve disk doluluğu arasındaki farkı bulur; tüketen oturum veya büyüme sınırına göre güvenli müdahale sırası sunar.
Operasyonel Güvenlik ve Risk Uyarısı
Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.
1. Belirti / Symptom
- M34 TempDB boş alanı < %10; `tempdb is full`, `Could not allocate space for object ... in database 'tempdb'` gibi hatalar.
- Sort/hash spill, geçici tablo ve row-version kullanan sorgular başarısız olabilir.
2. Etki / Impact
Birden çok veritabanındaki sorgular ve işlemler etkilenir; TempDB instance genelinde paylaşıldığı için sorun tek uygulamayla sınırlı kalmayabilir.
3. Teşhis / Diagnosis
SELECT file_id,
total_page_count * 8 / 1024 AS total_mb,
unallocated_extent_page_count * 8 / 1024 AS free_mb,
user_object_reserved_page_count * 8 / 1024 AS user_mb,
internal_object_reserved_page_count * 8 / 1024 AS internal_mb,
version_store_reserved_page_count * 8 / 1024 AS version_store_mb
FROM tempdb.sys.dm_db_file_space_usage;SELECT TOP (20) s.session_id, s.login_name, s.host_name,
(u.user_objects_alloc_page_count-u.user_objects_dealloc_page_count)*8/1024 AS user_mb,
(u.internal_objects_alloc_page_count-u.internal_objects_dealloc_page_count)*8/1024 AS internal_mb
FROM sys.dm_db_session_space_usage AS u
JOIN sys.dm_exec_sessions AS s ON s.session_id = u.session_id
WHERE s.is_user_process = 1
ORDER BY (u.user_objects_alloc_page_count-u.user_objects_dealloc_page_count
+u.internal_objects_alloc_page_count-u.internal_objects_dealloc_page_count) DESC;4. Müdahale / Response
KILL 123; -- 123: doğrulanmış, güvenle durdurulabilecek session_id
KILL 123 WITH STATUSONLY;ALTER DATABASE tempdb MODIFY FILE
(NAME = N'tempdev', SIZE = 16384MB, FILEGROWTH = 1024MB);`tempdev` adı örnektir, sisteminizde farklı olabilir. Dosyanın mevcut boyutundan küçük SIZE vermeyin; OS üzerinde yeterli yer ve makul büyüme aralığı şart.
5. **Kalıcı çözüm:** TempDB'yi iş yüküne uygun boyutlandırın; gereksiz spill'leri, uzun snapshot transaction'larını ve sorgu planlarını düzeltin, disk/alan eşiği için büyüme alarmı ekleyin.
5. Doğrulama / Verification
- M34 tekrar güvenli boş alanı gösteriyor ve artan kullanıma rağmen kararlı.
- Önceden başarısız olan sorgu tamamlanıyor; disk alanı ve TempDB version store trendi düzeldi.
6. Geri Alma / Rollback
- `FILEGROWTH` önceki değere alınabilir; dosya boyutunu küçültmek alan kullanımına bağlıdır ve otomatik rollback yoktur.
- `KILL` geri alınamaz; transaction geri sarılır, uygulama gerekirse tekrar dener.