Una luz dentro del mundo oculto de estadísticas SQL Server
1. #SQSummit
Una luz dentro del
mundo oculto de las
estadísticas de SQL
Server
Javier Loria
JLoria@solidq.com
/in/JavierSQL
@JavierSQL
2. Agenda
Que son? y para que se usan?
Creando estadísticas
Leyendo estadísticas
Manteniendo estadísticas
3. Qué son?
• Objetos que mantienen información sobre
columnas de tablas o vistas
• Selectividad
• Cardinalidad
• Densidad
• Se construyen:
• Automáticamente
• Indirectamente
• Directamente
4. Conceptos
• Grado en que puede distinguirse un valor del grupo.
• Sexo es menos selectivo que DNI
Selectividad
• Opuesto a Selectividad
• 1.0 / COUNT(DISTINCT <ColumnName>))
Densidad
• Número de Filas que satisface un predicado.
Cardinalidad
5. Para que sirven las estadísticas?
• Para hacer buenos planes de acceso.
• No son la única fuente de información
• sys.sysindexes: filas (rows) y páginas (dpages)
• Funciones de partición, CHECKs y otros
7. Demo
Conceptos
• Selectividad
• Densidad
• Cardinalidad
Consultas
• Diferentes parámetros:
diferentes planes
• Diferentes estadísticas:
diferentes planes
Estadística
Incorrecta
• Planes Sub-Óptimos
8. Creación de Estadísticas
• Automáticamente
• CREATE INDEX
• Columna se usa en un Predicado (WHERE o ON)
• BD en Auto_Create y sin Estadísticas
• Individualmente: CREATE STATISTICS
• Granel: SP_CREATESTATS --(IndexOnly)
• Indirectamente:
• Columnas fecha correlacionadas
(DATE_CORRELATION_OPTIMIZATION)
10. Demo
Índices • Asociados con una estadística
Predicados
de
Consultas
• Crean estadísticas, si se usa
AUTO_CREATE
Estadísticas
Incorrectas
• Planes Sub-Óptimos
Recomenda
ción
• SP
Fechas: • DATE_CORRELATION_OPTIMIZATION
15. Demo
Resumen de Demo
Estadísticas
• Ayudan a estimar la cardinalidad
• Crean/Mantienen solas (Default)
• Campo para optimización.
DBCC
SHOW…
• Para evaluar la calidad
• Incorrectas? o Desactualizadas?
Estadísticas
• Guía de calidad de un índice.
• Sin respuestas definitivas
Como se aprende
a leer: • LEYENDO!
16. Mantenimiento de Estadísticas
• Automáticamente
• ALTER INDEX REBUILD
• CREATE INDEX WITH (DROP_EXISTING=ON)
• AUTO_UPDATE
• ALTER INDEX REORGANIZE
• Manualmente
• UPDATE_STATISTICS
• sp_updatestats
17. Porque importa?
IO: Leen la tabla
CPU: Recompilan los
comandos
Tiempo: Se hacen durante
la consulta (default)
18. AUTO_UPDATE_STATISTICS
• Caducan
• Tabla en Base de Datos Local:
• 0 a >0
• <=500 y cambios (1ra Fila) >500
• >500 y cambios (1da Fila) >500 + 20% filas originales
• Temporales
• <=6 y cambios (primera fila ) >6
• Variables Tabla: sin estadísticas
22. Demo
DML
Up-Del
Ins-Merg
• Cambios en estadísticas
• Cambios en Planes
• Re-compilaciones
SQL 2005+
• Control por columna
• Reduce el impacto del Actualización
Temporales
• Cuidar las re-compilaciones
• Crear y Llenar al Principio
• Tablas grandes no usar variables.
VLDB • Asincrónicas?
23. Impacto de las Estadísticas
Con
Estadísticas
Sin
Estadísticas
24. Monitoreando con Profiler
• AutoStats
• stmtCompleted
• SELECT StatMan([SC0]) FROM (SELECT TOP 100
PERCENT <Columna> AS [SC0] FROM <Tabla> WITH
(READUNCOMMITTED) ORDER BY [SC0] ) AS
_MS_UPDSTATS_TBL
26. Mejores Prácticas
• Mantener BD en:
• AUTO_CREATE_STATISTICS
• AUTO_UPDATE_STATISTICS
• En OLTP:
• 8x5: sp_updatestats (Diario o Semanal)
• 24x7: CREATE STATISTICS en JOBS durante horas de
poco trabajo.
• En DW Relacional:
• Apagar/Prender AUTO_CREATE/UPDATE en ETL.
27. Mejores Prácticas: Especiales
• Usa Auto-numéricos o Fechas Crecientes:
• Trace Flag: 2389 o 2389/2390.
• Trigger personalizado
• Job de Actualización de estadísticas seleccionadas.
• VLDB
• AUTO_UPDATE_STATISTICS_ASYNC
• Exceso de Re-compilaciones
• Considerar patrones de tablas temporales y opciones
"KEEP PLAN" y "KEEPFIXED PLAN"
• Usar STATISTICS_NORECOMPUTE en tablas específicas y
actualizar periódicamente.
• Evaluar: DATE_CORRELATION_OPTIMIZATION
28. Resumen
Que son? y para que se usan?
Creando estadísticas
Leyendo estadísticas
Manteniendo estadísticas
29. Una luz dentro del mundo oculto de
las estadísticas de SQL Server