Christian Bolton, Brent Ozar vb. Tarafından SQL Server 2008 Dahili ve Sorun Giderme (Illinois yerel kütüphaneden ödünç alındı) okuma kitaplarıma göre SQL sunucusunda anlayış ve onay aramaya çalışıyorum ve web üzerinde çok sayıda arama Birisi varsa takdir ediyorum anlayışımı teyit edebilir veya düzeltebilir.
Sorgu belleği desteği gerektiren her sorgu veya işlem için çalışma alanı belleği gerekir. Sırala, Karma Eşleşme, Paralellik (Bundan emin değilim), Toplu Ekle (emin değilim), Dizin Yeniden Oluşturma vb. Kullanarak genel sorguda sorgu çalışma alanı belleği gerekir.
Çalışma Alanı Belleği, SQL Server arabellek havuzunun bir parçasıdır (arabellek havuzunun bir parçası olarak ayrılır) ve maksimum çalışma alanı belleği, arabellek havuzuna ayrılan belleğin% 75'idir. Varsayılan olarak, tek bir sorgu çalışma alanı belleğinin% 25'inden fazlasını alamaz (SQL 2008 / SQL 2012'de - Kaynak Yöneticisi varsayılan iş yükü grubu tarafından kontrol edilir).
Anlayışımın onayını almak
1) 48 GB RAM ve 40 GB olarak yapılandırılmış maksimum sunucu belleğine sahip sistem göz önüne alındığında, maksimum çalışma alanı belleği 30 GB ile sınırlıdır ve tek bir sorgu 10 GB'den fazla çalışma alanı belleği (sorgu belleği) alamaz. Yani büyük karma birleştirme yapan ve 10 GB'den fazla belleğe (çalışma alanı belleği) ihtiyaç duyan bir milyar satırla çalışan kötü bir sorgunuz varsa, bu bellek hibe kuyruğundan geçmek veya hemen diske dökmek mi?
2) Büyük bir sıralama işlemi yapan bir sorguya 5 MB'lık bir çalışma alanı belleği atanmışsa ve sorgu iyileştiricisi hatalı istatistikler veya eksik dizinler nedeniyle bu sorgunun aslında 30 MB'lık bir çalışma alanı belleğine ihtiyaç duyduğunu fark ederse, sorgunun sorgu yürütülmesi sırasında hemen tempdb'ye dökülecektir. Sistem, yürütme sırasında sorgu verilen çalışma alanı belleğini aştığında, yürütme sırasında kullanılabilecek çok sayıda çalışma alanı belleği olsa bile, diske dökülmesi gerekir. Anladığım doğru mu?