Management Studio System.OutOfMemoryException


38

Microsoft SQL Server 2012 kullanıyorum ve Management Studio'da buna karşı basit bir sorgu çalıştırmaya çalışıyorum. Aşağıdaki hatayı alıyorum (SSMS'de, sunucuda çalışıyor):

Toplu iş yürütülürken bir hata oluştu. Hata mesajı: 'System.OutOfMemoryException' türünün istisnası atıldı.

Sistemde 24GB RAM yüklüdür ancak görev yöneticisine bakarak sqlservr.exe işlemi sadece 2.9GB kullanıyor.

RAM kullanımını sınırlayan bir ayar var mı?

Yanıtlar:


39

Bu hata, Management Studio'nun SQL Server hizmetinin değil, yetersiz bellek olduğunu gösterir. 64 bit SQL Server kursanız bile, SQL Server Management Studio çalıştırılabilir 32 bit bir uygulamadır.

Bu büyük olasılıkla Management Studio'ya iade ettiğiniz sonuç kümesinin boyutundan kaynaklanıyor. SELECT * FROM really_big_table benzeri bir şey mi yürütüyorsunuz? Daha fazla bilgi için http://support.microsoft.com/kb/2874903 adresine bakın .


19

Mike, aldığınız hata iletisinin SQL Server'dan değil Management Studio uygulamasının kendisinden geldiği konusunda haklıdır. Yerel iş istasyonunuzda tüketilen bellek, muhtemelen istemci uygulamasına 16 milyar satır çekmeye çalışmaktan kaynaklanıyor (bir tablodaki bu kadar veriyi bellek açısından oldukça pahalı hale getirir, bu nedenle TOPvb. - Tüm yerel hafızanızı zaten kullanmanız için yeterli veriyle ne gibi pratik işler yapabileceğinizi bilmiyorum).

Ancak başka bir sorunu ele almak istiyorum: SQL Server'ın kullandığı bellek miktarını değerlendirmek için Görev Yöneticisi'ni kullanmak. Bunu yapma; cesur yüzlü bir yalancı. Bu cevaptan kopyalamak (sorunuz iki katlıdır, bu yüzden onu yinelenen olarak kapatamıyorum):


SQL Server'ın ne kadar bellek kullandığını söylemek için ASLA hiçbir zaman Görev Yöneticisine güvenemezsiniz. Bunun için Görev Yöneticisi'ni kullanmayı bırakın. Performans sayacını kullanın - performans sayacını DMV’leri kullanarak da sorgulayabilirsiniz:

SELECT object_name, cntr_value 
  FROM sys.dm_os_performance_counters
  WHERE counter_name = 'Total Server Memory (KB)';

Bunu Araçlar> Seçenekler> Çevre> Klavye> Sorgu Kısayolları bölümünde bir sorgu kısayolu olarak kaydedebilir ve Görev Penceresinden yanlış sonuçlar almaktan çok daha hızlı bir sorgu penceresinde doğru sonuçlar alabilirsiniz.

Bu sorguları kullanarak ayrıca hafıza basıncını da kontrol edebilirsiniz (ve bunun hakkında bir şey yapıp yapamayacağınızı):

SELECT object_name, cntr_value
  FROM sys.dm_os_performance_counters
  WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_kb FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

EXEC sp_configure 'max server memory';

Yukarıdaki komutlar SQL'in yeni versiyonları içindir. Daha sonra SQL 2008 R2 sunucuları için komutlar biraz farklıdır. Takip eden yorumlar buraya koymak için yeterince biçimlendirilmiş olmadığından, bu sunucular için aşağıya bir yazı daha ekleyeceğim
David Bridge

15

Benimle aynı durumdu. SQL Server Management Studio'm birkaç gün açık kaldı. Yeniden başlattım ve çözüldü.


9

IntelliSense'in kapatılmasının yardımcı olduğunu gördüm. Ayrıca, sahip olduğunuz eklentileri kontrol etmenizi de öneririm (RedGate araçları ve ApexSQL gibi şeyler de benim için sorunu daha da arttırdı).

Bu sorun beni günlerce rahatsız etti ve dürüst olmak gerekirse, Microsoft’u oldukça zayıf kılıyor. Gerçekten 64 bit araç setlerine sahip olmalılar çünkü bugünlerde büyük veri, 64 bit sunucu ve masaüstü ortamlarıyla uğraşıyoruz.


1
Benim durumumda RedGate SQL Prompt intellisense'de yerleşik SSMS ile mücadele ediyordu. SSMS intellisense'i kapatmak, SQL İstemi'nin de daha iyi çalışmasını sağladı.
TTT

1

SQL 2008 R2 için hafıza sorgulama komutları (Aaron Bertrand'ın gönderisinden) aşağıdaki gibidir

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Total Server Memory (KB)';

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

Ayrıca komutun

EXEC sp_configure 'max server memory';

Gelişmiş seçenekleri etkinleştirmediyseniz çalışmayabilir. örneğin bunu önce yapın

EXEC sp_configure 'show advanced options',1
RECONFIGURE

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.