Статистика в хранилище данных Fabric

Область применения:✅ конечная точка аналитики SQL и хранилище в Microsoft Fabric

Хранилище в Microsoft Fabric использует обработчик запросов для создания плана выполнения для заданного SQL-запроса. При отправке запроса оптимизатор запросов пытается перечислить все возможные планы и выбрать наиболее эффективного кандидата. Чтобы определить, какой план требует наименьших затрат (операций ввода-вывода, ЦП, памяти), подсистема должна иметь возможность оценить объем работы или строк, которые могут обрабатываться на каждом операторе. Затем, на основе стоимости каждого плана, он выбирает один с наименьшим объемом предполагаемой работы. Статистика — это объекты, содержащие соответствующие сведения о данных, позволяющие оптимизатору запросов оценить эти затраты.

Использование статистики

Для достижения оптимальной производительности запросов важно иметь точную статистику. В настоящее время Microsoft Fabric поддерживает следующие пути для предоставления актуальной и актуальной статистики:

Статистика вручную для всех таблиц

Традиционный вариант поддержания работоспособности статистики доступен в Microsoft Fabric. Пользователи могут создавать, обновлять и удалять статистику на основе гистограммы с помощью CREATE STATISTICS, UPDATE STATISTICS и DROP STATISTICS соответственно. Пользователи также могут просматривать содержимое статистики на основе гистограммы с SHOW_STATISTICS DBCC. В настоящее время поддерживается ограниченная версия этих инструкций.

  • При создании статистики вручную рекомендуется сосредоточиться на тех, которые сильно используются в рабочей нагрузке запроса (в частности, в GROUP BYs, ORDER BYs, filters и JOIN).
  • Рекомендуется регулярно обновлять статистику на уровне столбцов после изменения данных, которые значительно изменяют число строк или распределение данных.

Примеры обслуживания статистики вручную

Чтобы создать статистику в dbo.DimCustomer таблице, на основе всех строк в столбце CustomerKey:

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

Чтобы вручную обновить объект DimCustomer_CustomerKey_FullScanстатистики, возможно, после обновления больших данных:

UPDATE STATISTICS dbo.DimCustomer (DimCustomer_CustomerKey_FullScan) WITH FULLSCAN;  

Чтобы отобразить сведения об объекте статистики, выполните следующие действия.

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

Чтобы отобразить только сведения о гистограмме объекта статистики:

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

Чтобы вручную удалить объект DimCustomer_CustomerKey_FullScanстатистики:

DROP STATISTICS dbo.DimCustomer.DimCustomer_CustomerKey_FullScan;

Следующие объекты T-SQL также можно использовать для проверки как вручную созданных, так и автоматически созданных статистических данных в Microsoft Fabric:

Автоматическая статистика по запросу

При возникновении запроса и оптимизатора запросов требуется статистика для изучения плана, Microsoft Fabric автоматически создаст эти статистические данные, если они еще не существуют. После создания статистики оптимизатор запросов может использовать их при оценке затрат на план запускающего запроса. Кроме того, если обработчик запросов определяет, что существующая статистика, относяющаяся к запросу, больше не точно отражает данные, эти статистические данные будут автоматически обновляться. Так как эти автоматические операции выполняются синхронно, можно ожидать, что длительность запроса будет включаться в этот раз, если необходимая статистика еще не существует или значительные изменения данных произошли с момента последнего обновления статистики.

Проверка автоматической статистики во время запроса

Существуют различные случаи, когда можно ожидать некоторые типы автоматической статистики. Наиболее распространенными являются статистические данные на основе гистограммы, запрашиваемые оптимизатором запросов для столбцов, на которые ссылается группа BYs, JOINs, предложения DISTINCT, фильтры (предложения WHERE) и ORDER BYs. Например, если вы хотите увидеть автоматическое создание этой статистики, запрос запустит создание, если статистика COLUMN_NAME еще не существует. Например:

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

В этом случае следует ожидать создания статистики COLUMN_NAME . Если столбец также был столбцом varchar, вы также увидите статистику средней длины столбца. Если вы хотите автоматически проверить статистику, можно выполнить следующий запрос:

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;

Этот запрос ищет только статистику на основе столбцов. Если вы хотите просмотреть всю статистику, которая существует для этой таблицы, удалите joIN в sys.stats_columns и sys.columns.

Теперь вы можете найти statistics_name статистику гистограммы автоматически созданной (должна быть примерно такой _WA_Sys_00000007_3B75D760) и запустить следующий T-SQL:

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

Например:

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

Значение Updated в результирующем наборе DBCC SHOW_STATISTICS должно быть датой (в формате UTC), аналогичной выполнению исходного запроса GROUP BY.

Затем эти автоматически созданные статистические данные можно использовать в последующих запросах подсистемой запросов для повышения эффективности планирования и эффективности выполнения. Если в таблице произошло достаточно изменений, обработчик запросов также обновит эти статистические данные для улучшения оптимизации запросов. Одно и то же предыдущее упражнение можно применить после существенного изменения таблицы. В Fabric подсистема запросов SQL использует то же пороговое значение перекомпиляции, что и SQL Server 2016 (13.x), чтобы обновить статистику.

Типы автоматически созданных статистических данных

В Microsoft Fabric существует несколько типов статистики, которые автоматически создаются подсистемой для улучшения планов запросов. В настоящее время их можно найти в sys.stats , хотя и не все являются действиями:

  • Статистика гистограммы
    • Создано для каждого столбца, требующего статистики гистограммы во время запроса
    • Эти объекты содержат данные гистограммы и плотности относительно распределения определенного столбца. Аналогично статистике, которая автоматически создается во время запроса в выделенных пулах Azure Synapse Analytics.
    • Имя начинается с _WA_Sys_.
    • Содержимое можно просмотреть с помощью DBCC SHOW_STATISTICS
  • Статистика средней длины столбца
    • Создано для столбцов символов переменной (varchar) больше 100, требующих средней длины столбца во время запроса.
    • Эти объекты содержат значение, представляющее средний размер строки столбца varchar во время создания статистики.
    • Имя начинается с ACE-AverageColumnLength_.
    • Содержимое не может просматриваться и недействительно от пользователя.
  • Статистика кратности на основе таблиц
    • Создано для каждой таблицы, требующей оценки кратности во время запроса.
    • Эти объекты содержат оценку числа строк таблицы.
    • Название: ACE-Cardinality.
    • Содержимое не может просматриваться и недействительно от пользователя.

Ограничения

  • Можно создать и изменить только статистику гистограмм с одним столбцом вручную.
  • Создание статистики с несколькими столбцами не поддерживается.
  • Другие объекты статистики могут отображаться в sys.stats, помимо создания статистики вручную и автоматически созданной статистики. Эти объекты не используются для оптимизации запросов.