Puede que no haya suficiente memoria virtual cuando tiene un gran número de bases de datos en SQL Server

Seleccione idioma Seleccione idioma
Id. de artículo: 316749 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Puede no haber suficiente espacio de direcciones virtual disponible en el proceso de Microsoft SQL Server si todas las condiciones siguientes son true cuando se ejecuta SQL Server con el valor predeterminado los valores de configuración:
  • El servidor tiene 2 GB de RAM o más.
  • Hay un gran número de bases de datos en el sistema (por ejemplo, más de 500).
  • La mayoría de las bases de datos se actualiza (por ejemplo, las bases de datos no tiene un estado "sólo lectura").
  • No hay suficientes conexiones de usuario activos simultáneamente para utilizar la mayoría de los 255 subprocesos de trabajo de SQL Server.
SQL Server puede generar los siguientes mensajes de error después de que el espacio de direcciones virtuales de entero de 2 GB se utiliza (o después de que el espacio de direcciones virtual todo de 3 GB se utiliza en SQL Server Enterprise Edition con el / 3 GB modificador en el archivo Boot.ini).

Mensaje 1

Error: 17802, gravedad: 18, estado: 3
No se pudo crear subproceso de eventos de servidor.

Mensaje 2

SQL Server no se pudo crear subproceso process_loginread.

Mensaje 3

Advertencia: Borrar la caché de procedimiento para dejar libre memoria contigua.

Robo de distribución de búfer: = 3454 libre = 2540 procedimientos = 138
Inram = 0 = sucio 1108 tareas guardado = 35
SE / O = 0, activada = 0, otros = 214821
Ejecución de recuentos de búfer: = Destino 222096 = 222096 hash = 215964
InternalReservation = ExternalReservation 547 = Mín 0 libre = 512
Caché de procedimiento: TotalProcs = 8 TotalPages = 138 InUsePages = 138
Administrador de memoria dinámica: robado = 3556
OS = general 497 = 1706
Plan de consulta = optimizador 755 = 0
Utilidades = conexión 9 = 1583
Recursos de objetos de memoria global: = 1119 bloqueos = 163 XDES = 1 SQLCache = duplicación 90 = 5 LockBytes = ServerGlobal 2 = 20
Concede el Administrador de memoria de consulta: = espera 0 = máximo 0 = 164370 disponibles = 164370

Causa

Para cada base de datos actualizada, SQL Server asigna al menos un bloque de 64 KB para uso en formato registros antes de que se escriben en disco. Esta asignación se produce cuando se genera el primer registro de la base de datos, como durante una instrucción INSERT, UPDATE o DELETE. Dependiendo de la actividad y el tamaño de los registros generados, modificaciones posteriores pueden desencadenar la asignación de las asignaciones adicionales de 64 KB. SQL Server 7.0 asignará no más de tres bloques de 54 KB. En SQL Server 2000, el número superior de las asignaciones para cada base de datos es una función del número de procesadores que SQL Server está configurado para utilizar.

Solución

Utilice el -g deje adicional, sin reservar memoria virtual disponible para estas asignaciones de base de datos de parámetro de inicio. El -g parámetro documentada en el archivo Readme.txt del SQL Server 7.0 service pack y en los libros en pantalla de SQL Server 2000. El "Más información" sección de este artículo incluye la configuración que Microsoft recomienda que usar para determinar el valor apropiado para esta configuración.

Más información

En un equipo con 2 GB o más de RAM, SQL Server reserva todo pero 256 MB (SQL Server 7.0) o 384 MB (SQL Server 2000) de espacio de direcciones virtual durante el proceso de inicio utilizado por el grupo de búferes. Además, para almacenar la caché de datos y de procedimiento, SQL Server utiliza la memoria de grupo de búfer para atender más solicitudes de memoria de procesos de SQL Server que están en menos de 8 KB. La memoria no reservada restante está destinada a utilizar con otras asignaciones que no puede ser atendidas desde el grupo de búferes. Estas asignaciones incluyen, pero no están limitadas a:
  • Las pilas y el bloque de entorno del subproceso asociado para los subprocesos que crea SQL Server. Después de que SQL Server crea todos los subprocesos de 255, se trata de aproximadamente 140 MB.
  • Las asignaciones que se realizan por otros archivos DLL o procesos que se ejecutan en el espacio de direcciones de SQL Server (que varía de un sistema a), como:
    • Proveedores de OLE DB de los servidores vinculados.
    • Objetos COM que se cargan mediante uso del sistema sp_OA procedimientos almacenan o procedimientos almacenados extendidos.
  • Las imágenes (.exe o .dll) que se cargan en el espacio de direcciones, que suele utilizar 20 a 25 MB, pero posiblemente más si utiliza servidores vinculados, sp_OA , o extendido procedimientos almacenan.
  • El montón de proceso y todos los montones que SQL Server puede crear. Durante el proceso de inicio suele ser 10 MB, pero puede ser más si utiliza servidores vinculados, sp_OA o procedimientos almacenados extendidos.
  • Las asignaciones de procesos de SQL Server que son mayores que 8 KB, como los necesarios para planes de consultas grandes, enviar y recepción búferes si la opción de configuración de tamaño del paquete de red está próximo a 8 KB y así sucesivamente. Para ver este número, busque el valor Reservado del sistema operativo que se notifica en DBCC MEMORYSTATUS y que se notifica como número de páginas de 8 KB. Los valores típicos para esto son 5 MB.
  • Una matriz de registrar la información de estado para cada búfer está en el grupo de búferes. Es normalmente unos 20 MB a menos que se ejecuta SQL Server con Address Windowing Extensions (AWE) habilitado, en cuyo caso puede ser significativamente mayor.
En sistemas que tienen un gran número de bases de datos, las asignaciones de 64 KB que son necesarias para dar formato de registro podrían ocupar toda la memoria virtual restante. En ese momento, pueden fallar asignaciones posteriores, lo que uno o varios de los errores que aparecen en la sección "Síntomas" sección de este artículo.

Utilizando el -g parámetro de inicio, puede indicar a SQL Server para dejar más memoria virtual disponible para que la combinación de estas asignaciones de registro y otras asignaciones normales no se quede sin espacio de direcciones virtuales.

La siguiente tabla listas algunas sugerencias de puntos de partida para la -g valor dependiendo del número de bases de datos y la versión del servidor:
Contraer esta tablaAmpliar esta tabla
Bases de datosSQL Server 7.0SQL Server 2000
250-g134 NO DISPONIBLE
500-g185 NO DISPONIBLE
750-g237 NO DISPONIBLE
1000-g288 -g288
1250-g340 -g340
1500-g392 -g392
Esta tabla se calcula mediante los valores típicos que se enumeran y se basa también en el supuesto de que no hay actividad del servidor vinculado, sp_OA o procedimientos almacenados extendidos están en uso. También se basa en el supuesto de que no utiliza AWE y dicho analizador de SQL no está en uso. Cualquiera de estas condiciones le obligarán a aumentar el valor de -g .

Microsoft recomienda que estudie grave consideración antes de ejecutar un servidor con más bases de datos que ésta ya que la sobrecarga que es necesaria para tener este número de bases de datos en el sistema realiza gran cantidad de memoria virtual fuera del grupo de búfer, lo que puede provocar un rendimiento deficiente del sistema como un todo.

Además, la creación de muchas bases de datos tiene el efecto más significativo en la memoria virtual. También hay asignaciones de memoria por base de datos que pueden causar una condición de memoria insuficiente del grupo de búfer. Por ejemplo, puede recibir el siguiente mensaje de error:
Error: 701, gravedad: 17, estado: 123.
No hay memoria del sistema insuficiente para ejecutar esta consulta.
Este tipo de condición de falta de memoria puede ser más comunes en SQL Server 2005 porque SQL Server 2005 realiza un seguimiento más metadatos de cada base de datos que las versiones anteriores de SQL Server.

Cuando realiza un seguimiento el uso de índice mediante el procedimiento sys.dm_db_index_usage_stats almacenado, la operación puede requerir una gran cantidad de memoria. La operación requiere una gran cantidad de memoria si cada base de datos tiene gran cantidad de índices.

Propiedades

Id. de artículo: 316749 - Última revisión: miércoles, 28 de febrero de 2007 - Versión: 11.1
La información de este artículo se refiere a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
Palabras clave: 
kbmt kberrmsg kbtshoot kbnofix kbprb KB316749 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 316749

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com