Management Studio System.OutOfMemoryException


38

ฉันใช้ Microsoft SQL Server 2012 และพยายามเรียกใช้แบบสอบถามอย่างง่าย ๆ ภายใน Management Studio ฉันได้รับข้อผิดพลาดต่อไปนี้ (ใน SSMS ทำงานบนเซิร์ฟเวอร์):

เกิดข้อผิดพลาดขณะดำเนินการแบทช์ ข้อความแสดงข้อผิดพลาดคือ: ข้อยกเว้นชนิด 'System.OutOfMemoryException' ถูกส่งออกไป

ระบบมีการติดตั้ง RAM 24GB แต่การค้นหาตัวจัดการงานกระบวนการ sqlservr.exe ใช้ 2.9GB เท่านั้น

มีการตั้งค่าบางอย่างที่ จำกัด การใช้ RAM หรือไม่

คำตอบ:


39

ข้อผิดพลาดนี้บ่งชี้ว่า Management Studio มีหน่วยความจำไม่เพียงพอบริการ SQL Server แม้ว่าคุณติดตั้ง SQL Server 64 บิตแล้ว SQL Server Management Studio สามารถเรียกใช้งานได้เป็นแอปพลิเคชั่น 32 บิต

นี่อาจเกิดจากขนาดของชุดผลลัพธ์ที่คุณกลับไปที่ Management Studio คุณกำลังดำเนินการบางอย่างเช่น SELECT * จาก Really_big_table หรือไม่ ดูhttp://support.microsoft.com/kb/2874903สำหรับข้อมูลเพิ่มเติม


19

ไมค์พูดถูกที่ข้อความแสดงข้อผิดพลาดที่คุณได้รับนั้นมาจากแอพพลิเคชั่น Management Studio และไม่ใช่จาก SQL Server มันเป็นความทรงจำในข่ายท้องถิ่นของคุณที่ได้รับหมดน่าจะเกิดจากความพยายามที่จะดึง 16000000000 แถวลงในใบสมัครลูกค้า (การแสดงผลข้อมูลมากที่ในตารางที่ค่อนข้างมีราคาแพงในแง่ของหน่วยความจำเพื่อพยายามที่จะ จำกัด การค้นหาของคุณโดยใช้TOPฯลฯ . - ฉันไม่รู้ว่าคุณสามารถใช้ข้อมูลที่เพียงพอเพื่อใช้หน่วยความจำภายในเครื่องของคุณได้อย่างไร

แต่ฉันต้องการแก้ไขปัญหาอื่น: ใช้ตัวจัดการงานเพื่อประเมินจำนวนหน่วยความจำที่ SQL Server ใช้อยู่ อย่าทำอย่างนี้; มันเป็นคนโกหกที่กล้าหาญ คัดลอกจากคำตอบนี้ (คำถามของคุณสองเท่าดังนั้นฉันจึงไม่สามารถปิดซ้ำได้):


คุณไม่สามารถเชื่อถือเคย Task Manager เพื่อบอกคุณว่าหน่วยความจำ SQL Server กำลังใช้งานอยู่เท่าใด หยุดใช้ตัวจัดการงานสำหรับช่วงเวลานี้ ใช้ตัวนับประสิทธิภาพ - คุณสามารถสอบถามตัวนับประสิทธิภาพโดยใช้ DMV:

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';

คำสั่งข้างต้นใช้สำหรับ SQL เวอร์ชันใหม่ สำหรับเซิร์ฟเวอร์ SQL 2008 R2 คำสั่งนั้นจะแตกต่างกันเล็กน้อย ไม่เพิ่มโพสต์อื่นลงล่างนี้สำหรับเซิร์ฟเวอร์เหล่านั้นเนื่องจากความคิดเห็นที่ติดตามไม่ได้จัดรูปแบบที่ดีพอที่จะใส่ที่นี่
David Bridge

15

มันเป็นกรณีเดียวกันกับฉัน SQL Server Management Studio ของฉันเปิดทำการสองสามวัน ฉันรีสตาร์ทและแก้ไขแล้ว


9

ฉันพบว่าการปิด IntelliSense ช่วย ฉันขอแนะนำให้ตรวจสอบส่วนเพิ่มเติมใด ๆ ที่คุณมี (สิ่งต่าง ๆ เช่นเครื่องมือ RedGate และ ApexSQL ก็ทำให้ปัญหาแย่ลงสำหรับฉันด้วย)

ปัญหานี้รบกวนฉันมาหลายวันแล้วและตามจริงแล้วมันค่อนข้างอ่อนแอของ Microsoft พวกเขาควรมีชุดเครื่องมือ 64 บิตเนื่องจากเรากำลังเผชิญกับข้อมูลขนาดใหญ่ในปัจจุบันเซิร์ฟเวอร์ 64 บิตและสภาพแวดล้อมเดสก์ท็อป


1
ในกรณีของฉัน RedGate SQL Prompt กำลังต่อสู้กับ SSMS ที่สร้างขึ้นในระบบ Intellisense การปิด IntelliSense ของ SSMS ทำให้ SQL Prompt ทำงานได้ดีขึ้นมากเช่นกัน
TTT

1

สำหรับ 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

โปรดทราบว่ามีปัญหาการเชื่อมต่อของ Microsoft สำหรับสิ่งนี้เนื่องจากการรั่วไหลของหน่วยความจำ SSMS พวกเขาคิดว่าพวกเขาแก้ปัญหาแล้วในเวอร์ชัน 16.5

ดูปัญหาบน Connect.microsoft.com โดยคลิกที่นี่

หากคุณติดตั้งเวอร์ชันล่าสุดและยังมีปัญหาอยู่โปรดลงคะแนนเพื่อเปิดใหม่

SSMS v16.5 ที่นี่

แก้ไขปัญหาการเชื่อมต่อที่ระบุว่าหน่วยความจำรั่วใน 16.5 ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.