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

Применимо к: Конечная точка и хранилище SQL в Microsoft Fabric

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

Важно!

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

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

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

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

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

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

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

Создание статистики для dbo.DimCustomer таблицы на основе всех строк в столбце CustomerKey:

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

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

UPDATE STATISTICS DimCustomer_CustomerKey_FullScan (CustomerKey) 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 автоматически создает эти статистические данные, если они еще не существуют. После создания статистики оптимизатор запросов может использовать их для оценки затрат на план запускающего запроса. Поскольку это создание выполняется синхронно, вы можете ожидать, что первый запуск запроса будет включать это время создания статистики.

Проверка автоматического создания статистики во время запроса

В разных случаях можно ожидать автоматического создания статистики определенного типа. Наиболее распространенными являются системные статистические данные на основе гистограмм, которые часто создаются для столбцов, на которые ссылаются группы BY, JOIN, предложения DISTINCT, фильтры (предложения WHERE) и ORDER BY. Например, если вы хотите увидеть автоматическое создание этих статистических данных, запрос запустит создание, если статистика для 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.

Примечание

В настоящее время Microsoft Fabric не поддерживает автоматическое обновление статистики во время запроса.

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

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

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

Ограничения

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

Дальнейшие действия