Çalışma Alanı Belleği Dahili


13

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?

Yanıtlar:


13

hatta bu bellek verme kuyruğundan geçmek mi yoksa diske hemen dökmek mi?

Bu şekilde çalışmaz. Bellek hibesi gerektiren bir plan seçildikten sonra, sorgu kuyruğa girmesi için hibe almalıdır. Dökülme, varsa, yürütme döngüsünde çok daha sonra gerçekleşir. Bir sorgu, hibe olmadan devam etmeye ve 'dökülmeye' karar veremez. Hibe almalı ve bunu yapmayı sağlamalıdır. Hibe yetersiz kalırsa (kötü tahmin veya talep edilenden çok daha düşük hibe alması nedeniyle), sorgu dökülmeye zorlanır.

sorgu iyileştirici kötü istatistikler veya eksik dizinler nedeniyle bunu fark ederse

Kesinlikle konuşmak gerekirse optimizer değil, sorgu yürütme. Sorgu Optimize Edici'nin yalnızca plana karar vermede söz hakkı vardır, ancak plan seçilip uygulamaya konulduktan sonra optimize edici resim dışındadır. Ayrıca, 'eksik dizinler' burada bir rol oynamaz. Eksik bir dizin kötü bir planı zorlayabilir, ancak bu planın tam olarak hangi dizinlerin gerçekten var olduğunu göz önünde bulundurarak oluşturulduğundan, bu 'kötü' planın nasıl yürütüldüğünü etkileyemez, böylece tam olarak ne yapabileceğini ve yapamayacağını bilir. Döküntüler neredeyse her zaman kötü tahminlerden kaynaklanır. optimize edici ve yürütmedeki kötü istatistikler veya kötü kardinalite tahmin algoritmaları (ayrıntılara girerseniz gerçekten karmaşıklaşır, böylece burada duracağım).

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

Ne yazık ki evet. Ancak iyileştirici gereken mevcut RAM güçlendirir bir plan geldi.

Okumayı tavsiye anlama SQL sunucusu bellek verme bir tarafından konuyla ilgili en iyi bilgi olduğunu geniş marj.


4
Remus Rusanu (MSFT) Ayrıca, arama belleği tahsisi gerektiren operatörlere web araması sırasında blog yazılarınıza da baktım. Bu forumu destekleyen gerçek bir mücevher olduğun için teşekkür ederim.
SQL Öğrenen


Remus, Adam Machanic'in PASS zirve oturumunun çok kapsamlı olduğunu ve çalışma alanı belleği ile ilgili soruları netleştirdiğini söyledi.
SQL Öğrenci
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.