Uno de nuestros servidores SQL, que ha estado funcionando 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 principalmente por desarrolladores que duplican las tareas del administrador de sistemas. Sin embargo, nuestra experiencia principal es el desarrollo. Dicho esto, no sabemos cómo hacemos para solucionar este problema. Hemos estado buscando foros y otras cosas 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 está establecida en 0.
- Nuestra memoria máxima del servidor está configurada en 2000.
- La memoria física total es de 3,325.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 estamos para ver si hace la diferencia.
- Este error fue generado por un trabajo que estaba haciendo una copia de seguridad de un registro de transacciones, no ejecutaba una consulta.
- Tenemos muchos servidores vinculados. Los tipos de RDBMS en el otro lado son SQL Server (2005 y 2000), Oracle 10g y sistemas OSI PI.
- Es intermitente en este punto. Parece que no podemos correlacionar ningún momento o evento con los errores.
- Por supuesto, reiniciar parece hacer que desaparezca por un tiempo, lo que tiene sentido debido a la naturaleza del mensaje de error.
- Este servidor se triplica como un servidor de aplicaciones (un par de servicios de Windows) y un servidor web, así como el 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
fuente
Respuestas:
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 no se resuelva. Por ejemplo, si hay una pérdida de memoria debido a un servidor vinculado, y el MTL se incrementa a 512 Mb, ¿será solo 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.
fuente
El mensaje de error "No hay suficiente memoria del sistema para ejecutar esta consulta". se refiere al espacio de direcciones virtuales (VAS) que no está disponible y no a la memoria en sentido convencional, es decir, dentro del espacio de proceso de SQL Server.
Dado que solo está ejecutando con 3GB en este servidor y SQL Server ha 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 se está consumiendo el VAS fuera del espacio de proceso de SQL Server (memToLeave).
Sugeriría usar el parámetro de inicio -g para asignar más memoria a la porción 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.
fuente
Esto podría estar relacionado con una pérdida de memoria de un controlador de servidor vinculado, de acuerdo con este hilo del foro :
fuente
Establecería su memoria mínima: es muy posible que estos otros procesos "roben" memoria de SQL
Puede ejecutar un registro de contador utilizando perfmon para confirmar esto y / o darse más información para identificar cuál es el problema real.
fuente
¡Referencia tomada de este blog!
Existen diferentes alternativas para resolver este problema.
Primero, verifique la configuración de su servidor SQL para "memoria mínima del servidor" y "memoria máxima del servidor". Si encuentra una diferencia muy pequeña en ambos valores, aumente la "memoria máxima del servidor".
Segundo, descubrió consultas de larga duración con su información de uso de memoria y si esta consulta está en estado inactivo, verifique y elimine este proceso. La optimización del rendimiento de la base de datos es importante para los usos de la memoria.
En tercer lugar, descubrió los usos del índice para consultas de larga duración porque sin una indexación adecuada su sistema DISK I / O aumenta y afecta directamente a su memoria.
Cuarto, verifique el tamaño del archivo de paginación de memoria virtual y aumente el tamaño de este archivo.
Quinto, compruebe el tamaño de la "memoria mínima por consulta", en realidad es de 1024 KB por defecto, pero en situaciones excepcionales puede disminuir el tamaño de este parámetro. En realidad, esto no es aconsejable, pero puedes probarlo.
Sexto, intente ejecutar este comando DBCC y nuevamente esto no es aconsejable porque puede afectar el rendimiento general del servidor. Pero puedes probar esto.
fuente