¿Estoy en lo cierto al decir que las estadísticas solo se usan cuando se crea el plan de ejecución para un procedimiento almacenado y no se usan en el contexto de ejecución real?
No, lo que sucede es que el plan de ejecución para un procedimiento almacenado se almacena en caché. Suponiendo que haya suficiente memoria disponible para continuar manteniendo el plan, no cambiará a menos que ocurra una de las siguientes situaciones (de Caché y reutilización del plan de ejecución en la documentación de SQL Server, énfasis agregado):
- Cambios realizados en una tabla o vista referenciada por la consulta (ALTER TABLE y ALTER VIEW).
- Los cambios realizados en un solo procedimiento, que eliminarían todos los planes para ese procedimiento del caché (ALTER PROCEDURE).
- Cambios en los índices utilizados por el plan de ejecución.
- Actualizaciones sobre estadísticas utilizadas por el plan de ejecución, generadas explícitamente a partir de una declaración, como ACTUALIZAR ESTADÍSTICAS, o generadas automáticamente.
- Descartar un índice utilizado por el plan de ejecución.
- Una llamada explícita a sp_recompile.
- Gran cantidad de cambios en las claves (generados por las instrucciones INSERT o DELETE de otros usuarios que modifican una tabla a la que hace referencia la consulta).
- Para tablas con disparadores, si el número de filas en las tablas insertadas o eliminadas aumenta significativamente.
- Ejecutar un procedimiento almacenado usando la opción WITH RECOMPILE.
Entonces, si las estadísticas se actualizan, el plan en caché tomará automáticamente en cuenta las nuevas estadísticas y se volverá a compilar.
¿Cómo evita que los planes de ejecución se vuelvan obsoletos cuando se agregan cien mil filas al día?
Una forma es si hay muchas actualizaciones en la tabla, como se mencionó anteriormente. Unos cientos de miles de filas modificadas pueden satisfacer esta condición. Pero si quieres estar seguro o tener un control más granular: actualizando tus estadísticas. Puede permitir que SQL Server cree y administre automáticamente estadísticas, o hacerlo manualmente usted mismo. Puede encontrar más información sobre cualquiera de los métodos en SQL Server Auto Update y Auto Create Statistics Options . Cuando / si realiza una reconstrucción semanal de índices, esto también activará la actualización de los planes. Haga algunas pruebas para ver qué es lo más beneficioso para usted, ya que actualizar las estadísticas con demasiada frecuencia puede no arrojar ningún resultado de rendimiento real.
Si estamos actualizando estadísticas con frecuencia para combatir este problema, ¿tendría sentido usar la sugerencia OPTION (RECOMPILE) en la consulta de este procedimiento almacenado?
No necesita usarlo RECOMPILE
, ya que según el extracto anterior, puede ver que el plan de ejecución se actualiza adecuadamente cada vez que hay nuevas estadísticas disponibles. Puede estar bien con una actualización de estadísticas al final del día (si está realmente preocupado), pero no creo que sea explícitamente una necesidad basada en lo que ha dicho hasta ahora. Una vez más, sin embargo, lo probaría para ver qué impacto puede tener esto en el rendimiento de su procedimiento almacenado y planificar en consecuencia.
RECOMPILE
no causaría una actualización de estadísticas de todos modos.