Estadísticas en el almacenamiento de datos de Fabric

Se aplica a: punto de conexión de SQL Analytics y almacenamiento en Microsoft Fabric

El almacén de Microsoft Fabric usa un motor de consultas para crear un plan de ejecución para una consulta SQL determinada. Al enviar una consulta, el optimizador de consultas intenta enumerar todos los planes posibles y elegir el candidato más eficaz. Para determinar qué plan requeriría la menor sobrecarga (E/S, CPU, memoria), el motor debe ser capaz de evaluar la cantidad de trabajo o filas que se pueden procesar en cada operador. A continuación, en función del costo de cada plan, elige el que tiene la menor cantidad de trabajo estimado. Las estadísticas son objetos que contienen información relevante sobre los datos, para permitir que el optimizador de consultas calcule estos costos.

Cómo aprovechar las estadísticas

Para lograr un rendimiento óptimo de las consultas, es importante tener estadísticas precisas. Microsoft Fabric admite actualmente las siguientes rutas de acceso para proporcionar estadísticas relevantes y actualizadas:

Estadísticas manuales para todas las tablas

La opción tradicional de mantener el estado de las estadísticas está disponible en Microsoft Fabric. Los usuarios pueden crear, actualizar y quitar estadísticas de una sola columna basadas en histogramas con CREATE STATISTICS, UPDATE STATISTICS y DROP STATISTICS, respectivamente. Los usuarios también pueden ver el contenido de las estadísticas de columna única basadas en histogramas con DBCC SHOW_STATISTICS. Actualmente, se admite una versión limitada de estas instrucciones.

  • Si crea estadísticas manualmente, considere la posibilidad de centrarse en las que se usan en gran medida en la carga de trabajo de consulta (específicamente en GROUP BYs, ORDER BYs, filtros y JOIN).
  • Considere la posibilidad de actualizar las estadísticas de nivel de columna periódicamente después de los cambios de datos que cambien significativamente el recuento de filas o la distribución de los datos.

Ejemplos de mantenimiento manual de estadísticas

Para crear estadísticas en la dbo.DimCustomer tabla, en función de todas las filas de una columna CustomerKey:

CREATE STATISTICS DimCustomer_CustomerKey_FullScan
ON dbo.DimCustomer (CustomerKey) WITH FULLSCAN;

Para actualizar manualmente el objeto DimCustomer_CustomerKey_FullScande estadísticas , quizás después de una actualización de datos grande:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Para mostrar información sobre el objeto de estadísticas:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan");

Para mostrar solo información sobre el histograma del objeto de estadísticas:

DBCC SHOW_STATISTICS ("dbo.DimCustomer", "DimCustomer_CustomerKey_FullScan") WITH HISTOGRAM;

Para quitar manualmente el objeto DimCustomer_CustomerKey_FullScande estadísticas :

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Los siguientes objetos T-SQL también se pueden usar para comprobar las estadísticas creadas manualmente y creadas automáticamente en Microsoft Fabric:

Estadísticas automáticas en la consulta

Siempre que emita una consulta y un optimizador de consultas requiere estadísticas para la exploración del plan, Microsoft Fabric creará automáticamente esas estadísticas si aún no existen. Una vez creadas las estadísticas, el optimizador de consultas puede usarlos para calcular los costos del plan de la consulta desencadenadora. Además, si el motor de consultas determina que las estadísticas existentes relevantes para la consulta ya no reflejan con precisión los datos, esas estadísticas se actualizarán automáticamente. Dado que estas operaciones automáticas se realizan de forma sincrónica, puede esperar que la duración de la consulta incluya esta vez si las estadísticas necesarias aún no existen o se han producido cambios significativos en los datos desde la última actualización de las estadísticas.

Para comprobar las estadísticas automáticas en tiempo de consulta

Hay varios casos en los que puede esperar algún tipo de estadísticas automáticas. Los más comunes son las estadísticas basadas en histogramas, que el optimizador de consultas solicita para las columnas a las que se hace referencia en GROUP BYs, JOINs, cláusulas DISTINCT, filtros (cláusulas WHERE) y ORDER BYs. Por ejemplo, si desea ver la creación automática de estas estadísticas, una consulta desencadenará la creación si aún no existen estadísticas COLUMN_NAME . Por ejemplo:

SELECT <COLUMN_NAME>
FROM <YOUR_TABLE_NAME>
GROUP BY <COLUMN_NAME>;

En este caso, debe esperar que se hayan creado estadísticas COLUMN_NAME . Si la columna también era una columna varchar, también verá que se crearon estadísticas de longitud media de columna. Si desea validar las estadísticas se crearon automáticamente, puede ejecutar la consulta siguiente:

select
    object_name(s.object_id) AS [object_name],
    c.name AS [column_name],
    s.name AS [stats_name],
    s.stats_id,
    STATS_DATE(s.object_id, s.stats_id) AS [stats_update_date], 
    s.auto_created,
    s.user_created,
    s.stats_generation_method_desc 
FROM sys.stats AS s 
INNER JOIN sys.objects AS o 
ON o.object_id = s.object_id 
INNER JOIN sys.stats_columns AS sc 
ON s.object_id = sc.object_id 
AND s.stats_id = sc.stats_id 
INNER JOIN sys.columns AS c 
ON sc.object_id = c.object_id 
AND c.column_id = sc.column_id
WHERE o.type = 'U' -- Only check for stats on user-tables
    AND s.auto_created = 1
    AND o.name = '<YOUR_TABLE_NAME>'
ORDER BY object_name, column_name;

Esta consulta solo busca estadísticas basadas en columnas. Si desea ver todas las estadísticas que existen para esta tabla, quite los JOIN en sys.stats_columns y sys.columns.

Ahora, puede encontrar el statistics_name valor de la estadística de histograma generada automáticamente (debe ser similar _WA_Sys_00000007_3B75D760a ) y ejecutar el siguiente T-SQL:

DBCC SHOW_STATISTICS ('<YOUR_TABLE_NAME>', '<statistics_name>');

Por ejemplo:

DBCC SHOW_STATISTICS ('sales.FactInvoice', '_WA_Sys_00000007_3B75D760');

El Updated valor del conjunto de resultados de DBCC SHOW_STATISTICS debe ser una fecha (en UTC) similar a cuando ejecutó la consulta GROUP BY original.

A continuación, el motor de consultas puede aprovechar estas estadísticas generadas automáticamente en consultas posteriores para mejorar la rentabilidad del plan y la eficacia de la ejecución. Si se producen suficientes cambios en la tabla, el motor de consultas también actualizará esas estadísticas para mejorar la optimización de las consultas. El mismo ejercicio de ejemplo anterior se puede aplicar después de cambiar significativamente la tabla. En Fabric, el motor de consultas SQL usa el mismo umbral de recompilación que SQL Server 2016 (13.x) para actualizar las estadísticas.

Tipos de estadísticas generadas automáticamente

En Microsoft Fabric, hay varios tipos de estadísticas que el motor genera automáticamente para mejorar los planes de consulta. Actualmente, se pueden encontrar en sys.stats, aunque no todos son accionables:

  • Estadísticas de histograma
    • Se crea por columna que necesita estadísticas de histograma en tiempo de consulta
    • Estos objetos contienen información de histograma y densidad con respecto a la distribución de una columna determinada. De forma similar a las estadísticas creadas automáticamente en el momento de la consulta en grupos dedicados de Azure Synapse Analytics.
    • El nombre comienza por_WA_Sys_.
    • El contenido se puede ver con DBCC SHOW_STATISTICS
  • Estadísticas de longitud media de columna
    • Se crea para las columnas de caracteres variables (varchar) de más de 100 que necesitan una longitud media de columna en tiempo de consulta.
    • Estos objetos contienen un valor que representa el tamaño medio de fila de la columna varchar en el momento de la creación de estadísticas.
    • El nombre comienza porACE-AverageColumnLength_.
    • El usuario no puede ver el contenido y no es de acción.
  • Estadísticas de cardinalidad basada en tablas
    • Se crea por tabla que necesita estimación de cardinalidad en el momento de la consulta.
    • Estos objetos contienen una estimación del recuento de filas de una tabla.
    • Con el nombre ACE-Cardinality
    • El usuario no puede ver el contenido y no es de acción.

Limitaciones

  • Solo se pueden crear y modificar manualmente estadísticas de histograma de una sola columna.
  • No se admite la creación de estadísticas de varias columnas.
  • Otros objetos de estadísticas pueden aparecer en sys.stats aparte de las estadísticas creadas manualmente y las estadísticas creadas automáticamente. Estos objetos no se usan para la optimización de consultas.