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.
Uso de 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 definidas por el usuario
- El usuario usa manualmente la sintaxis del lenguaje de definición de datos (DDL) para crear, actualizar y quitar estadísticas según sea necesario.
- Estadísticas automáticas
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 columnas 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_FullScan
de 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_FullScan
de 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:
- sys.stats vista de catálogo
- sys.stats_columns vista de catálogo
- STATS_DATE función del sistema
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 crea 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 pertinentes para la consulta ya no reflejan con precisión los datos, esas estadísticas se actualizan 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.
Comprobación de 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
LEFT JOIN sys.stats_columns AS sc
ON s.object_id = sc.object_id
AND s.stats_id = sc.stats_id
LEFT 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;
Ahora, puede encontrar el statistics_name
valor de la estadística de histograma generada automáticamente (debe ser similar _WA_Sys_00000007_3B75D760
a ) 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 por
ACE-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.