¿Por qué establecer estadísticas de actualización automática en falso?

10

Acabo de heredar unas 20 instancias de SQL Server, como parte de un proyecto de adquisición más amplio. Estoy en el proceso de evaluar el rendimiento y no me gusta la forma en que se han implementado los planes de mantenimiento.

Estoy viendo reconstrucciones diarias del índice general (puedo lidiar con este) y también actualizaciones manuales diarias de estadísticas.

Alrededor de la mitad de las bases de datos se han configurado en Estadísticas de actualización automática = Falso, por razones que no están claras, aparte de lo que me dijeron que es para reducir 'Problemas de rendimiento' ...

Siempre pensé, y trabajé, en la mejor práctica de configurar esto en True y sentí que la Actualización manual no era necesaria si esta configuración era True. ¿Me equivoco?

¿Alguien puede explicar cuál sería el beneficio de tener este conjunto como Falso, pero haciendo una actualización manual diaria?

Debo mencionar que algunas de las bases de datos son altamente transaccionales (millones de inserciones, eliminaciones, actualizaciones por día). Otras son bajas en términos de tasas de transacción, y algunas son de solo lectura. Sin embargo, no hay una rima o razón sobre cuál tiene la configuración de Actualización automática establecida en False. Parece ser una lotería.

Molenpad
fuente

Respuestas:

6

Estás en lo correcto, también creo que en la mayoría de los casos Auto Update statisticsdebería establecerse en verdadero, deberíamos permitir que SQL Server decida cuándo actualizar las estadísticas y creo que hace un buen trabajo. Cuando esto se establece en verdadero, asegúrese de que las estadísticas se actualicen sobre la distribución de datos en el campo, lo que eventualmente ayudaría al optimizador a preparar un mejor plan. Lo importante a tener en cuenta aquí es que las estadísticas de actualización automática se activan cuando el 20% de los datos cambian en la tabla. Por lo tanto, no debe sentir que en una tabla con 100K filas si se actualizan 10 filas, se activará la actualización de estado.

Paul Randal hace un análisis más profundo en el blog Comprender cuándo las estadísticas se actualizarán automáticamente . No he visto ningún inconveniente si esta opción está establecida en verdadero. Sí, puede ver alguna actividad de E / S cuando esta opción está establecida en verdadero.

Conclusión importante que se puede sacar del blog es

Incluso si una estadística queda desactualizada como resultado de una modificación, no se actualizará automáticamente una vez que se complete la modificación. La estadística se actualizará automáticamente la próxima vez que lo use un plan de consulta.

Para los casos en los que acaba de leer solo bases de datos o bases de datos en las que simplemente selecciona la operación y no hay operación DML, en ese caso puede mantener la opción en falso, pero de nuevo no se produciría ningún daño si la mantiene verdadera. Principalmente vemos bases de datos con cierta cantidad de actividad.

Shanky
fuente
10

Esto es demasiado largo para un comentario, así que intervendré con otro caso en el que uno quiera desactivar las estadísticas de actualización automática. He trabajado con bases de datos que admiten cargas de trabajo OLTP de alto volumen y un estricto SLA de rendimiento de consultas en milisegundos. Casi todas las consultas fueron triviales con mucha atención a los detalles de ajuste de índice e consulta y algunas de las tablas eran bastante grandes. No hubo mucho valor en actualizar las estadísticas durante los períodos pico en esta situación y las estadísticas de actualización automática violarían el SLA. En consecuencia, el mantenimiento se realizó durante los períodos no pico a través de un trabajo programado.

Otra opción es activar ambas AUTO_UPDATE_STATISTICSy las AUTO_UPDATE_STATISTICS_ASYNCopciones de la base de datos. Esto permitirá que las consultas continúen con los planes de ejecución basados ​​en estadísticas obsoletas en lugar de incurrir en la sobrecarga de actualizar las estadísticas sincrónicamente. Esto es especialmente apropiado para una carga de trabajo OLTP siempre que el servidor esté dimensionado para acomodar la carga de trabajo de consulta más la actualización de estadísticas de fondo.

Dan Guzman
fuente
Estaba tratando de pensar en un ejemplo en el que auto_update_stats realmente causara problemas y este es uno excelente: lo votaría dos veces (si pudiera) también por la excelente solución, evitando el retraso normal de las estadísticas que acompañaría a un consulta
SqlRyan
1
He tenido situaciones con bases de datos más grandes (VLDB), en las que la opción de estadísticas de actualización automática está activada y SQL se iniciará en momentos inoportunos de la jornada laboral. Lo apagué y tuve que ser más estratégico sobre las actualizaciones manuales de tablas y estadísticas específicas, en lugar de dejar que el servidor determinara las tablas y cuándo. Esto hizo que mi sistema fuera más predecible, pero a un costo de administración más alto (sin duda), pero tenía que suceder para evitar intrusiones en las tareas de actualización. Si lo tuyo es "cubrir" el sistema con la gestión típica de índices / estadísticas, déjalo encendido. De lo contrario, algunas situaciones pueden requerir una estrategia detallada.
SnapJag
6

En general, diría que tener estadísticas de actualización automática es beneficioso. Pero como cualquier configuración, hay razones por las que puede activarla o desactivarla.

Una es que algunas tablas tienen mucha rotación, y quizás las consultas no son muy sensibles a las estadísticas precisas. Piense en ETL u otros escenarios masivos en los que está cambiando una gran cantidad de datos, pero no los lee desde allí o no los lee mucho. No tiene mucho sentido que las actualizaciones de estadísticas automáticas se activen y provoquen un montón de E / S para proporcionar estadísticas más precisas que nunca se utilizarán.

También es posible que tenga escenarios en los que actualice los datos varias veces durante el día, pero no necesariamente desee actualizar las estadísticas después de cada actualización. (Supongamos que los datos solo se consultan durante ciertas horas del día; no es necesario actualizar las estadísticas varias veces cuando los datos no se consultarán mientras tanto).

O tal vez solo tiene una carga de trabajo de escritura pesada. O las lecturas son generalmente exploraciones completas, donde las estadísticas no son extremadamente importantes.

Aaron Bertrand
fuente