¿Hay alguna razón para actualizar las estadísticas manualmente?

19

En SQL Server, las estadísticas se actualizan automáticamente cuando está Auto Update Statisticsen True(que es el valor predeterminado). ¿Hay alguna razón para actualizar las estadísticas manualmente y en qué circunstancias?

jrara
fuente

Respuestas:

21

Claro, si sus datos cambian con más frecuencia que la tasa de estadísticas automáticas (o, por ejemplo, está actualizando <20% de las filas con frecuencia, como actualizar estados o marcas de fecha / hora). O si su tabla es enorme y no está cambiando lo suficiente como para activar actualizaciones de estadísticas automáticas. O si tiene índices filtrados ( ya que el umbral de estadísticas automáticas todavía se basa en el% de cambio en toda la tabla, no en el% de cambio del subconjunto de filas en el índice filtrado ).

Aaron Bertrand
fuente
+1 para índices filtrados. Creo que esa es la razón principal, o en conjuntos de datos MUY grandes. Tengo tablas que inserto 30 millones de filas al mes, pero es un pequeño porcentaje, por lo que las estadísticas normalmente no se actualizan a menos que lo inicie manualmente.
JNK
+1 Además, lo hace en un horario para restablecer los contadores, significa menos posibilidades fuera de su ventana de mantenimiento.
gbn
7

Un par de razones más (superficiales):

Las estadísticas de actualización automática bloquearán la consulta que activó la actualización hasta que las nuevas estadísticas estén listas.

... A menos que también habilite las estadísticas de actualización automática de forma asincrónica. Entonces, la consulta que desencadenó la actualización no esperará las nuevas estadísticas, sino que se ejecutará potencialmente con las estadísticas antiguas e incorrectas.

También me encontré con algunos problemas de bloqueo extraños cuando una base de datos con algunas tablas relativamente grandes (44 millones de filas, 8,5 GB) comenzaría a actualizar las estadísticas. Sin embargo, retiramos esa aplicación antes de que pudiera rastrear realmente lo que estaba sucediendo.

db2
fuente
1
+1 Ese es un gran punto sobre el bloqueo y la opción asíncrona.
Aaron Bertrand