El punto de inflexión es un término que escuché por primera vez utilizado por la gurú del ajuste del rendimiento de SQL Server y miembro del Consejo Asesor de SentryOne desde hace mucho tiempo, Kimberly Tripp; tiene una gran serie de blogs sobre esto aquí. El punto de inflexión es el umbral en el que un plan de consulta "inclinará" la búsqueda de un índice no agrupado que no cubre para escanear el índice agrupado o el montón. La fórmula básica, que no es una regla estricta ya que hay varios otros factores que influyen, es esta:
- A menudo, se realizará un escaneo de índice agrupado (o tabla) cuando las filas estimadas excedan el 33% del número de páginas en la tabla.
- A menudo, se producirá una búsqueda no agrupada de búsqueda más clave cuando las filas estimadas estén por debajo del 25 % de las páginas de la tabla.
- Entre el 25 % y el 33 % puede ir en cualquier dirección
Tenga en cuenta que hay otros "puntos de inflexión" del optimizador, como cuando un cubrimiento índice pasará de una búsqueda a un escaneo, o cuando una consulta irá en paralelo, pero en lo que nos estamos enfocando es en el índice no agrupado que no cubre escenario porque tiende a ser el más común:¡es difícil cubrir todas las consultas! También es potencialmente más peligroso para el rendimiento, y cuando escucha a alguien referirse al punto de inflexión del índice de SQL Server, esto es lo que normalmente quiere decir.
El punto de inflexión en versiones anteriores de Plan Explorer
Plan Explorer ha mostrado previamente el efecto neto del punto de inflexión cuando la detección de parámetros está en juego en el Análisis de índice pestaña, específicamente a través de la Operación est(imated) fila en Parámetros panel:
La operación estimada para los parámetros compilados y de tiempo de ejecución, según el número de filas
Si aún no ha explorado el módulo de Análisis de índices, le animo a que lo haga. Aunque el diagrama del plan y otras funciones del Explorador de planes son excelentes, francamente, el análisis de índices es donde debería pasar la mayor parte de su tiempo al ajustar consultas e índices. Consulte la revisión detallada de Aaron Bertrand de características y escenarios aquí, y un excelente tutorial de índice de cobertura de Devon Leann Wilson aquí.
Detrás de escena, hacemos las matemáticas del punto de inflexión y predecimos la operación de índice (buscar o escanear) en función de las filas estimadas y el número de páginas en la tabla para los parámetros compilados y de tiempo de ejecución, y luego codificamos con colores las celdas asociadas para que puede ver rápidamente si coinciden. Si no es así, como en el ejemplo anterior, puede ser un fuerte indicador de que tiene un problema de detección de parámetros.
El histograma de estadísticas El gráfico refleja la distribución de valores para la clave principal del índice usando columnas para filas iguales (naranja) y filas de rango (verde azulado). Estos son los mismos valores que obtendrá de DBCC SHOW_STATISTICS o sys.dm_db_stats_histogram . Las partes de la distribución que se ven afectadas por los parámetros compilados y de tiempo de ejecución se resaltan para darle una idea aproximada de cuántas filas están involucradas para cada uno. Simplemente seleccione el Valor compilado o Valor de tiempo de ejecución columna para ver el rango seleccionado:
Gráfico de histograma que muestra el rango alcanzado por los parámetros de tiempo de ejecución
Nuevos controles e imágenes
Las funciones anteriores eran agradables, pero durante un tiempo sentí que había más que podíamos hacer para aclarar las cosas. Entonces, en la última versión de Plan Explorer (2020.8.7), la parte inferior del panel Parámetros tiene algunos controles nuevos con imágenes asociadas en el gráfico de histograma:
Nuevos controles para histogramas visuales
Tenga en cuenta que el histograma que se muestra de forma predeterminada es para el índice utilizado por la consulta para acceder a la tabla seleccionada, pero puede hacer clic en cualquier otro encabezado de índice o columna de tabla en la cuadrícula para ver otro histograma.
Rango de punto de inflexión
El rango del punto de inflexión casilla de verificación alterna la banda roja clara que se muestra en el gráfico de histograma:
Alternar para banda de rango de punto de inflexión
Si las filas estimadas están por debajo de este rango, el optimizador favorecerá una búsqueda + búsqueda y, por encima de ella, una exploración de la tabla. Dentro del rango es una incógnita.
Est(imated)/Filas reales
Las filas estimadas/reales La casilla de verificación alterna la visualización de filas estimadas (de los parámetros compilados) y filas reales (de los parámetros de tiempo de ejecución). Las flechas en el gráfico a continuación ilustran la relación entre este control y los elementos asociados:
Alternar filas estimadas y reales en el gráfico de histograma
En este ejemplo, está claro que las filas estimadas están por debajo del punto de inflexión y las filas reales devueltas están por encima, lo que se refleja en la diferencia entre las operaciones estimadas y reales enumeradas (búsqueda frente a exploración). ¡Esto es un olfateo clásico de parámetros, ilustrado!
En una publicación futura, profundizaré en cómo esto se correlaciona con lo que ve en el diagrama del plan y la cuadrícula de declaraciones. Mientras tanto, aquí hay un archivo de sesión de Plan Explorer que contiene este ejemplo (búsqueda de parámetros de búsqueda para escanear), así como un ejemplo de escaneo para buscar. Ambos aprovechan la base de datos ampliada de WideWorldImporters.
Filas de rango o Filas de rango promedio
Las versiones anteriores de Plan Explorer apilaban las filas iguales y las filas de rango en una columna para representar el número total de filas en un cubo de histograma. Esto funciona bien cuando tiene un predicado de desigualdad o rango como se muestra arriba, pero para los predicados de igualdad no tiene mucho sentido. Lo que realmente desea ver son las filas de rango promedio, ya que eso es lo que utilizará el optimizador para la estimación. Desafortunadamente, no había forma de obtener esto.
En el nuevo histograma Plan Explorer, en lugar de una serie de columnas apiladas, ahora usamos columnas agrupadas con filas iguales y filas de rango una al lado de la otra, y usted controle si desea mostrar las filas de rango total o promedio según corresponda usando Filas de rango / Filas de rango promedio selector. Más sobre esto pronto...
Conclusión
Estoy muy entusiasmado con estas nuevas funciones y espero que las encuentre útiles. Pruébalos descargando el nuevo Plan Explorer. Esta fue simplemente una breve introducción, y espero cubrir algunos escenarios diferentes aquí. Como siempre, ¡cuéntanos lo que piensas!