Cuando tuve que buscar problemas con el almacenamiento en caché del plan o la recompilación excesiva de consultas en el pasado, seguí las instrucciones proporcionadas en el documento técnico de Microsoft 'Planificar almacenamiento en caché en SQL Server 2008' y sugiero encarecidamente leer eso, ya que cubre el almacenamiento en caché del plan, la reutilización del plan de consulta, las causas de las recompilaciones, la identificación de las recompilaciones y otros temas relacionados.
Dicho esto, SQL Server Profiler (debería estar debajo de Microsoft SQL Server 2008 -> Performance Tools si lo instaló como parte de la instalación de sus herramientas de cliente) expone tres eventos directamente relacionados con la compilación de consultas que pueden ser de ayuda para usted:
- Cursores
- CursorRecompilar
- Rendimiento
- Showplan XML para compilación de consultas
- Procedimiento almacenado
- SP:Recompilar
Está utilizando procedimientos almacenados, por lo que probablemente solo deba preocuparse por SP:Recompilar evento. Este evento se activará cada vez que se vuelva a compilar un procedimiento almacenado, un activador o una función definida por el usuario. La columna TextData mostrará el texto de la declaración tsql que provocó la recompilación de la declaración y la columna EventSubClass mostrará un código que indica el motivo de la recompilación.
Códigos EventSubClass para SP:Recompilar en SQL 2008
- 1 =Esquema cambiado
- 2 =Estadísticas modificadas
- 3 =Recompilar DNR
- 4 =Opción de configuración cambiada
- 5 =Tabla temporal modificada
- 6 =Conjunto de filas remoto cambiado
- 7 =Para permisos de navegación modificados
- 8 =Entorno de notificación de consulta modificado
- 9 =Vista de MPI modificada
- 10 =Opciones de cursor cambiadas
- 11 =Con opción de recompilación
Si supervisa los siguientes 5 eventos, podrá ver qué procedimientos almacenados y declaraciones se invocan en SQL Server y cuáles desencadenan recompilaciones:
- Procedimientos de la tienda
- SP:Iniciando
- SP:StmtStarting
- SP:Recompilar
- SP:Completado
- Rendimiento
- Estadísticas automáticas
Por lo general, también configuro el seguimiento de Profiler para capturar todas las columnas para esos eventos. Diría que configure un seguimiento con esos 5 eventos, ejecute un seguimiento durante 30 a 60 segundos y luego haga una pausa y luego debería tener una buena instantánea de lo que está causando las recompilaciones.
Si hay demasiado ruido, puede comenzar a agregar filtros de columna a las propiedades de seguimiento para filtrar eventos de entrada/salida. Por ejemplo, si encuentra que la mayoría de sus recompilaciones ocurren en una sola base de datos, configure un filtro de columna en la columna ID de base de datos o nombre de base de datos para que solo las consultas ejecutadas en esa base de datos se incluyan en su seguimiento.
Luego, comience a buscar patrones en los que las consultas se vuelvan a compilar y use el documento técnico de Microsoft como guía sobre por qué podrían estar activando la recompilación.