Management Studio System.OutOfMemoryException


38

Estoy usando Microsoft SQL Server 2012 e intento ejecutar una consulta simple en él dentro de Management Studio. Recibo el siguiente error (en SSMS, ejecutándose en el servidor):

Se produjo un error al ejecutar el lote. El mensaje de error es: Se produjo una excepción del tipo 'System.OutOfMemoryException'.

El sistema tiene 24 GB de RAM instalados, pero en el administrador de tareas, el proceso sqlservr.exe solo usa 2.9 GB.

¿Hay alguna configuración en algún lugar que restrinja su uso de RAM?

Respuestas:


39

Este error indica que Management Studio se está quedando sin memoria, no el servicio de SQL Server. Incluso si instaló SQL Server de 64 bits, el ejecutable de SQL Server Management Studio es una aplicación de 32 bits.

Esto probablemente se deba al tamaño del conjunto de resultados que está volviendo a Management Studio. ¿Estás ejecutando algo como SELECT * FROM really_big_table? Consulte http://support.microsoft.com/kb/2874903 para obtener más información.


19

Mike tiene razón en que el mensaje de error que está recibiendo es de la aplicación Management Studio en sí, y no de SQL Server. Es la memoria en su estación de trabajo local la que se ha agotado, probablemente debido a tratar de extraer 16 mil millones de filas en la aplicación cliente (lo que hace que muchos datos en una cuadrícula sean bastante caros en términos de memoria, así que trate de limitar sus consultas usando TOPetc. - No sé qué cosas prácticas podrías hacer con suficientes datos para usar toda tu memoria local de todos modos).

Pero sí quiero abordar otro problema: usar el Administrador de tareas para evaluar la cantidad de memoria que está usando SQL Server. No hagas esto; Es un mentiroso descarado. Copiando de esta respuesta (su pregunta es doble, por lo que realmente no puedo cerrarla como un duplicado):


NUNCA podría confiar en el Administrador de tareas para que le diga cuánta memoria está usando SQL Server. Deje de usar el Administrador de tareas para esto, punto. Utilice el contador de rendimiento: también puede consultar el contador de rendimiento utilizando DMV:

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

Puede guardarlo como un acceso directo de consulta en Herramientas> Opciones> Medio ambiente> Teclado> Accesos directos de consulta, y obtener resultados precisos en una ventana de consulta mucho más rápido que obtener resultados inexactos del Administrador de tareas.

También puede verificar la presión de la memoria (y si puede hacer algo al respecto) utilizando 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';

Los comandos anteriores son para nuevas versiones de SQL. Para los servidores SQL 2008 R2, los comandos son ligeramente diferentes. Agregaré otra publicación a este servidor para aquellos servidores de seguimiento, ya que los comentarios de seguimiento no se formatean lo suficiente como para ponerlos aquí
David Bridge,

15

Fue el mismo caso conmigo. Mi SQL Server Management Studio estuvo abierto durante un par de días. Lo reinicié y se resolvió.


9

Descubrí que apagar IntelliSense ayudó. También recomiendo verificar cualquier complemento que tenga (cosas como las herramientas RedGate y ApexSQL también exacerbaron el problema para mí).

Este problema me ha acosado durante días y, para ser sincero, es bastante débil por parte de Microsoft. Realmente deberían tener conjuntos de herramientas de 64 bits, ya que estamos tratando con grandes datos en estos días, servidores de 64 bits y entornos de escritorio.


1
En mi caso, RedGate SQL Prompt estaba luchando con SSMS integrado en intellisense. Desactivar SSMS intellisense hizo que SQL Prompt funcionara mucho mejor también.
TTT

1

Para SQL 2008 R2, los comandos de consulta de memoria (de la publicación de Aaron Bertrand) son los siguientes

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;

También tenga en cuenta que el comando

EXEC sp_configure 'max server memory';

puede no funcionar a menos que tenga habilitadas las opciones avanzadas. Por ejemplo, haz esto primero

EXEC sp_configure 'show advanced options',1
RECONFIGURE

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.