Инструкция DBCC SHOW_STATISTICS (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure Конечная точка аналитики аналитики Synapse Analytics Analytics (PDW)SQL Analyticsв Microsoft FabricХранилище в Microsoft Fabric

Отображает текущую статистику оптимизации запросов для таблицы или индексированного представления. Оптимизатор запросов использует статистику, чтобы оценить кратность или число строк в результате запроса. Это позволяет ему создать план запросов высокого качества. Например, на основе оценки количества элементов оптимизатор запросов может выбрать в плане запроса оператор поиска по индексу, а не оператор просмотра индекса, повышая производительность запроса за счет использования менее ресурсоемкого поиска по индексу.

Оптимизатор запросов хранит статистические данные по таблице или индексированному представлению в объекте статистики. Объект статистики для таблицы создается по индексу или списку столбцов таблицы. Объект статистики включает заголовок, содержащий метаданные о статистике, гистограмму, содержащую распределение значений в первом ключевом столбце объекта статистики, и вектор плотностей для измерения корреляции с охватом нескольких столбцов. Ядро СУБД позволяет провести оценку кратности с использованием любых данных в объекте статистики. Дополнительные сведения см. в разделе Статистика и Оценка кратности (SQL Server).

DBCC SHOW_STATISTICS отображает заголовок, гистограмму и вектор плотности на основе данных, хранящихся в объекте статистики. Применяемый синтаксис позволяет указывать таблицу или индексированное представление вместе с именем целевого индекса, именем статистики или именем столбца.

Важные обновления в предыдущих версиях SQL Server:

  • Начиная с SQL Server 2012 (11.x) с пакетом обновления 1 (SP1), sys.dm_db_stats_properties динамическое административное представление доступно для программного получения сведений о заголовках, содержащихся в объекте статистики для не добавочной статистики.

  • Начиная с SQL Server 2014 (12.x) с пакетом обновления 2 и SQL Server 2012 (11.x) с пакетом обновления 1 (11.x), sys.dm_db_incremental_stats_properties динамическое управление доступно для программного получения сведений о заголовках, содержащихся в объекте статистики для добавочной статистики.

  • Начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (CU 2) sys.dm_db_stats_histogram динамическое представление управления доступно для программного получения сведений гистограммы, содержащихся в объекте статистики.

  • Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

  • Дополнительные сведения о статистике в Microsoft Fabric см. в разделе "Статистика".

Соглашения о синтаксисе Transact-SQL

Синтаксис

Синтаксис для SQL Server и Базы данных SQL Azure:

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )
[ WITH [ NO_INFOMSGS ] < option > [ , ...n ] ]
< option > ::=
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM
[ ; ]

Синтаксис Для Azure Synapse Analytics, системы платформы аналитики (PDW) и Microsoft Fabric:

DBCC SHOW_STATISTICS ( table_name , target )
    [ WITH { STAT_HEADER | DENSITY_VECTOR | HISTOGRAM } [ , ...n ] ]
[ ; ]

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

table_or_indexed_view_name

Имя таблицы или индексированного представления, для которого должны быть отображены статистические данные.

table_name

Имя таблицы, содержащей статистику для отображения. Таблица не может быть внешней таблицей.

целевой объект

Имя индекса, статистики или столбца, для которого отображаются статистические данные. target заключается в круглые скобки, одинарные кавычки, двойные кавычки или не имеет кавычек.

  • Если аргумент target является именем существующего индекса или статистики по таблице или индексированному представлению, будут возвращены статистические данные об этом адресате.
  • Если target представляет собой имя существующего столбца и имеется объект статистики, автоматически созданный по данным этого столбца, возвращаются сведения об этой автоматически созданной статистике.

Если для целевого объекта столбца не существует автоматически созданная статистика, возвращается сообщение об ошибке 2767.

В Azure Synapse Analytics и Analytics Platform System (PDW) целевой объект не может быть именем столбца.

В Хранилище в Microsoft Fabric целевой объект может быть либо именем статистики гистограммы с одним столбцом, либо столбцом. Если имя столбца используется для целевого объекта, эта команда возвращает сведения о распределении только о автоматически созданной статистике гистограммы. Чтобы просмотреть сведения о статистике гистограммы вручную, укажите имя статистики в качестве целевого объекта.

NO_INFOMSGS

Подавляет все информационные сообщения со степенями серьезности от 0 до 10.

STAT_HEADER | DENSITY_VECTOR | ГИСТОГРАММА | STATS_STREAM [ , n ]

Указание одного или более из этих параметров ограничивает результирующие наборы. Если параметры не указаны, то возвращаются все статистические данные.

STATS_STREAM Определяется только для информационных целей. Не поддерживается. Совместимость с будущими версиями не гарантируется.

Результирующий набор

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

Имя столбца Description
Имя. Имя объекта статистики.
Обновлено Дата и время последнего обновления статистики. Функция STATS_DATE представляет собой альтернативный способ получения этих данных. Дополнительные сведения см. в подразделе Примечания на этой странице.
Строки Общее число строк в таблице или индексированном представлении при последнем обновлении статистики. Если статистика отфильтрована или соответствует отфильтрованному индексу, количество строк может быть меньше, чем количество строк в таблице. Дополнительные сведения см. в статье Managing statistics on tables in SQL Data Warehouse (Управление статистикой таблиц в хранилище данных SQL).
Rows Sampled Общее количество строк, выбранных для статистических вычислений. При наличии условия Rows Sampled < Rows отображаемые результаты гистограммы и плотности рассчитываются на основе строк выборки.
Шаги Число шагов в гистограмме. Каждый шаг охватывает диапазон значений столбцов, за которым следует значение столбца, представляющее собой верхнюю границу. Шаги гистограммы определяются в первом ключевом столбце статистики. Максимальное число шагов — 200.
Плотность Рассчитывается как 1 / различающиеся значения для всех значений в первом ключевом столбце объекта статистики, исключая возможные значения гистограммы. Это значение плотности не используется оптимизатором запросов и отображается для обратной совместимости с версиями до SQL Server 2008 (10.0.x).
Средняя длина ключа Среднее число байтов на значение для всех ключевых столбцов в объекте статистики.
String Index Значение «Да» указывает, что объект статистики содержит сводную строковую статистику, позволяющую уточнить оценку количества элементов для предикатов запроса, использующих оператор LIKE, например WHERE ProductName LIKE '%Bike'. Сводная статистика строк хранится отдельно от гистограммы и создается на первом ключевом столбце объекта статистики, когда он относится к типу char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), text или ntext..
Критерий фильтра Предикат для подмножества строк таблицы, включенных в объект статистики. NULL = неотфильтрованная статистика. Дополнительные сведения об отфильтрованных предикатах см. в статье Создание отфильтрованных индексов. Дополнительные сведения об отфильтрованной статистике см. в разделе Статистика.
Unfiltered Rows Общее количество строк в таблице перед применением критерия фильтра. Если выражение фильтра равно NULL, Unfiltered Rows равен Rows.
Процент материализованной выборки Сохраненный процент выборки, используемый для статистических обновлений, которые явно не указывают процент выборки. Если значение равно нулю, процент материализованной выборки не устанавливается для этой статистики.

Область применения: SQL Server 2016 (13.x) с пакетом обновления 1 (CU 4)

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

Имя столбца Description
Общая плотность Плотность равна 1 / различающиеся значения. В результатах отображаются плотности для каждого префикса столбцов объекта статистики, по одной строке на плотность. Различающееся значение — это отдельный список значений столбцов на строку и на префикс столбцов. Например, если объект статистики содержит ключевые столбцы (A, B, C), то в результатах приводится плотность отдельных списков значений в каждом из следующих префиксов столбцов: (A), (A, B) и (A, B, C). При использовании префикса (A, B, C) каждый из этих списков является отдельным списком значений: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). При использовании префикса (A, B) одинаковые значения столбцов имеют следующие отдельные списки значений: (3, 5), (4, 4) и (4, 5)
Средняя длина Средняя длина (в байтах) для хранения списка значений столбца для данного префикса столбца. Если каждому значению в списке (3, 5, 6), например, требуется по 4 байта, то длина составляет 12 байт.
Столбцы Имена столбцов в префиксе, для которых отображаются значения «Общая плотность» и «Средняя длина».

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

Имя столбца Description
RANGE_HI_KEY Верхнее граничное значение столбца для шага гистограммы. Это значение столбца называется также ключевым значением.
RANGE_ROWS Предполагаемое количество строк, значение столбцов которых находится в пределах шага гистограммы, исключая верхнюю границу.
EQ_ROWS Предполагаемое количество строк, значение столбцов которых равно верхней границе шага гистограммы.
DISTINCT_RANGE_ROWS Предполагаемое количество строк с различающимся значением столбца в пределах шага гистограммы, исключая верхнюю границу.
AVG_RANGE_ROWS Среднее количество строк с повторяющимися значениями столбца в пределах шага гистограммы, исключая верхнюю границу. Если значение DISTINCT_RANGE_ROWS больше 0, AVG_RANGE_ROWS вычисляется делением RANGE_ROWS на DISTINCT_RANGE_ROWS. Если значение DISTINCT_RANGE_ROWS равно 0, AVG_RANGE_ROWS возвращает значение 1 для шага гистограммы.

Замечания

Дата обновления статистики хранится в большом двоичном объекте статистики вместе с гистограммой и вектором плотности, а не в метаданных. Если данные не считываются для создания статистических данных, большой двоичный объект статистики не создается, дата недоступна и обновленный столбецNULL. Это относится к отфильтрованной статистике, для которой предикат не возвращает строки или для новых пустых таблиц.

Гистограмма

Гистограмма измеряет частоту появления каждого различающегося значения в наборе данных. Оптимизатор запросов вычисляет гистограмму для значений столбца в первом ключевом столбце объекта статистики, выбирая значения столбцов путем статистической выборки строк или при помощи полного просмотра всех строк в таблице или представлении. Если гистограмма создается из примера набора строк, хранимые итоги для количества строк и количества уникальных значений являются оценками и не должны быть целыми целыми числами.

Чтобы создать гистограмму, оптимизатор запросов сортирует значения столбцов, вычисляет количество значений, совпадающих с каждым различающимся значением столбца, а затем осуществляет статистическую обработку значений столбцов с получением непрерывных шагов гистограммы, максимальное количество которых составляет 200. Каждый шаг включает диапазон значений столбцов, за которым следует значение столбца, представляющее собой верхнюю границу. В этот диапазон входят все возможные значения столбца между граничными значениями, за исключением самих граничных значений. Наименьшим из отсортированных значений столбца является верхнее граничное значение первого шага гистограммы.

На следующей диаграмме показана гистограмма с шестью шагами. Первый шаг — это область слева от первого верхнего граничного значения.

Diagram of how a histogram is calculated from sampled column values.

В каждом шаге гистограммы:

  • полужирной линией обозначено верхнее граничное значение (RANGE_HI_KEY) и количество его вхождений (EQ_ROWS);
  • закрашенная область слева от RANGE_HI_KEY обозначает диапазон значений столбца и среднее количество вхождений каждого значения столбца (AVG_RANGE_ROWS). В первом шаге гистограммы значение AVG_RANGE_ROWS всегда равно 0;
  • пунктирные линии обозначают выбранные значения, которые используются для оценки общего числа различающихся значений (DISTINCT_RANGE_ROWS) и общего числа значений в диапазоне (RANGE_ROWS). Оптимизатор запросов использует RANGE_ROWS и DISTINCT_RANGE_ROWS для вычислений AVG_RANGE_ROWS и не сохраняет образцы значений.

Оптимизатор запросов определяет шаги гистограммы согласно их статистической значимости. Он использует алгоритм максимальной разности для сведения к минимуму числа шагов в гистограмме и вместе с тем максимального увеличения разницы между граничными значениями. Максимальное число шагов — 200. Число шагов гистограммы может быть меньше, чем количество различающихся значений, даже для столбцов, в которых число граничных точек меньше 200. Например, столбец со 100 различающимися значениями может иметь гистограмму, число граничных точек в которой меньше 100.

Вектор плотности

Оптимизатор запросов использует плотности для улучшения оценок количества элементов для запросов, которые возвращают данные нескольких столбцов из одной таблицы или индексированного представления. Вектор плотностей содержит по одной плотности для каждого префикса столбцов объекта статистики. Например, если объект статистики имеет ключевые столбцы CustomerId, ItemId и Price, плотность вычисляется для каждого из следующих префиксов столбцов.

Префикс столбца Префикс, по которому вычисляется плотность
(CustomerId) Строки с соответствующими значениями для CustomerId
(CustomerId, ItemId) Строки с соответствующими значениями для CustomerId и ItemId
(CustomerId, ItemId, Price) Строки с соответствующими значениями для CustomerId, ItemIdи Price

Ограничения

DBCC SHOW_STATISTICS не предоставляет статистику для пространственных индексов и индексов columnstore, оптимизированных для памяти.

Разрешения для SQL Server и базы данных SQL

Для просмотра объекта статистики у пользователя должно быть разрешение SELECT для таблицы.

Для того, чтобы разрешение SELECT было достаточным для выполнения команды, нужно выполнить следующие требования:

  • Пользователь должен иметь разрешение для всех столбцов в статистическом объекте.
  • Пользователь должен иметь разрешение для всех столбцов в условии фильтра (если фильтр задан).
  • В таблице не может быть политика безопасности на уровне строк.
  • Если любой из столбцов в объекте статистики маскируется с помощью правил динамического маскирования данных, помимо SELECT разрешения, пользователь должен иметь UNMASK разрешение или быть членом роли db_ddladmin .

В версиях до SQL Server 2012 (11.x) с пакетом обновления 1 (SP1) пользователь должен иметь таблицу или пользователь должен быть членом предопределенных ролей сервера sysadmin, предопределенных ролей базы данных db_owner или предопределенных ролей базы данных db_ddladmin.

Примечание.

Чтобы изменить поведение в режиме предварительной версии SQL Server 2012 (11.x) с пакетом обновления 1 ( SP1), используйте флаг трассировки 9485.

Разрешения для Azure Synapse Analytics и Analytics Platform System (PDW)

DBCC SHOW_STATISTICS требует SELECT разрешения на таблицу или членство в предопределенных ролях сервера sysadmin , предопределенных ролях базы данных db_owner или предопределенных ролях базы данных db_ddladmin .

Ограничения и ограничения для системы платформы Azure Synapse Analytics и Analytics (PDW)

DBCC SHOW_STATISTICS отображает статистику Shell , хранящуюся в базе данных на уровне узла управления. В нем не отображаются статистические данные, которые автоматически создаются SQL Server на вычислительных узлах.

DBCC SHOW_STATISTICS не поддерживается во внешних таблицах.

В Microsoft Fabric DBCC SHOW_STATISTICS отображаются только результаты для статистики гистограммы, а не статистики ACE-* .

Примеры: SQL Server и База данных SQL Azure

А. Возврат всех сведений о статистике

В следующем примере отображаются все сведения о статистике индекса AK_Address_rowguidPerson.Address таблицы в базе данных AdventureWorks2022.

DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO

B. Укажите параметр HISTOGRAM

Это ограничивает статистические данные, отображаемые для Customer_LastName до данных HISTOGRAM.

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

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

C. Отображение содержимого одного объекта статистики

В следующем примере создается объект статистики, а затем отображается содержимое Customer_LastName статистики в DimCustomer таблице в примере базы данных AdventureWorksPDW2022.

-- Uses AdventureWorksPDW
--First, create a statistics object
CREATE STATISTICS Customer_LastName
ON AdventureWorksPDW2012.dbo.DimCustomer (LastName);
GO
DBCC SHOW_STATISTICS ("dbo.DimCustomer", Customer_LastName);
GO

В результатах показан заголовок, вектор плотности и части гистограммы.

Screenshot showing DBCC SHOW_STATISTICS results.

См. также

Следующие шаги