Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Правильный скрипт для обновления статистики  [new]
ACV
Member

Откуда:
Сообщений: 74
Всем привет!
Обновление статистики полезная операция для базы и выполнять её рекомендуют часто.
Имеем базу 300 Гб.
SQL Server 2008 SP3
Если делаю обновление статистики через визард (настраиваю последовательность с помощью имеющичся квадратиков), т ообновление статистики идет 3 часа и скрипт для каждой таблицы выглядит так
use [BASE]
GO
UPDATE STATISTICS [dbo].[_Acc10]
WITH FULLSCAN
GO

если же делаю обновление статистики с помощью процедуры
Exec sp_updatestats
то обновление идет всего 5 минут.

Подскажите в чем разница? Почему процедурой получается намного быстрее? Как делать обновление статистики правильно?

Предполагаю , что увеличение времени идет из-за FULLSCAN, но насколько оно необходимо?

Заранее спасибо!
8 авг 13, 11:34    [14680068]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
ACV
Всем привет!
Обновление статистики полезная операция для базы и выполнять её рекомендуют часто.
Имеем базу 300 Гб.
SQL Server 2008 SP3
Если делаю обновление статистики через визард (настраиваю последовательность с помощью имеющичся квадратиков), т ообновление статистики идет 3 часа и скрипт для каждой таблицы выглядит так
use [BASE]
GO
UPDATE STATISTICS [dbo].[_Acc10]
WITH FULLSCAN
GO

если же делаю обновление статистики с помощью процедуры
Exec sp_updatestats
то обновление идет всего 5 минут.

Подскажите в чем разница? Почему процедурой получается намного быстрее? Как делать обновление статистики правильно?

Предполагаю , что увеличение времени идет из-за FULLSCAN, но насколько оно необходимо?

Заранее спасибо!

sp_updatestats генерирует для каждого объекта инструкцию UPDATE STATISTICS, однако в отличии от скриптов из wizard:
BOL
Процедура sp_updatestats обновляет только статистику, требующую обновления, основываясь на данных столбца rowmodctr в представлении каталога sys.sysindexes. Таким образом, предотвращаются ненужные обновления статистики по неизмененным строкам.


BOL sp_updatestats
8 авг 13, 11:42    [14680132]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Glory
Member

Откуда:
Сообщений: 104751
ACV
Обновление статистики полезная операция для базы и выполнять её рекомендуют часто.

Не часто, а вовремя.
Если данные не меняются, то зачем обновлять статистику ?

ACV
если же делаю обновление статистики с помощью процедуры
Exec sp_updatestats
то обновление идет всего 5 минут.

exec sp_helptext 'sp_updatestats'
попробуйте найти отличия между командами UPDATE STATISTICS
8 авг 13, 11:43    [14680147]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
ACV
Member

Откуда:
Сообщений: 74
Спасибо, т.е. по идее процедура работает корректнее визарда.
8 авг 13, 14:32    [14681341]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Glory
Member

Откуда:
Сообщений: 104751
ACV
Спасибо, т.е. по идее процедура работает корректнее визарда.

Процедура работает так, как ее написали.
Т.е. использует один из документированных параметров команды UPDATE STATISTICS
Какой из параметров более правильный для конктреной таблицы процедура не может решить
8 авг 13, 14:36    [14681370]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ACV
Спасибо, т.е. по идее процедура работает корректнее визарда.

Что за идея?

Вообще, чем больше строк просканировано при сборе статистики, тем более качественная она получается. Самая лучшая — при фуллскане. При "плохой" статистике возможны ошибки оптимизатора при подсчёте cardinality, что может привести к построению неоптимальных планов запросов.
8 авг 13, 14:38    [14681397]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
В дополнение к выше сказанному коллегами:

Обратите внимание, что статистику можно автоматически создавать и поддерживать, включив параметры базы данных AUTO_CREATE_STATISTICS и AUTO_UPDATE_STATISTICS. Они включены по умолчанию, но проверьте на всякий случай.
8 авг 13, 16:11    [14682177]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
ACV
Member

Откуда:
Сообщений: 74
Правильно ли я понял ,что при FullScan обновление статистики более качественное?
Тогда можно ли изменить процедуру sp_updatestats , чтобы обновление статистики этой процедурой тоже выполнялось с функцией FullScan?
Спасибо!
8 авг 13, 18:32    [14683185]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
ACV, можно, изменяйте.

Скрипт у вас есть - делайте копию под своим именем, заменив опции.
8 авг 13, 18:56    [14683249]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
ACV
Правильно ли я понял ,что при FullScan обновление статистики более качественное?
Тогда можно ли изменить процедуру sp_updatestats , чтобы обновление статистики этой процедурой тоже выполнялось с функцией FullScan?
Спасибо!
Не изобретайте велосипед. http://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html
8 авг 13, 22:10    [14683940]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
ACV
Member

Откуда:
Сообщений: 74
Спасибо
Вот такой скрипт будет обновлять статистику с полным сканом по всем таблицам?
Поправьте если я неправ

exec sp_MSforeachtable

@command1 = 'UPDATE STATISTICS ? WITH FULLSCAN'
9 авг 13, 11:59    [14686056]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
ACV
Спасибо
Вот такой скрипт будет обновлять статистику с полным сканом по всем таблицам?
Поправьте если я неправ

exec sp_MSforeachtable

@command1 = 'UPDATE STATISTICS ? WITH FULLSCAN'
Зачем обновлять статистику по тем таблицам которые не изменялись?
9 авг 13, 20:22    [14689375]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
ACV
Member

Откуда:
Сообщений: 74
1. Я хочу сделать такое же обновление статистики как и в случае с визардом. Наверное если в стандартной процедуре обновления статистики учитываются все таблицы (даже те которые не менялись), то в этом есть какой-то смысл.
2. Мне надо , что бы обновление статистики шло не менее 30 минут. Это нужно для корректного выполнения заданий идущих за ним.
12 авг 13, 10:34    [14695092]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Empirical
Member

Откуда:
Сообщений: 99
ACV,

а чем sp_autostats не устраивает?
12 авг 13, 10:44    [14695131]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Glory
Member

Откуда:
Сообщений: 104751
ACV
1. Я хочу сделать такое же обновление статистики как и в случае с визардом. Наверное если в стандартной процедуре обновления статистики учитываются все таблицы (даже те которые не менялись), то в этом есть какой-то смысл.

Визард запускает человек, который должен понимать, что и для чего он делает

ACV
2. Мне надо , что бы обновление статистики шло не менее 30 минут. Это нужно для корректного выполнения заданий идущих за ним.

А как статистика влияет на корректность ?
Следующие шаги будут выдавать неверные результаты что ли ?
12 авг 13, 10:48    [14695147]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
ACV
2. Мне надо , что бы обновление статистики шло не менее 30 минут. Это нужно для корректного выполнения заданий идущих за ним.
Да не вопрос:
waitfor delay '00:30';
exec sp_updatestats;
12 авг 13, 12:09    [14695698]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
ACV
Member

Откуда:
Сообщений: 74
Да, с паузой это выход.
Тогда получается , что обновление статитики с FullScan только время отнимает? а пользы от этого никакой нет?
12 авг 13, 12:48    [14696036]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Glory
Member

Откуда:
Сообщений: 104751
ACV
Тогда получается , что обновление статитики с FullScan только время отнимает? а пользы от этого никакой нет?

Это вы время отнимаете
Начните с чтения хелпа - Using Statistics to Improve Query Performance
12 авг 13, 12:51    [14696070]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ACV
Да, с паузой это выход.
Тогда получается , что обновление статитики с FullScan только время отнимает? а пользы от этого никакой нет?

Да вообще от любого обновления статистики пользы никакой нет.
Достаточно выполнять только эту команду:
waitfor delay '00:30';
и можно переходить к "заданиям идущим за ним".
12 авг 13, 12:57    [14696122]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Empirical
ACV,

а чем sp_autostats не устраивает?
Наверное тем, что эта команда не обновляет статистику.
13 авг 13, 03:39    [14699650]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Empirical
Member

Откуда:
Сообщений: 99
Mind
Empirical
ACV,

а чем sp_autostats не устраивает?
Наверное тем, что эта команда не обновляет статистику.


AUTO_UPDATE_STATISTICS Option
When the automatic update statistics option, AUTO_UPDATE_STATISTICS, is on, the query optimizer determines when statistics might be out-of-date and then updates them when they are used by a query. Statistics become out-of-date after insert, update, delete, or merge operations change the data distribution in the table or indexed view. The query optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view.

The query optimizer checks for out-of-date statistics before compiling a query and before executing a cached query plan. Before compiling a query, the query optimizer uses the columns, tables, and indexed views in the query predicate to determine which statistics might be out-of-date. Before executing a cached query plan, the Database Engine verifies that the query plan references up-to-date statistics.

Source
13 авг 13, 08:53    [14699882]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Empirical,

В теории - да. На практике, критерии автообновления статистики сервером совершенно неприемлемы, если таблица уже достаточно большая, скажем 10М записей, и регулярно обновляется. Говорят, в 2012 это поправили, но насколько полноценно - хз.

У меня на предыдущей работе был набор джобов с обновлением статистики разных таблиц и разными расписаниями, в зависимости от интенсивности обновлений. Так вот на одной таблице в пиковые интервалы приходилось обновлять статистику каждые 10 минут, иначе тут же слетали планы (это было на 2005 еще).
13 авг 13, 11:23    [14700819]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Empirical
Mind
пропущено...
Наверное тем, что эта команда не обновляет статистику.

The query optimizer determines when statistics might be out-of-date by counting the number of data modifications since the last statistics update and comparing the number of modifications to a threshold. The threshold is based on the number of rows in the table or indexed view.
Have you already found the exact values of these thresholds and how they are suitable for the real world implementations?
13 авг 13, 21:27    [14704608]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Empirical
Member

Откуда:
Сообщений: 99
Вопрос теоретическо-праздный в тему (объем в 10 миллионов впечатлил):
А если таблица по партициям, статистика по каждой партиции создается/считается или для всей таблицы?
13 авг 13, 21:47    [14704647]     Ответить | Цитировать Сообщить модератору
 Re: Правильный скрипт для обновления статистики  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37079
нужно ли чистить кеш планов выполнения запросов после обновления статистики ?
14 авг 13, 11:06    [14706425]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить