it-swarm.asia

نظام إدارة الاستوديو

أنا أستخدم Microsoft SQL Server 2012 وأحاول تشغيل استعلام بسيط ضده في Management Studio. أحصل على الخطأ التالي (في SSMS ، قيد التشغيل على الخادم):

حدث خطأ أثناء تنفيذ الدفعة. رسالة الخطأ: تم طرح استثناء من نوع "System.OutOfMemoryException".

يحتوي النظام على 24 جيجابايت من RAM مثبت ولكن بالنظر إلى إدارة المهام ، لا تستخدم عملية sqlservr.exe سوى 2.9 جيجابايت.

هل يوجد إعداد في مكان ما يقيد استخدامه RAM الاستخدام؟

38
Ben Durkin

يشير هذا الخطأ إلى أن ذاكرة Studio Studio تنفد من الذاكرة ، وليس خدمة SQL Server. حتى إذا قمت بتثبيت SQL Server 64 بت ، فإن الملف التنفيذي لـ SQL Server Management Studio هو تطبيق 32 بت.

من المحتمل أن يكون سبب ذلك هو حجم مجموعة النتائج التي تعود إليها إلى Management Studio. هل تقوم بتنفيذ شيء مثل SELECT * FROM really_big_table؟ راجع http://support.Microsoft.com/kb/28749 للمزيد.

39
Mike Stankavich

مايك محق في أن رسالة الخطأ التي تتلقاها هي من تطبيق Management Studio نفسه ، وليس من SQL Server. تم استنفاد الذاكرة على محطة العمل المحلية الخاصة بك ، على الأرجح بسبب محاولة سحب 16 مليار صف في تطبيق العميل (مما يجعل الكثير من البيانات في الشبكة مكلفة للغاية من حيث الذاكرة ، لذا حاول تحديد استعلاماتك باستخدام TOP إلخ. - لا أعرف ما الشيء (الأشياء) العملية التي يمكن أن تفعلها ببيانات كافية لاستخدام كل ذاكرتك المحلية على أي حال).

لكني أريد معالجة مشكلة أخرى: استخدام إدارة المهام لتقييم حجم الذاكرة التي يستخدمها SQL Server. لا تفعل هذا ؛ إنه كاذب ذو وجه جريء. النسخ من هذه الإجابة (سؤالك ذو شقين ، لذا لا يمكنني إغلاقه كتكرار):


لا يمكنك أبدًا ، أبدًا الثقة في إدارة المهام لإخبارك بحجم الذاكرة التي يستخدمها SQL Server. توقف عن استخدام مدير المهام لهذه الفترة. استخدام عداد الأداء - يمكنك أيضًا الاستعلام عن عداد الأداء باستخدام DMVs:

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_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';
19
Aaron Bertrand

كانت نفس الحالة معي. تم فتح My SQL Server Management Studio ليومين. قمت بإعادة تشغيله وتم حله.

15
Barry Guvenkaya

لقد وجدت إيقاف IntelliSense ساعد. أوصي أيضًا بالتحقق من أي وظائف إضافية لديك (أشياء مثل أدوات RedGate و ApexSQL أدت أيضًا إلى تفاقم المشكلة بالنسبة لي).

لقد أزعجتني هذه المشكلة لعدة أيام الآن ولأكون صريحًا ، فهي ضعيفة جدًا في Microsoft. يجب أن يكون لديهم بالفعل مجموعات أدوات 64 بت ، لأننا نتعامل مع البيانات الكبيرة هذه الأيام ، وخوادم 64 بت ، وبيئات سطح المكتب.

9
Tahir Khalid

بالنسبة لـ SQL 2008 R2 ، تكون أوامر استعلام الذاكرة (من منشور Aaron Bertrand) كما يلي

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;

لاحظ أيضًا أن الأمر

EXEC sp_configure 'max server memory';

قد لا تعمل إلا إذا قمت بتمكين الخيارات المتقدمة. على سبيل المثال قم بذلك أولاً

EXEC sp_configure 'show advanced options',1
RECONFIGURE
1
David Bridge

يرجى ملاحظة أن هناك مشكلة في اتصال Microsoft لهذا لأنها تسرب ذاكرة SSMS. يعتقدون أنهم حلوها في الإصدار 16.5

راجع المشكلة في Connect.Microsoft.com بالضغط هنا

إذا قمت بتثبيت الأحدث وما زالت لديك مشكلة ، فالرجاء التصويت عليها لإعادة فتحها.

SSMS v16.5 هنا

مشكلة الاتصال تشير إلى تسرب الذاكرة الثابتة في 16.5 هنا

1
David Bridge