Kısa cevap: tempdb dolması, SQL Server’ın geçici veritabanının disk alanı bitince veya tek dosyada darboğaza girince oluşur. Çözüm için tempdb’i ayrı bir SSD diske taşıyın, CPU sayısı kadar (max 8) eşit boyutlu data file ekleyin, 4-8 GB initial size verin ve auto-growth’u %10 yerine sabit MB (örn. 256 MB) yapın.
Netsis raporları yavaşladı, “tempdb full” hatası alıyor musunuz? SQL Server’ın geçici veritabanı (tempdb) konfigürasyonu Netsis performansını doğrudan etkiler. Bu rehberde tempdb optimizasyonunu adım adım yapıyoruz.
tempdb Nedir?
tempdb, SQL Server’ın geçici tablolar, sıralama operasyonları, hash join, temp variables için kullandığı sistem veritabanıdır. Her SQL Server restart’ında sıfırdan oluşturulur. Netsis raporları, sayım analizleri, MRP hesaplamaları yoğun olarak tempdb’yi kullanır.
Yaygın tempdb Sorunları
- tempdb full: Disk dolu, tempdb büyüyemiyor
- Allocation contention: Çoklu kullanıcı tempdb tablosuna erişimde kilitleniyor
- Slow performance: tempdb tek dosyada darboğaz
- Disk I/O bottleneck: tempdb HDD üzerinde, yavaş
Optimizasyon Adımları
1. Multiple Data File
tempdb için CPU sayısı kadar (max 8) data file ayrılmalı:
-- 4 CPU'lu sunucu için 4 data file
ALTER DATABASE tempdb ADD FILE (
NAME = "tempdev2",
FILENAME = "D:\SQLData\tempdev2.ndf",
SIZE = 1024MB,
FILEGROWTH = 256MB
);
-- Aynı boyut + filegrowth ile 3 file daha ekleyin
2. Ayrı Disk
tempdb’i ana data ve log dosyalarından ayrı bir diske taşıyın. Tercihen SSD.
3. Initial Size
tempdb’i 4-8 GB initial size ile başlatın. Auto-growth ile sürekli büyüme yerine sabit alan ayrımı performansı artırır.
4. Auto-growth Ayarı
%10 default değil, sabit MB değeri (örn. 256 MB) ile artış yapılandırın.
5. Trace Flag 1117 ve 1118 (eski sürümler için)
SQL Server 2014 ve öncesi için:
DBCC TRACEON (1117, -1); -- Tüm files eşit büyür
DBCC TRACEON (1118, -1); -- Mixed extent yerine uniform extent
SQL Server 2016+ da bu trace flagler default olarak aktiftir.
Doğrulama
-- tempdb file durumu
SELECT name, size*8/1024 AS size_mb, max_size*8/1024 AS max_size_mb
FROM tempdb.sys.database_files;
-- tempdb usage
SELECT
SUM(user_object_reserved_page_count) AS user_objects_pages,
SUM(internal_object_reserved_page_count) AS internal_objects_pages
FROM tempdb.sys.dm_db_file_space_usage;
Önleyici Bakım
- Aylık tempdb boyut kontrolü
- SQL restart sonrası boyut otomatik resetlenir
- Aşırı büyüme yaşıyorsanız uygulama tarafında temp tablo kullanımını gözden geçirin
- Disk dolması için monitor (PRTG, Zabbix)
SQL Server tempdb optimizasyonu deneyim ister. Bakım anlaşmamızda haftalık tempdb sağlık kontrolü ve boyut analizi dahildir.
Sıkça Sorulan Sorular
Netsis için kaç tane tempdb data file gerekir?
Sunucunuzun mantıksal CPU çekirdeği sayısı kadar (en fazla 8) data file ayırmanız önerilir. Örneğin 4 çekirdekli bir sunucuda 4 eşit boyutlu data file kullanın; tümü aynı SIZE ve FILEGROWTH değerine sahip olmalı ki allocation contention dengeli dağılsın.
tempdb full hatası alıyorum, restart çözer mi?
SQL Server servisini yeniden başlatmak tempdb’i sıfırdan oluşturur ve boyutunu initial size’a döndürür, bu yüzden geçici rahatlama sağlar. Ancak kalıcı çözüm değildir; tempdb’i ayrı diske taşımadan ve initial size’ı 4-8 GB’a çıkarmadan sorun mesai içinde tekrar eder.
Trace Flag 1117 ve 1118’i hangi SQL Server sürümünde açmam gerekir?
Bu trace flagleri yalnızca SQL Server 2014 ve öncesi sürümlerde manuel açmanız gerekir. SQL Server 2016 ve sonraki sürümlerde her ikisi de tempdb için varsayılan olarak aktiftir, ayrıca etkinleştirmenize gerek yoktur.
tempdb’i hangi diske koymalıyım?
tempdb’i ana veri (.mdf) ve log (.ldf) dosyalarından ayrı, tercihen SSD veya NVMe bir diske koyun. tempdb yoğun rastgele I/O ürettiği için ayrı hızlı disk hem raporları hem genel Netsis performansını belirgin biçimde hızlandırır. Düzenli kontrol için bakım anlaşması önerilir.