Estadísticas en el almacenamiento de datos de Fabric
Se aplica a: Punto de conexión y almacenamiento de SQL 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 y 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.
Importante
Microsoft Fabric se encuentra actualmente en versión preliminar. Esta información está relacionada con un producto en versión preliminar que puede modificarse considerablemente antes de su lanzamiento. Microsoft no ofrece ninguna garantía, expresa o implícita, con respecto a la información que se ofrece aquí.
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 definidas por el usuario
- El usuario emite 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 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 DimCustomer_CustomerKey_FullScan (CustomerKey) 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:
- Vista de catálogo sys.stats
- 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 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. Dado que esta creación se realiza de forma sincrónica, puede esperar que la primera ejecución de consulta incluya esta hora de creación de estadísticas.
Para comprobar la creación automática de estadísticas en tiempo de consulta
Hay varios casos en los que puede esperar que se cree automáticamente algún tipo de estadísticas. Los más comunes son las estadísticas del sistema basadas en histogramas, que a menudo se crean 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_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.
Nota:
Microsoft Fabric no admite actualmente la actualización automática de estadísticas en tiempo de consulta.
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 (char y varchar) 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.
- Denominado
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 mostrarse 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.