Síntomas

Es posible que no haya suficiente espacio de dirección virtual disponible en el proceso de Microsoft SQL Server si todas las condiciones siguientes son verdaderas al ejecutar SQL Server con los valores de configuración predeterminados:

  • El servidor tiene 2 GB o más de RAM.

  • Hay una gran cantidad de bases de datos en el sistema (por ejemplo, más de 500).

  • Se actualizan la mayoría de las bases de datos (por ejemplo, las bases de datos no tienen el estado de "solo lectura").

  • Hay suficientes conexiones de usuario activas al mismo tiempo para usar la mayoría de los subprocesos de trabajo de SQL Server 255.

SQL Server puede generar los siguientes mensajes de error después de que se haya agotado el espacio de dirección virtual de 2 GB completo (o después de que se haya agotado todo el espacio de direcciones virtual de 3 GB en SQL Server Enterprise con el modificador /3GB en el archivo boot. ini).

Mensaje 1

Error: 17802, gravedad: 18, estado: 3Could no crear subproceso de eventos de servidor.

Mensaje 2

SQL Server no pudo generar process_loginread subproceso.

Mensaje 3

ADVERTENCIA: borrando la caché de procedimientos para liberar memoria contigua. Distribución de búfer: robado = 3454 Free = 2540 Procedures = 138 Inram = 0 Dirty = 1108 mantenida = 35 I/O = 0, LATCH = 0, Other = 214821Buffer recuentos: Committed = 222096 Target = 222096 Hashed = 215964 InternalReservation = 547 ExternalReservation = 0 min libre = 512Procedure cache: TotalProcs = 8 TotalPages = 138 InUsePages = 138Dynamic: administrador de memoria: robado = 3556 OS = 497 de los recursos generales = 1706 de plan = 755 optimizador = utilidades = 9 Connection = 1583Global de memoria: recursos = 1119 Locks = 163 XDES = SQLCache de LockBytes = ServerGlobal de 20Query = 164370 = 164370 =

Causa

Para cada base de datos actualizada, SQL Server asigna al menos 1 64 de KB para su uso en las entradas de registro de formato antes de que se escriban en el disco. Esta asignación se produce cuando se genera el primer registro de la base de datos, por ejemplo, durante una instrucción INSERT, UPDATE o DELETE. Dependiendo de la actividad y del tamaño de los registros de registro generados, las modificaciones posteriores podrían desencadenar la asignación de asignaciones de 64-KB adicionales. SQL Server 7,0 no asignará más de 3 54 bloques de KB. En SQL Server 2000, el número superior de asignaciones para cada base de datos es una función del número de procesadores que SQL Server está configurado para usar.

Solución alternativa

Use el parámetro de inicio-g para abandonar la memoria virtual adicional no reservada disponible para estas asignaciones de base de datos. El parámetro -g está documentado en el archivo README. txt del service pack 7,0 de SQL Server y en los libros en línea de sql Server 2000. La sección "más información" de este artículo incluye la configuración que Microsoft recomienda usar para determinar el valor adecuado para esta configuración.

Más información

En un equipo con 2 GB o más de RAM, SQL Server reserva todos los espacios de direcciones virtuales, excepto 256 MB (SQL Server 7,0) o 384 MB (SQL Server 2000), durante el proceso de inicio para que el grupo de búfer los use. Además, para almacenar la caché de datos y procedimientos, SQL Server usa la memoria del grupo de búferes para atender la mayoría de las solicitudes de memoria de los procesos de SQL Server de menos de 8 KB. La memoria no reservada restante está pensada para su uso con otras asignaciones que no se pueden servir desde el grupo de búferes. Estas asignaciones incluyen, entre otras, las siguientes:

  • Pilas y el bloque de entorno de subprocesos asociados para cualquier subproceso que cree SQL Server. Después de que SQL Server crea todos los subprocesos de trabajo de 255, esto es de aproximadamente 140 MB.

  • Asignaciones que realizan otras dll o procesos que se ejecutan en el espacio de direcciones de SQL Server (que varía según el sistema), por ejemplo:

    • Proveedores de OLE DB de cualquier servidor vinculado.

    • Objetos COM que se cargan mediante el uso de los procedimientos almacenados del sistema sp_OA o los procedimientos almacenados extendidos.

  • Las imágenes (. exe o. dll) que se carguen en el espacio de direcciones, que normalmente usan de 20 a 25 MB, pero posiblemente más si usa servidores vinculados, sp_OAo procedimientos almacenados extendidos.

  • El montón del proceso y cualquier otra pila que SQL Server pueda crear. Durante el proceso de inicio, esto suele ser de 10 MB, pero puede ser más si usa servidores vinculados, sp_OAo procedimientos almacenados extendidos.

  • Asignaciones de los procesos de SQL Server que sean superiores a 8 KB, como los necesarios para planes de consultas de gran tamaño, los búferes de envío y recepción, si la opción de configuración de tamaño de paquete de red está cerca de 8 KB y así sucesivamente. Para ver este número, busque el valor reservado del sistema operativo que se indica en DBCC MEMORYSTATUS y que se notifica como número de páginas de 8 KB. Los valores típicos de esta es de 5 MB.

  • Una matriz para realizar un seguimiento de la información de estado de cada búfer que se encuentra en el grupo de búferes. Esto suele ser de 20 MB, a menos que SQL Server se esté ejecutando con las extensiones de ventana de dirección (AWE) habilitadas, en cuyo caso puede ser significativamente mayor.

En los sistemas que tienen una gran cantidad de bases de datos, las asignaciones de 64-KB necesarias para el formato de registro pueden ocupar toda la memoria virtual restante. En ese momento, pueden fallar las asignaciones posteriores, lo que provoca uno o varios de los errores que se indican en la sección "síntomas" de este artículo. Al usar el parámetro de inicio-g , puede indicar a SQL Server que deje memoria virtual adicional disponible para que la combinación de estas asignaciones relacionadas con el registro y otras asignaciones normales no se quede sin espacio de dirección virtual. En la tabla siguiente se muestran algunos puntos de inicio sugeridos para el valor -g según el número de bases de datos y la versión del servidor:

Bases

7,0 de SQL Server

SQL Server 2000

250

-g134

N/A

500

-g185

N/A

750

-g237

N/A

1000

-g288

-g288

1250

-g340

-g340

1500

-g392

-g392

Esta tabla se calculó con los valores típicos que se enumeran y también se basa en la suposición de que no se está usando ninguna actividad del servidor vinculado, sp_OA o procedimientos almacenados extendidos. También se basa en la hipótesis de que no está usando AWE y que el analizador de SQL no está en uso. Cualquiera de estas condiciones puede requerir que aumente el valor de -g. Microsoft recomienda tener una consideración seria antes de ejecutar un servidor con más bases de datos, ya que la sobrecarga necesaria para hacer que este número de bases de datos en el sistema esté sacando una gran cantidad de memoria virtual del grupo, lo que puede dar lugar a un bajo rendimiento para el sistema en su conjunto. Además, la creación de muchas bases de datos tiene el efecto más importante en la memoria virtual. También hay asignaciones de memoria por base de datos que pueden causar una condición de memoria insuficiente en el conjunto de búferes. Por ejemplo, es posible que reciba el siguiente mensaje de error:

Error: 701, gravedad: 17, estado: 123. Memoria del sistema insuficiente para ejecutar esta consulta.

Este tipo de condición de memoria insuficiente puede ser más común en SQL Server 2005 porque SQL Server 2005 registra más metadatos por base de datos que las versiones anteriores de SQL Server. Al realizar el seguimiento del uso de índices con el procedimiento almacenado Sys. dm_db_index_usage_stats , es posible que la operación requiera una cantidad de memoria significativa. La operación requiere una cantidad de memoria significativa si cada base de datos tiene muchos índices.

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a tu experiencia?

¡Gracias por sus comentarios!

×