Поделиться через


UPDATE STATISTICS (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW)в Microsoft FabricХранилище в базе данных Microsoft FabricSQL в Microsoft Fabric

Обновляет статистику оптимизации запросов для таблицы или индексированного представления. По умолчанию оптимизатор запросов обновляет статистику по мере необходимости для усовершенствования плана запроса. В некоторых случаях можно повысить производительность запроса, выполняя обновление статистики с помощью инструкции UPDATE STATISTICS или хранимой процедуры sp_updatestats чаще, чем это происходит по умолчанию.

Обновление статистики гарантирует, что запросы будут компилироваться с актуальной статистикой. Обновление статистики с помощью любого процесса может привести к автоматической компиляции планов запросов. Рекомендуется не обновлять статистику слишком часто, поскольку необходимо найти баланс в производительности между улучшением планов запросов и потерей времени на их перекомпиляцию. Критерии выбора компромиссного решения зависят от приложения. UPDATE STATISTICS может использовать tempdb для сортировки примеров строк, чтобы создать статистику.

Примечание.

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

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

Синтаксис

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

UPDATE STATISTICS table_or_indexed_view_name
    [
        {
            { index_or_statistics__name }
          | ( { index_or_statistics_name } [ , ...n ] )
                }
    ]
    [ WITH
        [
            FULLSCAN
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
            | SAMPLE number { PERCENT | ROWS }
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
            | RESAMPLE
              [ ON PARTITIONS ( { <partition_number> | <range> } [ , ...n ] ) ]
            | <update_stats_stream_option> [ , ...n ]
        ]
        [ [ , ] [ ALL | COLUMNS | INDEX ]
        [ [ , ] NORECOMPUTE ]
        [ [ , ] INCREMENTAL = { ON | OFF } ]
        [ [ , ] MAXDOP = max_degree_of_parallelism ]
        [ [ , ] AUTO_DROP = { ON | OFF } ]
    ] ;

<update_stats_stream_option> ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric_constant ]

Синтаксис для Azure Synapse Analytics и параллельного хранилища данных.

UPDATE STATISTICS [ schema_name . ] table_name
    [ ( { statistics_name | index_name } ) ]
    [ WITH
       {
              FULLSCAN
            | SAMPLE number PERCENT
            | RESAMPLE
        }
    ]
[;]

Синтаксис Для Microsoft Fabric.

UPDATE STATISTICS [ schema_name . ] table_name
    [ ( { statistics_name } ) ]
    [ WITH
       {
              FULLSCAN
            | SAMPLE number PERCENT
        }
    ]
[;]

Примечание.

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

Аргументы

table_or_indexed_view_name

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

index_or_statistics_name или statistics_name | index_name или statistics_name

Имя индекса для обновления статистики или имени статистики для обновления. Если index_or_statistics_name или statistics_name не указано, оптимизатор запросов обновляет всю статистику для таблицы или индексированного представления. Это включает статистику, созданную с помощью CREATE STATISTICS инструкции, статистику с одним столбцом, созданную при AUTO_CREATE_STATISTICS включении, и статистику, созданную для индексов.

Дополнительные сведения см. в AUTO_CREATE_STATISTICSразделе "Параметры ALTER DATABASE SET". Просмотреть все индексы для таблицы или представления можно с помощью процедуры sp_helpindex.

FULLSCAN

Вычисляет статистику путем просмотра всех строк в таблице или индексированном представлении. FULLSCAN и SAMPLE 100 PERCENT имеют те же результаты. FULLSCAN нельзя использовать с параметром SAMPLE .

SAMPLE number { PERCENT | ROWS }

Указывает приблизительное процентное соотношение или число строк в таблице или индексированном представлении для оптимизатора запросов, которые используются при обновлении статистики. Для PERCENT, число может быть от 0 до 100 и ROWSдля , число может быть от 0 до общего числа строк. Фактическое процентное соотношение или число строк, отбираемых оптимизатором запросов, может не совпадать с заданным значением. Например, оптимизатор запросов просматривает все строки на странице данных.

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

Примечание.

В SQL Server 2016 (13.x) при использовании уровня совместимости базы данных 130 выборка данных для создания статистики выполняется параллельно, чтобы повысить производительность сбора статистики. Оптимизатор запросов будет использовать параллельную статистику выборки, когда размер таблицы превышает определенное пороговое значение. Начиная с SQL Server 2017 (14.x), независимо от уровня совместимости базы данных, поведение было изменено обратно на использование последовательной проверки, чтобы избежать потенциальных проблем с производительностью с чрезмерными LATCH ожиданиями. Остальная часть плана запроса при обновлении статистики будет поддерживать параллельное выполнение при необходимости.

SAMPLE нельзя использовать с параметром FULLSCAN . Если ни не SAMPLEFULLSCAN указано, оптимизатор запросов использует примеры данных и вычисляет размер выборки по умолчанию.

Рекомендуется указывать 0 PERCENT или 0 ROWS. 0 ROWS При 0 PERCENT указании объект статистики обновляется, но не содержит статистические данные.

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

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

RESAMPLE

Обновить каждый объект статистики, используя последнее значение частоты выборки.

Использование RESAMPLE может привести к полной проверке таблицы. Например, статистика для индексов использует для частоты выборки просмотр полной таблицы. Если ни один из параметров образца (SAMPLE, FULLSCAN, ) RESAMPLEне указан, оптимизатор запросов выполняет выборку данных и вычисляет размер выборки по умолчанию.

В хранилище в Microsoft Fabric RESAMPLE не поддерживается.

PERSIST_SAMPLE_PERCENT = { ON | OFF }

Область применения: SQL Server 2016 (13.x) с пакетом обновления 1 (CU4), SQL Server 2017 (14.x) с пакетом обновления 1 (SP1) или SQL Server 2019 (15.x) и более поздних версий, База данных SQL Azure, Управляемый экземпляр SQL Azure

Если ONстатистика сохранит процент выборки набора для последующих обновлений, которые явно не указывают процент выборки. Когда OFFпроцент выборки статистики будет сбрасываться до выборки по умолчанию в последующих обновлениях, которые явно не указывают процент выборки. Значение по умолчанию — OFF.

Значение сохраненного процента выборки для выбранной статистики отображается в DBCC SHOW_STATISTICS и sys.dm_db_stats_properties.

Если AUTO_UPDATE_STATISTICS он выполняется, он использует сохраненный процент выборки, если он доступен, или используйте процент выборки по умолчанию, если нет. RESAMPLE поведение не влияет на этот параметр.

Если таблица усечена, все статистические данные, построенные на усеченной куче или в дереве B (HoBT), будут возвращаться к использованию процента выборки по умолчанию. Аналогичным образом, если статистика обновляется для объекта без строк, она возвращается к использованию процента выборки по умолчанию, даже если PERSIST_SAMPLE_PERCENT ранее настроено.

Примечание.

В SQL Server при перестроении индекса, который ранее был обновлен PERSIST_SAMPLE_PERCENTстатистикой, сохраненный процент выборки возвращается по умолчанию. Начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) CU17, SQL Server 2017 (14.x) CU26 и SQL Server 2019 (15.x) CU10, сохраняемый процент выборки сохраняется даже при перестроении индекса.

ON PARTITIONS ( { <partition_number> | <range> } [ , ... n ] ) ]

Область применения: SQL Server 2014 (12.x) и более поздних версий

Принудительно выполняет перекомпьютирование статистики на уровне конечного уровня, охватывающих секции, указанные в ON PARTITIONS предложении, и затем объединяется для создания глобальной статистики. WITH RESAMPLE требуется, так как статистика секций, созданная с различными тарифами выборки, не может быть объединена вместе.

ALL | COLUMNS | INDEX

Обновить всю существующую статистику, созданную по одному или нескольким столбцам, или статистику, созданную для индексов. Если ни один из параметров не указан, UPDATE STATISTICS инструкция обновляет всю статистику в таблице или индексированном представлении.

NORECOMPUTE

Отключите параметр AUTO_UPDATE_STATISTICSавтоматического обновления статистики для указанной статистики. Если указан этот параметр, оптимизатор запросов завершает текущее обновление статистики и отключает обновление в будущем.

Чтобы повторно включить AUTO_UPDATE_STATISTICS поведение параметра, запустите UPDATE STATISTICS еще раз без NORECOMPUTE параметра или запуска sp_autostats.

Предупреждение

Использование этого параметра может привести к созданию неоптимальных планов запросов. Рекомендуется ограничить использование этого параметра, причем использовать его надлежит только опытным системным администраторам.

Дополнительные сведения о параметре AUTO_STATISTICS_UPDATE см. в разделе "Параметры ALTER DATABASE SET".

INCREMENTAL = { ON | OFF }

Область применения: SQL Server 2014 (12.x) и более поздних версий

При ONповторном создании статистики статистики секций. При OFFудалении дерева статистики sql Server повторно вычисляет статистику. Значение по умолчанию — OFF.

Если статистики по секциям не поддерживаются, возвращается ошибка. Добавочные статистики не поддерживаются для следующих типов статистических данных:

  • Статистики, созданные с индексами, не выравненными по секциям для базовой таблицы.
  • Статистики, созданные в доступных для чтения базах данных-получателях AlwaysOn.
  • Статистики, созданные в базах данных, доступных только для чтения.
  • Статистики, созданные по фильтрованным индексам.
  • Статистика, созданная по представлениям.
  • Статистики, созданные по внутренним таблицам.
  • Статистики, созданные с пространственными индексами или XML-индексами.

MAXDOP = max_degree_of_parallelism

Область применения: SQL Server (начиная с SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x) CU3).

Переопределяет max degree of parallelism параметр конфигурации для длительности операции статистики. Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера max degree of parallelism. Используется MAXDOP для ограничения количества процессоров, используемых в параллельном выполнении плана. Максимальное число процессоров — 64.

Параметр max_degree_of_parallelism может иметь одно из следующих значений:

1

Подавляет формирование параллельных планов.

>1

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

0 (по умолчанию)

В зависимости от текущей рабочей нагрузки системы использует реальное или меньшее число процессоров.

update_stats_stream_option

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

AUTO_DROP = { ON | OFF }

Область применения: SQL Server 2022 (16.x) и более поздних версий

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

(Начиная с SQL Server 2022 (16.x))| Эта функция позволяет создавать объекты статистики в режиме, таким образом, что изменение схемы не будет заблокировано статистикой, но вместо этого будет удалена статистика. В этом случае статистика с автоматическим удалением работает так же, как статистика с автоматической генерацией.

Примечание.

При попытке задать или отменить настройку свойства Auto_Drop для автоматической созданной статистики могут возникнуть ошибки. Автоматически созданная статистика всегда использует автоматическое удаление. Некоторые резервные копии при восстановлении могут неправильно задать это свойство до следующего обновления объекта статистики (вручную или автоматически). В этом случае статистика с автоматической генерацией работает как статистика с автоматическим удалением.

Замечания

Обновление СТАТИСТИКИ

Дополнительные сведения об использовании UPDATE STATISTICSсм. в разделе "Когда следует обновить статистику".

Ограничения

  • Обновление статистики во внешних таблицах не поддерживается. Для обновления статистики во внешней таблице удалите и повторно создайте статистику.
  • Обновление статистики, созданной автоматически для каждого индекса columnstore, не поддерживается. Попытка выполнить это приведет к ошибке 35337: UPDATE STATISTICS failed because statistics cannot be updated on a columnstore index. UPDATE STATISTICS is valid only when used with the STATS_STREAM option.
  • Параметр MAXDOP несовместим с параметрами STATS_STREAM, ROWCOUNT и PAGECOUNT.
  • Параметр MAXDOP ограничивается параметром MAX_DOP группы рабочей нагрузки Resource Governor (если применимо).

Обновление всей статистики с помощью sp_updatestats

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

EXECUTE sp_updatestats;

Автоматическое управление индексами и статистикой

Используйте такие решения, как Адаптивная дефрагментация индекса, для автоматического управления дефрагментацией индекса и обновлением статистики для одной или больше баз данных. С помощью линейного порогового значения эта процедура автоматически принимает решение о перестройке или реорганизации индекса в зависимости от его уровня фрагментации и других параметров, а также об обновлении статистики.

Определение последнего обновления статистики

Чтобы определить время последнего обновления статистики, используйте функцию STATS_DATE .

PDW/Azure Synapse Analytics

Следующий синтаксис не поддерживается системой платформы Аналитики (PDW) или Azure Synapse Analytics:

UPDATE STATISTICS t1 (a, b);
UPDATE STATISTICS t1 (a) WITH SAMPLE 10 ROWS;
UPDATE STATISTICS t1 (a) WITH NORECOMPUTE;
UPDATE STATISTICS t1 (a) WITH INCREMENTAL = ON;
UPDATE STATISTICS t1 (a) WITH STATS_STREAM = 0x01;

Разрешения

Необходимо разрешение ALTER для таблицы или представления.

Примеры

А. Обновление всей статистики для таблицы

В следующем примере обновляется вся статистика в таблице SalesOrderDetail.

USE AdventureWorks2022;
GO

UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Обновление статистики для индекса

В следующем примере обновляется статистика для индекса AK_SalesOrderDetail_rowguid в таблице SalesOrderDetail.

USE AdventureWorks2022;
GO

UPDATE STATISTICS Sales.SalesOrderDetail (AK_SalesOrderDetail_rowguid);
GO

В. Обновление статистики с применением 50-процентной выборки

В следующем примере создается, а затем обновляется статистика для столбцов Name и ProductNumber в таблице Product.

USE AdventureWorks2022;
GO

CREATE STATISTICS Products
    ON Production.Product([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT;

-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product (Products)
    WITH SAMPLE 50 PERCENT;

D. Обновление статистики с использованием параметров FULLSCAN и NORECOMPUTE

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

USE AdventureWorks2022;
GO

UPDATE STATISTICS Production.Product (Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

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

Е. Обновление статистики для таблицы

В следующем примере обновляется статистика CustomerStats1 в таблице Customer.

UPDATE STATISTICS Customer (CustomerStats1);

F. Обновление статистики с помощью полной проверки

В следующем примере обновляется статистика CustomerStats1 на основе проверки всех строк в таблице Customer.

UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;

G. Обновление всей статистики для таблицы

В следующем примере обновляется вся статистика в таблице Customer.

UPDATE STATISTICS Customer;

H. Использование CREATE STATISTICS с AUTO_DROP

Чтобы использовать статистику автоматического удаления, просто добавьте следующее в предложение WITH для создания или обновления статистики.

UPDATE STATISTICS Customer (CustomerStats1) WITH AUTO_DROP = ON;