it-swarm-es.com

SQL Server 2005: no hay suficiente memoria del sistema para ejecutar esta consulta

Uno de nuestros servidores SQL, que se ha estado ejecutando de forma estable durante bastante tiempo (años), recientemente ha estado arrojando errores de memoria insuficientes. Desde el registro de eventos de la aplicación, vemos:

Id. De evento: 701

Descripción: no hay suficiente memoria del sistema para ejecutar esta consulta.

Nuestro equipo que administra este servidor está compuesto en su mayoría por desarrolladores que duplican las tareas de administrador de sistemas. Sin embargo, nuestra principal experiencia es el desarrollo. Dicho esto, no sabemos cómo solucionar este problema. Hemos estado revisando foros y todo eso y no hemos encontrado nada que coincida

Entonces, aquí hay algunos detalles más para ayudar en la resolución de problemas:

  • Nuestra memoria mínima del servidor se establece en 0.
  • Nuestra memoria máxima del servidor está establecida en 2000.
  • La memoria física total es de 3325,85 MB (de sysinfo).
  • La memoria virtual total es de 7,10 GB (de sysinfo).
  • No estábamos usando AWE para asignar memoria, pero ahora vamos a ver si hace una diferencia.
  • Este error fue generado por un trabajo que estaba realizando una copia de seguridad de un registro de transacciones, no ejecutando una consulta.
  • Tenemos muchos servidores vinculados. Los tipos de RDBMS en el otro lado son SQL Server (2005 y 2000), Oracle 10g y sistemas PI OSI.
  • Es intermitente en este punto. Parece que no podemos correlacionar ningún momento o evento con los errores.
  • Por supuesto, el reinicio parece hacer que desaparezca por un tiempo, lo que tiene sentido debido a la naturaleza del mensaje de error.
  • Este servidor se triplica como servidor de aplicaciones (un par de servicios de Windows) y servidor web, así como como servidor de base de datos.

EDITAR:

Estamos en SP3. La mayoría de las publicaciones que encontramos fueron anteriores al SP1, lo que no se aplica a nosotros.

SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

devoluciones

9.00.4035.00 SP3 Edición estándar

13
Aaron Daniels

Sugeriría usar el parámetro de inicio -g también. Parece funcionar para la mayoría de las personas y probablemente también funcione para usted. Mi única preocupación sería que el problema subyacente podría no resolverse. Por ejemplo, si hay una pérdida de memoria debido a un servidor vinculado y el MTL aumenta a 512Mb, ¿habrá un período más largo entre problemas de memoria? No sé la respuesta a eso, pero tiendo a estar de acuerdo con UndertheFold en que un perfmon puede ser un buen comienzo.

4
Mike Thien

El mensaje de error "No hay suficiente memoria del sistema para ejecutar esta consulta." se refiere a que el espacio de direcciones virtuales (VAS) no está disponible y no hay memoria en el sentido convencional, es decir. dentro del espacio de proceso de SQL Server.

Dado que solo está ejecutando con 3 GB en este servidor y SQL Server ha sido asignado hasta 2 GB, esto significa que el sistema operativo y, lo que es más importante, cualquier otra cosa en la caja tiene menos de 1 GB para jugar. Eso no es mucha memoria.

Si este problema es realmente el resultado de una pérdida de memoria, entonces es el VAS fuera del espacio de proceso de SQL Server (memToLeave) el que se está consumiendo.

Sugeriría usar el parámetro de inicio -g para asignar más memoria a la parte memToLeave.

Consulte el siguiente artículo para obtener más información:

http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/

También es posible que desee reducir la configuración de memoria máxima de SQL Server, pero lo haría como último recurso.

7
John Sansom

Esto podría estar relacionado con una pérdida de memoria de un controlador de servidor vinculado, de acuerdo con este hilo de foros :

Lo siguiente es lo que nos dijo Microsoft.

Aparentemente, el procesamiento de datos utilizando un servidor vinculado, específicamente el controlador fox pro provoca una pérdida de memoria que se acumula con el tiempo.

1
splattne

Este servidor se triplica como servidor de aplicaciones (un par de servicios de Windows) y servidor web, así como como servidor de base de datos.

Establecería su memoria mínima - es muy posible que estos otros procesos estén "robando" memoria de SQL

Puede ejecutar un registro de contador usando perfmon para confirmar esto y/o darse más información para identificar cuál es el problema real.

0
CPU_BUSY

¡Referencia tomada de este blog!

Existen diferentes alternativas para solucionar este problema.

Primero, Verifique la configuración de SQL Server para "memoria mínima del servidor" y "memoria máxima del servidor". Si encuentra una diferencia muy pequeña en ambos valores, aumente su "memoria máxima del servidor".

Segundo, Descubrió consultas de larga ejecución con su información de uso de memoria y si esta consulta está inactiva, verifique y elimine este proceso. La optimización del rendimiento de la base de datos es fundamental para los usos de la memoria.

En tercer lugar, Descubrí usos de índice para consultas de larga ejecución porque sin la indexación adecuada de su sistema, la E/S de DISCO aumenta y afecta directamente a su memoria.

Cuarto, Verifique el tamaño del archivo de paginación de la memoria virtual y aumente el tamaño de este archivo.

Quinto, Verifique el tamaño de la "memoria mínima por consulta" en realidad es 1024 KB por defecto, pero en raras situaciones puede disminuir el tamaño de este parámetro . En realidad, esto no es recomendable, pero puedes intentarlo.

En sexto lugar, Intente ejecutar este comando DBCC y, de nuevo, no es aconsejable porque puede afectar al rendimiento general del servidor. Pero puedes probar esto.

0
Anvesh