Tamaño apropiado del archivo de paginación del sistema operativo Windows para SQL Server

StackOverflow https://stackoverflow.com/questions/2588

  •  08-06-2019
  •  | 
  •  

Pregunta

¿Alguien conoce una buena regla general para el tamaño de archivo de paginación apropiado para un servidor Windows 2003 que ejecuta SQL Server?

¿Fue útil?

Solución

Independientemente del tamaño de la RAM, todavía necesita un archivo de paginación al menos 1,5 veces la cantidad de RAM física.Esto es cierto incluso si tiene una máquina con 1 TB de RAM, necesitará un archivo de paginación de 1,5 TB en el disco (suena loco, pero es cierto).

Cuando un proceso solicita memoria MEM_COMMIT a través de VirtualAlloc/VirtualAllocEx, el tamaño solicitado debe reservarse en el archivo de paginación.Esto era cierto en el primer sistema Win NT y sigue siendo cierto hoy en día. Administrar la memoria virtual en Win32:

Cuando se compromete la memoria, se asignan páginas físicas de memoria y el espacio está reservado en un archivo de página.

Salvo en algunos casos extremos y extraños, SQL Server siempre solicitará páginas MEM_COMMIT.Y dado el hecho de que SQL usa un Gestión de memoria dinámica política que reserve por adelantado la mayor cantidad posible de reservas (reservas y se compromete en términos de VAS), SQL Server solicitará al inicio una gran reserva de espacio en el archivo de paginación.Si el archivo de paginación no tiene el tamaño adecuado, los errores 801/802 comenzarán a aparecer en el archivo y las operaciones ERRORLOG de SQL.

Esto siempre causa cierta confusión, ya que los administradores suponen erróneamente que una gran cantidad de RAM elimina la necesidad de un archivo de paginación.En realidad sucede lo contrario, una gran RAM aumenta la necesidad de un archivo de paginación, simplemente por el funcionamiento interno del administrador de memoria de Windows NT.Es de esperar que el archivo de paginación reservado nunca se utilice.

Otros consejos

Con el debido respeto a Remus (a quien respeto mucho), estoy totalmente en desacuerdo.Si su archivo de página es lo suficientemente grande como para soportar un volcado completo, realizará un volcado completo cada vez.Si tiene una cantidad muy grande de RAM, esto puede provocar que un pequeño problema se convierta en una interrupción importante.

NO desea que su servidor tenga que escribir 1 TB de RAM en el disco si hay un problema transitorio puntual.Si hay un problema recurrente, puede aumentar el archivo de página para capturar un volcado completo.Esperaría para hacer esto hasta que PSS (u otra persona calificada para analizar un volcado completo) le haya indicado que le solicite que capture un volcado completo.Un porcentaje extremadamente pequeño de administradores de bases de datos saben cómo analizar un volcado completo.Un minivolcado es suficiente para solucionar la mayoría de los problemas que surgen de todos modos.

Además, si su servidor está configurado para permitir un volcado completo de 1 TB y se produce un problema recurrente, ¿cuánto espacio libre en disco recomendaría tener a mano?Podrías llenar una SAN completa en un solo fin de semana.

Un archivo de página de 1,5*RAM era la norma en los días en que tenías la suerte de tener un servidor SQL con 3 o 4 GB de RAM.Este ya no es el caso.Dejo el archivo de página con el tamaño y la configuración predeterminados de Windows en todos los servidores de producción (excepto en un servidor SSAS que está experimentando presión de memoria).

Y solo para aclarar, he trabajado con servidores que van desde 2 GB de RAM hasta 2 TB de RAM.Después de más de 11 años, solo tuve que aumentar el archivo de paginación para capturar un volcado completo una vez.

Según Microsoft, "a medida que aumenta la cantidad de RAM en una computadora, la necesidad de un archivo de página disminuye". Luego, el artículo continúa describiendo cómo usar registros de rendimiento para determinar cuánto del archivo de página es de hecho siendo utilizado.Para empezar, intente configurar su archivo de paginación en 1,5 veces la memoria del sistema, luego realice la supervisión recomendada y realice ajustes desde allí.

Cómo determinar el tamaño de archivo de página apropiado para versiones de 64 bits de Windows

Cuanto más grande, mejor hasta el tamaño del conjunto de trabajo de la aplicación, donde comenzará a obtener rendimientos decrecientes.Puede intentar encontrar esto aumentando o disminuyendo lentamente el tamaño hasta que vea un cambio significativo en las tasas de aciertos de la caché.Sin embargo, si la tasa de aciertos de la caché es superior al 90% aproximadamente, probablemente esté bien.Generalmente debes estar atento a esto en un sistema de producción para asegurarte de que no haya superado su asignación de RAM.

Recientemente tuvimos algunos problemas de rendimiento con uno de nuestros servidores SQL que no pudimos resolver por completo y, de hecho, utilizamos uno de nuestros tickets de soporte de Microsoft para que nos ayudaran a solucionar el problema.Surgió el tamaño de archivo de paginación óptimo para usar con SQL Server y la recomendación de Microsoft es que sea 1 1/2 veces la cantidad de RAM.

Si busca un alto rendimiento, querrá evitar la paginación por completo, de modo que el tamaño del archivo de página sea menos significativo.Invierta en tanta RAM como sea posible para el servidor de base de datos.

Después de mucha investigación, nuestros servidores SQL dedicados que ejecutan Enterprise x64 en Windows 2003 Enterprise x64 no tienen ningún archivo de página.

Simplemente, el archivo de página es un caché para archivos administrado por el sistema operativo, y SQL tiene su propio sistema de administración de memoria interna.

El artículo de MS al que se hace referencia no califica como si el consejo fuera para el sistema operativo que ejecuta servicios listos para usar, como el intercambio de archivos.

Tener un archivo de paginación simplemente sobrecarga la E/S del disco porque Windows está tratando de ayudar, cuando solo el sistema operativo SQL puede hacer el trabajo.

En este caso, la recomendación normal de 1,5 veces la RAM física total no es la mejor.Esta recomendación muy general se proporciona bajo el supuesto de que toda la memoria está siendo utilizada por procesos "normales", que generalmente pueden mover sus páginas menos utilizadas al disco sin generar problemas masivos de rendimiento para el proceso de aplicación al que pertenece la memoria.

Para servidores que ejecutan SQL Server (generalmente con cantidades muy grandes de RAM), la mayor parte de la RAM física está comprometida con el proceso de SQL Server y debe (si se configura correctamente) bloquearse en la memoria física, evitando que se pagina en el archivo de paginación. .SQL Server administra su propia memoria con mucho cuidado teniendo en cuenta el rendimiento, utilizando una gran parte de la RAM asignada a su proceso como caché de datos para reducir la E/S del disco.No tiene sentido paginar esas páginas de caché de datos en el archivo de paginación, ya que el único propósito de tener esos datos en la RAM en primer lugar es reducir la E/S del disco.(Tenga en cuenta que el sistema operativo Windows también utiliza la RAM disponible de manera similar a la memoria caché del disco para acelerar el funcionamiento del sistema). Dado que SQL Server ya administra su propio espacio de memoria, este espacio de memoria no debe considerarse "paginable" y no debe incluirse en un cálculo para el archivo de paginación. tamaño.

Con respecto a MEM_COMMIT mencionado por Remus, la terminología es confusa porque en el lenguaje de la memoria virtual, "reservado" nunca se refiere a la asignación real, sino a impedir el uso de un espacio de direcciones (no espacio físico) por otro proceso.La memoria disponible para ser "comprometida" es básicamente igual a la suma de la RAM física y el tamaño del archivo de paginación, y hacer MEM_COMMIT simplemente disminuye la cantidad disponible en el grupo comprometido.Lo hace no asigne una página coincidente en el archivo de paginación en ese momento.Cuando realmente se escribe en una página de memoria comprometida, es cuando el sistema de memoria virtual asignará una página de memoria física y posiblemente enviará otra página de memoria de la RAM física al archivo de paginación.Ver MSDN Función VirtualAlloc referencia.

El sistema operativo Windows realiza un seguimiento de las presiones de memoria entre los procesos de la aplicación y su propio mecanismo de caché de disco y decide cuándo debe pasar las páginas de memoria no bloqueadas de la física al archivo de paginación.Tengo entendido que tener un archivo de paginación que es demasiado grande en comparación con el espacio de memoria real no bloqueado puede hacer que Windows pague con demasiado entusiasmo la memoria de la aplicación al archivo de paginación, lo que hace que esas aplicaciones sufran las consecuencias de pérdidas de páginas (rendimiento lento).

Siempre que el servidor no esté ejecutando otros procesos que consuman mucha memoria, un tamaño de archivo de paginación de 4 GB debería ser suficiente.Si ha configurado SQL Server para permitir bloquear páginas en la memoria, también debería considerar configurar la configuración de memoria máxima de SQL Server para que deje algo de RAM física disponible para el sistema operativo para sí mismo y para otros procesos.

Los errores 802 en SQL Server indican que el sistema no puede enviar más páginas para el caché de datos.Aumentar el tamaño del archivo de paginación solo ayudará en esta situación en la medida en que Windows pueda paginar la memoria de procesos que no sean de SQL Server.Permitir que la memoria de SQL Server crezca en el archivo de paginación en esta situación podría eliminar los mensajes de error, pero es contraproducente, debido al punto anterior sobre el motivo del caché de datos en primer lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top