Management Studio System.OutOfMemoryException


38

Estou usando o Microsoft SQL Server 2012 e tentando executar uma consulta simples no Management Studio. Estou recebendo o seguinte erro (no SSMS, executando no servidor):

Ocorreu um erro ao executar o lote. A mensagem de erro é: Exceção do tipo 'System.OutOfMemoryException' foi lançada.

O sistema possui 24 GB de RAM instalada, mas, no gerenciador de tarefas, o processo sqlservr.exe está usando apenas 2,9 GB.

Existe uma configuração em algum lugar que está restringindo o uso de RAM?

Respostas:


39

Este erro indica que o Management Studio está ficando sem memória, não o serviço SQL Server. Mesmo se você instalou o SQL Server de 64 bits, o executável do SQL Server Management Studio é um aplicativo de 32 bits.

Provavelmente, isso é causado pelo tamanho do conjunto de resultados que você está retornando ao Management Studio. Você está executando algo como SELECT * FROM really_big_table? Consulte http://support.microsoft.com/kb/2874903 para obter mais informações.


19

Mike está certo de que a mensagem de erro que você está recebendo é do próprio aplicativo Management Studio e não do SQL Server. É a memória na estação de trabalho local que foi esgotada, provavelmente devido à tentativa de atrair 16 bilhões de linhas para o aplicativo cliente (renderizando que muitos dados em uma grade são bastante caros em termos de memória, portanto, tente limitar suas consultas usando TOPetc. - Não sei que coisa (s) prática (s) você poderia fazer com dados suficientes para usar toda a sua memória local).

Mas quero resolver outro problema: usar o Gerenciador de tarefas para avaliar a quantidade de memória que o SQL Server está usando. Não faça isso; é um mentiroso ousado. Copiando desta resposta (sua pergunta é dupla, então não posso realmente fechá-la como duplicada):


NUNCA, NUNCA confiar no Gerenciador de Tarefas para dizer quanta memória o SQL Server está usando. Pare de usar o Gerenciador de tarefas para esse período. Use o contador de desempenho - você também pode consultar o contador de desempenho usando DMVs:

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

Você pode salvar isso como um atalho de consulta em Ferramentas> Opções> Ambiente> Teclado> Atalhos de Consulta e obter resultados precisos em uma janela de consulta muito mais rapidamente do que obter resultados imprecisos no Gerenciador de Tarefas.

Você também pode verificar a pressão da memória (e se pode fazer algo a respeito) usando estas consultas:

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

Os comandos acima são para novas versões do SQL. Para servidores SQL 2008 R2, os comandos são ligeiramente diferentes. Ill adicionar outro post para este diminuir para baixo para esses servidores como acompanhamento comentários não formatar bem o suficiente para colocar aqui
David Ponte

15

Foi o mesmo caso comigo. Meu SQL Server Management Studio ficou aberto por alguns dias. Eu o reiniciei e foi resolvido.


9

Eu achei que desligar o IntelliSense ajudou. Também recomendo verificar todos os suplementos que você possui (coisas como ferramentas RedGate e ApexSQL também agravaram o problema).

Esse problema me atormentou há dias e, para ser sincero, é bastante fraco da Microsoft. Eles realmente deveriam ter conjuntos de ferramentas de 64 bits, pois atualmente lidamos com big data, servidores de 64 bits e ambientes de desktop.


1
No meu caso, o RedGate SQL Prompt estava lutando com o SSMS incorporado no intellisense. Desativar o intellisense do SSMS também fez o SQL Prompt funcionar muito melhor.
TTT 26/01

1

Para o SQL 2008 R2, os comandos de consulta de memória (da postagem de Aaron Bertrand) são os seguintes

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;

Observe também que o comando

EXEC sp_configure 'max server memory';

pode não funcionar, a menos que você tenha opções avançadas ativadas. por exemplo, faça isso primeiro

EXEC sp_configure 'show advanced options',1
RECONFIGURE

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.