SQL Server tarafından RAM aşırı kullanımı nasıl kontrol edilir?


13

Kullandığım veritabanı sunucusu 6 farklı SQL Server örneği çalıştırıyor. 48 GB RAM'e sahiptir. Ve bunlardan biri 10 GB'den fazla RAM tüketiyor, şimdilik toplam tüketim 20 GB. RAM tüketimi sürekli artıyor. Birkaç gün önce 40 GB'den fazla RAM kullanıyordu ve sunucu çok yavaş yanıt veriyordu. Uygulama, verileri kaydederken kilitlenme sorunlarını gösterir.

Bu yüzden SQL Server hizmetlerini yeniden başlattım.

Hizmetler yeniden başlatıldığında, kullanım 4 GB'a düştü, ancak şimdi büyüyor. Ve 4 veya 5 günde 40 GB'a kadar çıkacağından ve sunucuyu yavaşlatacağından endişeliyim.

Hizmetin yeniden başlatılması sanırım iyi bir seçenek değil.

Farklı kaynaklardan SQL Server için maksimum bellek kullanım boyutunu ayarlayabileceğimizi de buldum. Ve bunun yardımcı olup olmayacağından emin değilim. Sunucu üretim veritabanını kullanıyor ve SQL Server ayarını değiştirirken hizmet durursa bir risk olacaktır bu test edemez.

Herhangi biri bu soruna yardımcı olabilir mi?


1
Varsayılan olarak SQL, performansını en üst düzeye çıkarmak için mümkün olduğunca çok RAM kullanır, bu iyidir - bu, uygulamanızı daha hızlı hale getirmek için ortak sorguları ve sonuçları önbelleğe aldığı anlamına gelir. RAM yalnızca işletim sistemi raporlarının sayfalanmasının gerçekleşebileceği sınıra kadar kullanılır. Bu davranışı geçersiz kılabilirsiniz. Bu MS belgelerine bakın: SQL Server'daki yapılandırma seçeneklerini kullanarak bellek kullanımını ayarlama Bu da yararlı olabilir: Uygun SQL Server yapılandırma ayarları nasıl belirlenir

4
Bu bir sorun DEĞİL - SQL Server için tasarlanmış ve varsayılan davranış !! Ve evet - SQL Server sürecini yeniden başlatmak korkunç bir fikir ... SQL Server olabildiğince çok veri ve dizin sayfasını önbelleğe alıyor - genel sistem performansını bu şekilde optimize ediyor. Bir SQL Server makinesinin her zaman özel bir sunucu olması gerekir - SQL Server'dan başka bir şey yapmaz.
marc_s

Evet anladım. Bu şekilde tasarlandı. Ancak sql sunucusu belleğin çoğunu kullandığında, sunucuyu yavaşlatır ve raporların zaman aşımına uğramasına neden olur. Bu yüzden sql sunucusunun sınırlı bellek kullanmasını önlemek istiyorum.

4
Aslında SQL Server olabildiğince fazla bellek kullanıyorsa, raporları iletmekte daha az zorluk çekeceğini söyleyebilirim . SQL Server'ı yapay olarak kısıtladığınızda (veya kaynaklar için rekabet eden bir kutuya çok fazla örnek koyduğunuzda) bellek hibeleri ve diğer sorunlar nedeniyle sorunları göreceğiniz zamandır.
Aaron Bertrand

Ama neden aniden sql sunucu hizmetini yeniden başlattıktan sonra raporları göstermeye başladı acaba. Raporların görüntülenmemesi nedeniyle uygulamayı çok fazla müşterinin kullanması söz konusu olabilir mi?

Yanıtlar:


14

Bu tasarım gereğidir. SQL Server, bellekte gittikçe daha fazla veri depoladığı için kullanılabilir tüm belleği kullanmalıdır, böylece aynı belleği tekrar tekrar almak için diske geri gitmesi gerekmez.

Tek bir SQL Server örneğinin kullandığı bellek miktarını sınırlamanız gerekiyorsa, bunu Nesne Gezgini'nde örnek adına sağ tıklayıp özellikleri seçerek SQL Server Management Studio'da yapabilirsiniz. Ardından bellek sekmesini seçin ve SQL Server'ın kullanmasına izin verilecek maksimum bellek miktarını ayarlayın. Şimdi bu, SQL Server'ın tüm yönlerini bu bellek miktarıyla sınırlamayacaktır. Bu yalnızca arabellek havuzunu ve yürütme planı önbelleğini denetler. CLR, Tam Metin, SQL Server exe dosyaları tarafından kullanılan gerçek bellek, SQL Agent, genişletilmiş saklı yordamlar vb. Gibi şeyler bu ayar tarafından kontrol edilmez. Ancak bu diğer şeyler genellikle o kadar fazla belleğe ihtiyaç duymazlar, bu bellek havuzu ve belleğin büyük bir kısmını gerektiren yürütme planı önbelleğidir.

Bu ayarı bir örnekte ayarlarsanız, tüm örneklerde birbirlerinin üzerine basmamaları için ayarlamak istersiniz.

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.