SQL Server 2014 SP1'de etkin bir OLTP 40GB veritabanımız var. IO_Completion beklemeleri, Disk Kuyruk Uzunluğu 900'e yükseldiğinde ve SQL Server yanıt vermeyi durdurduğunda sorgular yavaş bulunur. Ne denedik:
Örneği yeniden başlatın ve bir dakika içinde aynı şekilde davranmaya başlar.
İkinci yeniden başlatmadan sonra, her tempdb veri dosyasının başlangıç boyutunu değiştirdik (16 veri dosyası oluşturuldu) ve düzgün çalışmaya başlıyor.
Not: Ara sonuç kümeleri için tablo değişkenleri kullanıyoruz. Bu sonuç kümeleri çok küçüktür.
Ayda iki kez oldu. Veri dosyalarına manuel olarak biraz yer eklediğimde normal çalışmaya başlıyor. Daha ilginç olan şey, SQL Server 2008 R2 ve SQL Server 2012'de sahip olduğumuz aynı kurulumun (aynı donanım, aynı klasör ve dosya kurulumu, aynı iş yükü) iyi çalışmasıdır.
Kalıcı bir çözüm bulmamıza yardımcı olun.
Tüm veri dosyalarının başlangıç boyutu aynı 1000MB, Geçerli her biri 1500MB'dir. Hepsi aynı. Otomatik büyüme her biri için 100 MB'dir. Bundan önce PFS ve GAM sayfalarının çekişmesiyle karşı karşıya kaldık ve 16'ya çıktık ve sorun çözüldü. Her iki izleme bayrağı (1117 ve 1118) etkinleştirilir. 2 NUMA düğümünde 24 çekirdek. Tüm veri dosyaları aynı birimdedir. Basit disk, SAN yok.
Eşgörünüm fiziksel bir makinede. Tablo Değişkenleri ile sorgular ve Karma Birleşimler ile sorgular en yaygın olarak IO_Completion beklemeleri oluşturur.
WBob'un ayrıntılı cevabı bizi daha ayrıntılı arama yapmaya itti. Daha önce nasıl kaçırdık:
'Tempdb' veritabanındaki 'templog' dosyasının otomatik büyümesi kullanıcı tarafından iptal edildi veya 7704 milisaniyeden sonra zaman aşımına uğradı. Bu dosya için daha küçük bir FILEGROWTH değeri ayarlamak veya açıkça yeni bir dosya boyutu ayarlamak için ALTER DATABASE kullanın.
Bu, bu tür bir sorun ortaya çıktığında günlükte bulduk. Hızlı sürücüyü ayırmak için TempDB'yi hareket ettiriyoruz.