Обновить статистику — SQL Server
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)
Обновить статистику оптимизации запросов для таблицы или индексированного представления в SQL Server можно с помощью SQL Server Management Studio или Transact-SQL. По умолчанию оптимизатор запросов обновляет статистику по мере необходимости для усовершенствования плана запроса. В некоторых случаях можно повысить производительность запроса, выполняя обновление статистики с помощью инструкции UPDATE STATISTICS или хранимой процедуры sp_updatestats
чаще, чем это происходит по умолчанию.
Обновление статистики гарантирует, что запросы будут компилироваться с актуальной статистикой. Однако обновление статистики вызывает перекомпиляцию запросов. Рекомендуется не обновлять статистику слишком часто, поскольку необходимо найти баланс между выигрышем в производительности за счет усовершенствованных планов запросов и потерей времени на перекомпиляцию запросов. Критерии выбора компромиссного решения зависят от приложения. UPDATE STATISTICS может использовать базу данных tempdb для сортировки образцов строк для построения статистики.
В этом разделе
Перед началом работы
Безопасность
Для обновления объекта статистики используются:
Среда SQL Server Management Studio
Transact-SQL
Перед началом
Безопасность
Разрешения
При использовании инструкции UPDATE STATISTICS или внесении изменений в среде SQL Server Management Studioнеобходимо разрешение ALTER на таблицу или представление. При использовании процедуры sp_updatestats
необходимо быть членом предопределенной роли сервера sysadmin или владельцем базы данных (dbo).
Использование среды SQL Server Management Studio
Обновление объекта статистики
В обозревателе объектовщелкните значок «плюс», чтобы развернуть базу данных, в которой нужно обновить статистику.
Чтобы развернуть папку Таблицы , щелкните значок «плюс».
Щелкните значок «плюс», чтобы развернуть таблицу, в которой нужно обновить статистику.
Щелкните значок «плюс», чтобы развернуть папку Статистика .
Щелкните правой кнопкой мыши объект статистики, который нужно обновить, и выберите пункт Свойства.
В диалоговом окне Свойства статистики —
Использование Transact-SQL
Обновление указанного объекта статистики
В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.
На стандартной панели выберите пункт Создать запрос.
Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2012; GO -- The following example updates the statistics for the AK_SalesOrderDetail_rowguid index of the SalesOrderDetail table. UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid; GO
Обновление всей статистики в таблице
В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.
На стандартной панели выберите пункт Создать запрос.
Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2012; GO -- The following example updates the statistics for all indexes on the SalesOrderDetail table. UPDATE STATISTICS Sales.SalesOrderDetail; GO
Дополнительные сведения см. в статье Инструкция UPDATE STATISTICS (Transact-SQL).
Обновление всей статистики в базе данных
В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.
На стандартной панели выберите пункт Создать запрос.
Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2012; GO -- The following example updates the statistics for all tables in the database. EXEC sp_updatestats;
Автоматическое управление индексами и статистикой
Используйте такие решения, как Адаптивная дефрагментация индексов, чтобы автоматически управлять дефрагментацией индексов и обновлениями статистики для одной базы данных или нескольких. Эта процедура автоматически выбирает, следует ли перестроить или реорганизовать индекс, сверяясь с уровнем фрагментации и другими параметрами, и обновляет статистику на основе линейных пороговых значений.
Дальнейшие действия
Дополнительные сведения см. в статье Инструкция UPDATE STATISTICS (Transact-SQL).
Обновление статистики базы данных | Gilev.ru
В этом случае возможно проявление проблем с производительностью запросов. При этом в планах запросов наблюдаются характерные признаки неоптимальной работы (неоптимальные операции).
Для того, чтобы гарантировать максимально правильную работу оптимизатора MS SQL Server рекомендуется регулярно обновлять статистики базы данных MS SQL.
Для обновления статистик по всем таблицам базы данных необходимо выполнить следующий SQL запрос:
exec sp_msforeachtable N’UPDATE STATISTICS ? WITH FULLSCAN’
Обновление статистик не приводит к блокировке таблиц, и не будет мешать работе других пользователей. Статистика может обновляться настолько часто, насколько это необходимо. Следует учитывать, что нагрузка на сервер СУБД во время обновления статистик возрастет, что может негативно сказаться на общей производительности системы.
Оптимальная частота обновления статистик зависит от величины и характера нагрузки на систему и определяется экспериментальным путем. Рекомендуется обновлять статистики не реже одного раза в день.
Приведенный выше запрос обновляет статистики для всех таблиц базы данных. В реально работающей системе разные таблицы требуют различной частоты обновления статистик.
Поэтому в общем случае, путем анализа планов запроса можно установить, какие таблицы больше других нуждаются в частом обновлении статистик, и настроить две (или более) различных регламентных процедуры: для часто обновляемых таблиц и для всех остальных таблиц. Такой подход позволит существенно снизить время обновления статистик и влияние процесса обновления статистики на работу системы в целом.
В Вашем случае, имеет смысл настроить хотя бы ежедневное обновление статистик.
Например, в период минимальной нагрузки на систему — в ночные часы.
Можно сделать, например, так: В MS SQL:
1) Создайте новый план обслуживания
2) Создайте субплан (Add Subplan) и назовите его «Обновление статистик».
3) Добавьте в него задачу Update Statistics Task из панели задач:
4) Настройте расписание обновления статистик (рекомендация не реже 1 раза в день).
5) Настройте саму задачу:
5.1) Базу данных для который выполняется обновление статистики
5. 2) Список таблиц установите «All» — это означает что будет обновлена статистика по всем таблицам БД
5.3) Укажите опцию Full scan
(Примечание. Такой режим будет эквивалентен скрипту
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN' DBCC UPDATEUSAGE (dbname)
где dname имя вашей базы)
Также после обновлении статистики имеет смысл очистить процедурный кэш (иначе запросы будут выполнятся по планам из кэш, которые могли быть сформированы на основании устаревшей статистики.
Поэтому в субплан:
6) Добавьте задачу Execute T-SQL Statement Task.
7) Соедините задачу Update Statistics Task стрелочкой с новой задачей
8) В тексте созданной задачи Execute T-SQL Statement Task следует указать запрос «DBCC FREEPROCCACHE»
9) если у вас значительная нагрузка на базу в пиковые моменты (сотни пользователей, роботы-фоновики и т.п.) то наряду с параметром «Автоматическое создание статистики (AUTO_CREATE_STATISTICS)» будет полезно также для базы данных включить параметр «Автоматическое асинхронное обновление статистики (AUTO_UPDATE_STATISTICS_ASYNC)»
Важно знать:
Если включен параметр AUTO_UPDATE_STATISTICS (автоматическое обновление статистики), оптимизатор запросов определяет, устарела ли статистика, и при необходимости обновляет ее, если она используется в запросе.
Если используется версия до SQL Server 2014 (12.x), SQL Server применяет пороговое значение в зависимости от процента измененных строк. Это значение не зависит от числа строк в таблице. Пороговое значение:
Если на момент оценки статистических данных кратность в таблице не превышала 500, обновление выполняется для каждых 500 модификаций.
Если на момент оценки статистических данных кратность в таблице превышала 500, обновление выполняется для каждых 500 + 20 % модификаций
Начиная с версии SQL Server 2016 (13.x) и при уровне совместимости базы данных 130 SQL Server используется пороговое значение для динамического обновления статистических данных по убыванию. Значение изменяется в зависимости от числа строк в таблице. Оно вычисляется как квадратный корень из произведения текущего значения кратности в таблице и 1000. Например, если таблица содержит 2 миллиона строк, значение вычисляется как квадратный корень из (1000 * 2000000) = 44721,359. Благодаря этому изменению статистика для больших таблиц будет обновляться чаще. Но если уровень совместимости для базы данных ниже 130, применяется пороговое значение SQL Server 2014 (12.x).
Оптимизатор запросов проверяет наличие устаревшей статистики перед компиляцией запроса и до выполнения кэшированного плана запроса.
Параметр AUTO_UPDATE_STATISTICS_ASYNC (асинхронное обновление статистики) определяет, какой режим обновления статистики использует оптимизатор запросов: синхронный или асинхронный. По умолчанию параметр асинхронного обновления статистики отключен, и оптимизатор запросов обновляет статистику синхронно.
При синхронном обновлении статистики запросы всегда компилируются и выполняются с актуальной статистикой. Если статистика оказывается устаревшей, оптимизатор запросов ожидает появления обновленной статистики, прежде чем начать компиляцию и выполнение запроса. При асинхронном обновлении статистики запросы компилируются с существующей статистикой, даже если она устарела. Если на момент компиляции запроса статистика оказывается устаревшей, оптимизатор запросов может выбрать неоптимальный план запроса. Запросы, которые компилируются после выполнения асинхронного обновления, будут усовершенствованы благодаря использованию обновленной статистики.
Асинхронная статистика рекомендуется для достижения более прогнозируемого времени ответа на запросы в следующих сценариях.
Приложение часто выполняет один и тот же запрос, схожие запросы или схожие кэшированные планы запроса. Асинхронное обновление статистики может обеспечить более прогнозируемое время ответа на запрос по сравнению с синхронным, так как оптимизатор запросов может выполнять входящие запросы, не ожидая появления актуальной статистики. Это устраняет задержку в некоторых запросах, но не влияет на другие запросы.
Были случаи, когда в приложении истекало время ожидания клиентских запросов в результате ожидания обновленной статистики. В некоторых случаях ожидание синхронной статистики может вызвать аварийное завершение приложений, в которых задано малое время ожидания.
Смотрите также обновление статистики PostgreSQL
Обсудить можно здесь http://www.gilev.ru/forum/viewforum.php?f=15
Обновление статистики — SQL Server
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
Применяется к: SQL Server Azure SQL База данных Azure SQL Управляемый экземпляр Azure Synapse Analytics Analytics Platform System (PDW)
Вы можете обновить статистику оптимизации запросов в таблице или индексированном представлении в SQL Server с помощью SQL Server Management Studio или Transact -SQL. По умолчанию оптимизатор запросов уже обновляет статистику по мере необходимости для улучшения плана запроса; в некоторых случаях вы можете повысить производительность запросов с помощью UPDATE STATISTICS или хранимой процедуры sp_updatestats
, чтобы обновлять статистику чаще, чем обновления по умолчанию.
Обновление статистики гарантирует, что запросы будут компилироваться с актуальной статистикой. Однако обновление статистики приводит к повторной компиляции запросов. Мы рекомендуем не обновлять статистику слишком часто, поскольку существует компромисс между улучшением планов запросов и временем, которое требуется для перекомпиляции запросов. Конкретные компромиссы зависят от вашего приложения. UPDATE STATISTICS может использовать базу данных tempdb для сортировки выборки строк для построения статистики.
В этой теме
Прежде чем начать:
Безопасность
Для обновления объекта статистики с помощью:
Студия управления SQL Server
Transact-SQL
Перед началом работы
Безопасность
Разрешения
При использовании UPDATE STATISTICS или внесении изменений через SQL Server Management Studio требуется разрешение ALTER для таблицы или представления. Если использовать sp_updatestats
, требуется членство в фиксированной роли сервера sysadmin или владение базой данных ( dbo ).
Использование SQL Server Management Studio
Обновление объекта статистики
В обозревателе объектов щелкните значок плюса, чтобы развернуть базу данных, в которой вы хотите обновить статистику.
Щелкните значок плюса, чтобы развернуть папку Tables .
Нажмите знак плюс, чтобы развернуть таблицу, в которой вы хотите обновить статистику.
Щелкните значок плюса, чтобы развернуть папку Статистика .
Щелкните правой кнопкой мыши объект статистики, который вы хотите обновить, и выберите Свойства .
В диалоговом окне Свойства статистики — имя_статистики установите флажок Обновить статистику для этих столбцов и нажмите ОК .
Использование Transact-SQL
Чтобы обновить конкретный объект статистики
В обозревателе объектов подключитесь к экземпляру компонента Database Engine.
На стандартной панели щелкните Новый запрос .
Скопируйте и вставьте следующий пример в окно запроса и нажмите Выполнить .
ИСПОЛЬЗОВАТЬ AdventureWorks2012; ИДТИ -- В следующем примере обновляется статистика для индекса AK_SalesOrderDetail_rowguid таблицы SalesOrderDetail. ОБНОВЛЕНИЕ СТАТИСТИКИ Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid; ИДТИ
Чтобы обновить всю статистику в таблице
В Object Explorer подключитесь к экземпляру Database Engine.
На стандартной панели щелкните Новый запрос .
Скопируйте и вставьте следующий пример в окно запроса и нажмите Выполнить .
ИСПОЛЬЗОВАТЬ AdventureWorks2012; ИДТИ -- В следующем примере обновляется статистика для всех индексов таблицы SalesOrderDetail. ОБНОВЛЕНИЕ СТАТИСТИКИ Sales.SalesOrderDetail; ИДТИ
Дополнительные сведения см. в разделе СТАТИСТИКА ОБНОВЛЕНИЯ (Transact-SQL).
Чтобы обновить всю статистику в базе данных
В Object Explorer подключитесь к экземпляру Database Engine.
На стандартной панели щелкните Новый запрос .
Скопируйте и вставьте следующий пример в окно запроса и нажмите Выполнить .
ИСПОЛЬЗОВАТЬ AdventureWorks2012; ИДТИ -- В следующем примере обновляется статистика для всех таблиц в базе данных. EXEC sp_updatestats;
Автоматическое управление индексами и статистикой
Используйте такие решения, как Adaptive Index Defrag, для автоматического управления дефрагментацией индексов и обновлениями статистики для одной или нескольких баз данных. Эта процедура автоматически выбирает, следует ли перестраивать или реорганизовывать индекс в соответствии с его уровнем фрагментации, среди других параметров, и обновляет статистику с линейным порогом.
Следующие шаги
Дополнительные сведения см. в разделе СТАТИСТИКА ОБНОВЛЕНИЯ (Transact-SQL).
Обратная связь
Просмотреть все отзывы о странице
Обновить статистику базы данных—ArcGIS Pro | Документация
Доступно со стандартной или расширенной лицензией.
Оптимизатор системы управления базами данных использует статистику базы данных для выбора оптимального плана выполнения запросов. Чтобы поддерживать производительность запросов, следует обновлять статистику после значительного изменения содержимого таблицы; например, после того, как вы загрузите в него большое количество записей или выполните много правок в таблице.
Статистика может быть обновлена для следующих типов таблиц и индексов:
- Таблица, которую вы выбрали для анализа, и связанные с ней индексы
- Таблицы изменений версий таблиц и классов объектов и индексы в таблицах изменений
- Исторические архивные таблицы наборов данных, которые разрешены для архивирования, и индексы архивных таблиц
- Системные таблицы базы геоданных
Обновление статистики базы данных требует интенсивного ввода-вывода (I/O) операция. Вы должны обновлять статистику, когда база данных трафик минимален.
В ArcGIS есть несколько методов, которые можно использовать для обновления статистики. Они описаны в следующих разделах:
Используйте инструмент Анализировать наборы данных
Вы можете использовать инструмент геообработки Анализировать наборы данных (находящийся в группе инструментов Администрирование базы геоданных набора инструментов Управление данными) для обновления статистики. Этот инструмент позволяет вам выбирать, какие таблицы в наборе данных анализировать, и позволяет администратору базы геоданных обновлять статистику по системным таблицам базы геоданных.
Вы должны запускать инструмент от имени владельца таблиц, которые хотите проанализировать. В случае системных таблиц базы геоданных вы должны запускать инструмент от имени администратора базы геоданных. Вы должны обновлять статистику в системных таблицах базы геоданных после того, как в базу геоданных было добавлено много новых таблиц или классов пространственных объектов, было выполнено большое количество версионных правок или база геоданных была сжата.
- Запустите ArcGIS Pro и подключитесь к базе геоданных, содержащей таблицы, для которых вы хотите обновить статистику.
Подключиться как владелец анализируемых таблиц.
- Откройте инструмент геообработки Анализировать наборы данных.
Вы можете ввести имя инструмента в поле поиска, чтобы найти инструмент и открыть его, или перейти к инструменту в наборе инструментов Администрирование базы геоданных набора инструментов Управление данными.
- Используйте файл подключения к базе данных, созданный на шаге 1, в качестве входной рабочей области.
- Проверьте, какие таблицы вы хотите проанализировать:
- Если вы хотите обновить статистику для выбранных базовых таблиц, оставьте флажок Анализировать базовые таблицы для выбранных наборов данных.
- Установите флажок Анализировать дельта-таблицы для выбранных наборов данных, чтобы обновить статистику по таблицам добавления и удаления наборов данных с версиями.
- Установите флажок Анализировать архивные таблицы для выбранных наборов данных, чтобы обновить статистику по историческим архивным таблицам наборов данных, для которых разрешено архивирование.
- Установите флажок Включить системные таблицы, чтобы обновить статистику по системным таблицам базы геоданных. Обратите внимание, что это можно запустить, только если вы подключены к базе геоданных как администратор базы геоданных.
- Нажмите «Выполнить».
Статистика обновлена для выбранных вами таблиц и их индексов.
Запустить скрипт Python
Вы можете вызвать функцию AnalyzeDatasets_management в скрипте Python, чтобы обновить статистику по базовым таблицам, дельта-таблицам, архивным таблицам или системным таблицам базы геоданных. Как и в случае с инструментом Analyze Datasets, вы должны запустить AnalyzeDatasets_management от имени владельца анализируемых таблиц.
При запуске следующего сценария Python укажите файл подключения к базе данных (файл .sde) при его запуске. Скрипт обновляет статистику для всех таблиц, принадлежащих пользователю, указанному в соединении.
Например, чтобы запустить этот сценарий в Linux с помощью файла подключения к базе данных entgdb.sde, расположенного в /usr/connections, введите следующее:
./ AnalyzeDatasets.py /usr/connections/entgdb.sde
Для запуска В этом скрипте для обновления статистики по системным таблицам укажите файл подключения, который подключается от имени администратора базы геоданных.
# Имя: AnalyzeDatasets.py # Описание: анализирует все наборы данных в многопользовательской базе геоданных. # для данного пользователя. # Импорт системных модулей импортировать аркпи импорт ОС # установить рабочее пространство # пользователь в этой рабочей области должен быть владельцем анализируемых данных. рабочая область = "C:\\MyProject\\MyDataConnection.sde" # устанавливаем рабочую среду arcpy. env.workspace = рабочая область # ПРИМЕЧАНИЕ. Анализ наборов данных может принимать список наборов данных Python. # Получить имя пользователя для рабочей области userName = arcpy.Describe(workspace).connectionProperties.user # Получить список всех наборов данных, которыми владеет пользователь, используя подстановочный знак, включающий имя пользователя # Во-первых, получите все отдельные таблицы, классы пространственных объектов и растры. dataList = arcpy.ListTables(userName + "*") + arcpy.ListFeatureClasses(userName + "*") + arcpy.ListRasters(userName + "*") # Затем для наборов данных объектов получите все наборы данных и классы объектов # из списка и добавить их в основной список. для набора данных в arcpy.ListDatasets(userName + "*", "Feature"): arcpy.env.workspace = os.path.join(рабочая область,набор данных) dataList += arcpy.ListFeatureClasses(userName + "*") + arcpy.ListDatasets(userName + "*") # сбросить рабочую область arcpy.env.workspace = рабочая область # Выполнение анализа наборов данных # Примечание: для использования опции "СИСТЕМА" пользователь рабочей области должен быть администратором.