UPDATE STATISTICS (Transact-SQL)
Область применения: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
конечной точке аналитики платформы Аналитики Azure Synapse Analytics
(PDW)
в Microsoft Fabric
Хранилище в базе данных Microsoft Fabric
SQL в 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
. Если ни не SAMPLE
FULLSCAN
указано, оптимизатор запросов использует примеры данных и вычисляет размер выборки по умолчанию.
Рекомендуется указывать 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;
Связанный контент
- Статистика
- Статистика в Microsoft Fabric
- ALTER DATABASE (Transact-SQL)
- sys.dm_db_stats_properties (Transact-SQL)
- sys.dm_db_stats_histogram (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
- DBCC SHOW_STATISTICS (Transact-SQL)
- DROP STATISTICS (Transact-SQL)
- sp_autostats (Transact-SQL)
- sp_updatestats (Transact-SQL)
- STATS_DATE (Transact-SQL)