Management Studio System.OutOfMemoryException

38

Saya menggunakan Microsoft SQL Server 2012 dan mencoba menjalankan kueri sederhana terhadapnya di dalam Management Studio. Saya mendapatkan kesalahan berikut (dalam SSMS, berjalan di server):

Terjadi kesalahan saat menjalankan batch. Pesan kesalahan adalah: Pengecualian jenis 'System.OutOfMemoryException' dilemparkan.

Sistem ini memiliki 24GB RAM diinstal tetapi mencari di task manager proses sqlservr.exe hanya menggunakan 2.9GB.

Apakah ada pengaturan di suatu tempat yang membatasi penggunaan RAM-nya?

Paul White mengatakan GoFundMonica
sumber

Jawaban:

39

Kesalahan ini menunjukkan bahwa Studio Manajemen kehabisan memori, bukan layanan SQL Server. Bahkan jika Anda menginstal 64 bit SQL Server, SQL Server Management Studio dapat dieksekusi adalah aplikasi 32 bit.

Ini kemungkinan disebabkan oleh ukuran set hasil yang Anda kembalikan ke Management Studio. Apakah Anda menjalankan sesuatu seperti SELECT * FROM really_big_table? Lihat http://support.microsoft.com/kb/2874903 untuk lebih lanjut.

Mike Stankavich
sumber
19

Mike benar bahwa pesan kesalahan yang Anda terima berasal dari aplikasi Management Studio itu sendiri, dan bukan dari SQL Server. Ini adalah memori pada workstation lokal Anda yang telah habis, kemungkinan karena mencoba menarik 16 miliar baris ke aplikasi klien (rendering bahwa banyak data dalam kotak cukup mahal dalam hal memori, jadi cobalah untuk membatasi permintaan Anda menggunakan TOPdll - Saya tidak tahu hal praktis apa yang mungkin dapat Anda lakukan dengan data yang cukup untuk menggunakan semua memori lokal Anda).

Tapi saya ingin mengatasi masalah lain: menggunakan Task Manager untuk menilai jumlah memori yang digunakan SQL Server. Jangan lakukan ini; itu pembohong berwajah berani. Menyalin dari jawaban ini (pertanyaan Anda dua kali lipat, jadi saya tidak bisa benar-benar menutupnya sebagai duplikat):


Anda tidak bisa, pernah percaya Task Manager untuk memberi tahu Anda berapa banyak memori yang digunakan SQL Server. Berhenti menggunakan Task Manager untuk ini, titik. Gunakan penghitung kinerja - Anda juga dapat meminta penghitung kinerja menggunakan DMV:

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

Anda bisa menyimpannya sebagai pintasan kueri di Alat> Opsi> Lingkungan> Keyboard> Pintasan Kueri, dan mendapatkan hasil yang akurat di jendela kueri jauh lebih cepat daripada mendapatkan hasil yang tidak akurat dari Task Manager.

Anda juga dapat memeriksa tekanan memori (dan apakah Anda dapat melakukan sesuatu tentang hal itu) menggunakan pertanyaan ini:

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';
Aaron Bertrand
sumber
Perintah di atas adalah untuk versi baru SQL. Untuk SQL 2008 R2 server maka perintahnya ada yang sedikit berbeda. Saya akan menambahkan posting lain ke bawah ini untuk server-server sebagai komentar tindak lanjut tidak memformat cukup baik untuk ditempatkan di sini
David Bridge
15

Sama halnya dengan saya. Studio Manajemen SQL Server saya terbuka selama beberapa hari. Saya me-restart dan itu terpecahkan.

Barry Guvenkaya
sumber
9

Saya menemukan mematikan IntelliSense membantu. Saya juga merekomendasikan memeriksa semua add-in yang Anda miliki (hal-hal seperti alat RedGate dan ApexSQL juga memperburuk masalah bagi saya).

Masalah ini mengganggu saya selama berhari-hari sekarang dan sejujurnya itu cukup lemah dari Microsoft. Mereka seharusnya benar-benar memiliki set alat 64 bit, karena kita berhadapan dengan data besar hari ini, server 64 bit, dan lingkungan desktop.

Tahir Khalid
sumber
1
Dalam kasus saya RedGate SQL Prompt berkelahi dengan SSMS yang dibangun di intellisense. Mematikan intellisense SSMS membuat SQL Prompt bekerja lebih baik juga.
TTT
1

Untuk SQL 2008 R2 perintah permintaan memori (dari posting Aaron Bertrand) adalah sebagai berikut

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;

Perhatikan juga perintah itu

EXEC sp_configure 'max server memory';

mungkin tidak berfungsi kecuali Anda mengaktifkan opsi lanjutan. mis. lakukan ini dulu

EXEC sp_configure 'show advanced options',1
RECONFIGURE
Jembatan David
sumber