it-swarm.it

Management Studio System.OutOfMemoryException

Sto utilizzando Microsoft SQL Server 2012 e sto provando a eseguire una semplice query su di esso all'interno di Management Studio. Ricevo il seguente errore (in SSMS, in esecuzione sul server):

Si è verificato un errore durante l'esecuzione del batch. Il messaggio di errore è: è stata generata un'eccezione di tipo "System.OutOfMemoryException".

Il sistema ha 24 GB di RAM installato ma guardando nel task manager il processo sqlservr.exe utilizza solo 2,9 GB.

C'è un'impostazione da qualche parte che ne limita l'utilizzo RAM?

38
Ben Durkin

Questo errore indica che Management Studio sta esaurendo la memoria, non il servizio SQL Server. Anche se hai installato SQL Server a 64 bit, l'eseguibile di SQL Server Management Studio è un'applicazione a 32 bit.

Ciò è probabilmente causato dalle dimensioni del set di risultati che si sta restituendo a Management Studio. Stai eseguendo qualcosa come SELECT * FROM really_big_table? Vedere http://support.Microsoft.com/kb/28749 per ulteriori informazioni.

39
Mike Stankavich

Mike ha ragione sul fatto che il messaggio di errore che stai ricevendo proviene dall'applicazione Management Studio stessa e non da SQL Server. È la memoria della workstation locale che è stata esaurita, probabilmente a causa del tentativo di inserire 16 miliardi di righe nell'applicazione client (il rendering di molti dati in una griglia è piuttosto costoso in termini di memoria, quindi prova a limitare le tue query utilizzando TOP ecc. - Non so quali cose pratiche potresti fare con dati sufficienti per utilizzare comunque tutta la tua memoria locale).

Ma voglio affrontare un altro problema: usare Task Manager per valutare la quantità di memoria che SQL Server sta usando. Non farlo; è un bugiardo dal viso audace. Copia da questa risposta (la tua domanda è duplice, quindi non posso davvero chiuderla come duplicato):


Non puoi MAI, MAI fidarti di Task Manager per dirti quanta memoria utilizza SQL Server. Smetti di usare Task Manager per questo, punto. Utilizza il contatore delle prestazioni: puoi anche eseguire una query sul contatore delle prestazioni utilizzando i DMV:

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

Puoi salvarlo come scorciatoia di query in Strumenti> Opzioni> Ambiente> Tastiera> Scorciatoie di query e ottenere risultati accurati in una finestra di query molto più velocemente rispetto a ottenere risultati imprecisi da Task Manager.

Puoi anche controllare la pressione della memoria (e se puoi fare qualcosa al riguardo) usando queste query:

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

È stato lo stesso caso con me. Il mio SQL Server Management Studio è stato aperto per un paio di giorni. L'ho riavviato e si è risolto.

15
Barry Guvenkaya

Ho scoperto che disattivare IntelliSense mi ha aiutato. Consiglio anche di controllare tutti i componenti aggiuntivi che hai (cose come gli strumenti RedGate e ApexSQL hanno anche aggravato il problema per me).

Questo problema mi ha afflitto per giorni e, ad essere sincero, è piuttosto debole di Microsoft. Dovrebbero davvero avere set di strumenti a 64 bit, poiché al giorno d'oggi abbiamo a che fare con big data, server a 64 bit e ambienti desktop.

9
Tahir Khalid

Per SQL 2008 R2 i comandi di query di memoria (dal post di Aaron Bertrand) sono i seguenti

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;

Si noti inoltre che il comando

EXEC sp_configure 'max server memory';

potrebbe non funzionare a meno che tu non abbia abilitato le opzioni avanzate. per esempio. fallo prima

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

Si noti che esiste un problema di connessione Microsoft a causa della perdita di memoria SSMS. Pensano di averlo risolto nella v16.5

Vedi il problema su Connect.Microsoft.com facendo clic qui

Se installi l'ultimo e hai ancora il problema, votalo per riaprirlo.

SSMS v16.5 qui

Problema di connessione che indica la perdita di memoria risolta in 16.5 qui

1
David Bridge