Estamos ocupados probando un sistema OLTP que hemos desarrollado en .NET 4.0 y ejecuta SQL Server 2008 R2 en la parte posterior. El sistema utiliza colas de SQL Server Service Broker, que son muy eficaces, pero estamos experimentando una tendencia peculiar durante el procesamiento.
Las solicitudes de proceso de SQL Server a una velocidad de ampollas durante 1 minuto, seguido de ~ 20 segundos de actividad de escritura en disco aumentada. El siguiente gráfico ilustra el problema.
Yellow = Transactions per second
Blue = Total CPU usage
Red = Sqlsrv Disk Write Bytes/s
Green = Sqlsrv Disk Read Bytes/s
Durante la resolución de problemas, intentamos lo siguiente sin ningún cambio significativo en el patrón:
- Agente SQL Server detenido.
- Eliminó casi cualquier otro proceso en ejecución (sin A / V, SSMS, VS, Windows Explorer, etc.)
- Se eliminaron todas las demás bases de datos.
- Deshabilitó todos los temporizadores de conversación (no utilizamos ningún desencadenante).
- Se alejó de un enfoque dirigido por la cola de mensajes a un diseño de monitoreo de tabla simple / crudo.
- Usó diferentes cargas, desde ligeras hasta pesadas.
- Se corrigieron todos los puntos muertos.
Parece que SQL Server podría estar acumulando su caché y escribiéndola en el disco a intervalos de tiempo específicos, pero no puedo encontrar nada en línea que respalde esta teoría.
A continuación, planeo trasladar la solución a nuestro entorno de prueba dedicado para ver si puedo replicar el problema. Cualquier ayuda en el ínterin sería muy apreciada.
Actualización 1 Según lo solicitado, adjunto un gráfico que incluye las páginas de punto de verificación / seg. , La expectativa de vida útil de la página y algunos contadores de latencia de disco.
Parece que el punto de control (línea azul claro) es la causa del rendimiento reducido (línea amarilla) que estamos observando. ^
La latencia del disco permanece relativamente constante durante el procesamiento y la expectativa de vida de la página no parece tener ningún efecto notable. También ajustamos la cantidad de ram disponible para SQL Server, que tampoco tuvo un gran efecto. Cambiar el modelo de recuperación de SIMPLE
a FULL
también hizo poca diferencia.
Actualización 2 Al cambiar el "Intervalo de recuperación" de la siguiente manera, hemos logrado reducir el intervalo en el que ocurren los puntos de control:
EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
EXEC sp_configure 'recovery interval', '30'
GO
RECONFIGURE
GO
EXEC sp_configure 'show advanced options',0
GO
RECONFIGURE
Sin embargo, no estoy seguro de si esto es una mala práctica.
FULL
o BULK_LOGGED
, todavía se comporta como si estuviera dentro SIMPLE
hasta que realice una copia de seguridad completa.