¿Qué se guarda exactamente en las estadísticas de SQL Server? Cuando se actualizan? ¿El propio SQL Server se está ocupando de ellos?

He estado trabajando con SQL Server como desarrollador por un tiempo.

Una cosa que aprendí es que SQL Server administra las estadísticas que ayudan a Engine a crear un plan de ejecución optimizado.

No pude averiguar qué son exactamente las tiendas en Estadísticas. (Leí que ahorra Vector, pero ¿Qué Vector?)

¿Cuándo/en qué escenario SQL Server actualiza las estadísticas?

Cómo/por qué en algún momento se desincronizan (Estadísticas antiguas)

En el caso de estadísticas antiguas, se requiere una intervención manual de DBA/desarrollador o SQL Server las actualizará.

Como DBA/Desarrollador, ¿cómo saber si Estadísticas VIEJA? ¿Qué debemos hacer?

preguntado el 04 de julio de 12 a las 03:07

2 Respuestas

Estadística en este contexto se refiere a un muestreo que el RDBMS toma de los valores de un índice dado. En términos generales, esto le da al motor una idea de la distribución de valores y lo ayuda a planificar consultas eficientes. Puede ver el contenido real de un conjunto de estadísticas utilizando DBCC SHOW_STATISTICS.

DBCC SHOW_STATISTICS (table_name, index_name)

Las estadísticas de un índice pueden quedar obsoletas con el tiempo a medida que cambian los datos de la tabla y, por lo tanto, la distribución de los valores del índice. Esto puede resultar en planes de ejecución de consultas menos que óptimos, razón por la cual debe tratar de mantener las estadísticas actualizadas.

Puede actualizar las estadísticas manualmente o configurarlas para que se actualicen automáticamente, utilizando el ACTUALIZAR ESTADISTICAS Comando TSQL. Desde el primer enlace de MSDN:

Cuando la opción de actualización automática de estadísticas, AUTO_UPDATE_STATISTICS, está activada, el optimizador de consultas determina cuándo las estadísticas pueden estar desactualizadas y luego las actualiza cuando las utiliza una consulta.

Respondido 04 Jul 12, 04:07

1. ¿Las estadísticas no se mantendrán para la tabla sin índice? 2. ¿Cuando ocurre la inserción/actualización, SQL Server por sí mismo actualizará las estadísticas? 3. Como DBA/desarrollador, ¿cómo encontrar si las estadísticas están desactualizadas? 4. Cuando se actualizan las estadísticas, ¿se bloquea la tabla? - Pritesh

@Pritesh 1. correcto, 2. correcto si la actualización automática está activada, 3. No estoy seguro, pero creo que Google puede ayudarlo con esto (por ejemplo: sqlservercentral.com/blogs/glennberry/2010/08/30/…) 4. puede actualizar las estadísticas de forma asíncrona usando AUTO_UPDATE_STATISTICS_ASYNC - McGarnagle

Puedes ver si tus estadísticas están actualizadas con:

select  object_name(ind.object_id) as TableName
,       ind.name as IndexName
,       stats_date(ind.object_id, ind.index_id) as StatisticsDate
FROM    sys.indexes ind
order by 
        stats_date(ind.object_id, ind.index_id) desc

Respondido 04 Jul 12, 05:07

supongamos que el valor de stats_date(ind.object_id, ind.index_id) tiene un retraso de 4 horas, pero ¿cómo podemos estar seguros de que es necesario actualizar las estadísticas en las últimas 4 horas? - Pritesh

Cuatro horas está bien, actualizamos nuestras estadísticas una vez a la semana. No debería necesitar actualizarlos más a menudo. - Andomar

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.