Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Пара вопросов об автоматическом обновлении статистик.  [new]
Начинучка
Guest
Всем привет!

Подскажите, пожалуйста, каким образом происходит пересчет статистик при срабатывании автоматического обновления (опция [Auto Update Statistics] = true)?
Имею ввиду тип сканирования - full scan, или "какой-то процент строк" | "заданное чиcло строк"?
Где можно увидеть эти параметры для каждой статистики и как, в случае надобности, поменять?

Совсем хорошо было бы ткнуть в нужное место в доке. Читал статьи BOL, посвященные автообновлению статистики, но ответов на эти вопросы не увидел.

Заранее всем спасибо за ответы!
9 окт 17, 09:56    [20853557]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3145
Начинучка,

Конкретный алгоритм, по которому сервер решает запустить обновление, зависит от версии оного, и возможно, каких-нибудь флагов трассировки.

В целом, рекомендация - не закладываться на авто-апдейт и настраивать принудительное обновление статистик на критических таблицах по расписанию (которое, в общем случае, для разных таблиц может быть разным).
9 окт 17, 11:27    [20853869]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Начинучка,

https://docs.microsoft.com/en-us/sql/relational-databases/statistics/statistics

https://support.microsoft.com/en-us/help/2754171/controlling-autostat-auto-update-statistics-behavior-in-sql-server

ну и
There was a data change on an empty table.
The number of rows in the table was 500 or less at the time of statistics creation and the column modification counter of the leading column of the statistics object has changed by more than 500 since then.
The table had more than 500 rows when the statistics were gathered, and the column modification counter of the leading column of the statistics object has changed by more than 500 + 20% of the number of rows in the table when the statistics were gathered.
A table in TempDB with less than 6 rows had at least 6 row modifications.
9 окт 17, 11:36    [20853901]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
Начинучка
Guest
Ennor Tiegael,

Интересует не алгоритм принятия сервером решения о необходимости пересчета статистик, а способ чтения таблицы при сборе статистики, которые будет использовать сервер.
Если я вручную собираю статистику, я могу указать, как читать таблицу: полным сканированием, сканированием какого-то процента строк, сканирование строго заданного числа строк.
Как сервер будет считать статистики при автообновлении? Полным сканированием? Или по сэмплу на выборке из n-строк / m%?
9 окт 17, 11:46    [20853944]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
o-o
Guest
Auto-Update Stats Default Sampling Test
9 окт 17, 12:07    [20854026]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/
Auto Update stats Algorithm:

So the Auto Update stats will fire for every 500 + 20% change in table rows. Of course, we have an improved algorithm in SQL 2012 which is SQRT(1000 * Table rows) which is much better.



When it fires it will use the default sampling rate and here is the algorithm how it calculates the sampling rate.

1) If the table < 8MB then it updates the statistics with a fullscan.

2) If the table > 8MB, it follows an algorithm. It reduces the sampling rate as the number of rows in the table are increased to make sure we are not scanning too much data. This is not a fixed value but is under the control of optimizer. It is not a linear algorithm either.

Example: if we have 1,000,000 rows it would use a sampling rate of 30% but when the number of rows increase to 8,000,000 it would reduce the sampling rate to 10%. These sampling rates are not under the DBAs control but optimizer decides it.
9 окт 17, 12:09    [20854041]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3145
Начинучка
Ennor Tiegael,

Интересует не алгоритм принятия сервером решения о необходимости пересчета статистик, а способ чтения таблицы при сборе статистики, которые будет использовать сервер.
Если я вручную собираю статистику, я могу указать, как читать таблицу: полным сканированием, сканированием какого-то процента строк, сканирование строго заданного числа строк.
Как сервер будет считать статистики при автообновлении? Полным сканированием? Или по сэмплу на выборке из n-строк / m%?
На эти вопросы нет однозначного ответа, потому что поведение сервера будет разным в зависимости от select @@version и флагов трассировки. В 2005 использовались одни константы, в 2008 другие, а в 2016 это опять поменяли - так понятнее?

На вашей конкретной системе можете поиграться, примерно как описано у Стеллато. Ну и оттуда дальше по ссылкам.

С каким именно сэмплингом выполняется автопересчет, проще всего узнать, поставив профайлер. Допускаю, что конкретные цифры / параметры пересчета не документируются умышленно, т.к. постоянно меняются от версии к версии.
9 окт 17, 12:16    [20854069]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
Начинучка
Guest
окау. с этим разобрались - сервер сам выставляет нужные ему пороги для сэмплирования, администратору оно неподвластно.


запретить пересобирать статистику для определенных таблиц/индексов - есть у администратора такая возможность?
как определить список таблиц, для которых движок сервера "плохо" подобрал размер сэмплинга и собрал "кривую" статистику?

З.Ы.
ссылки читаю, но вдруг кто быстрее ответит, чем я найду ответ самостоятельно...
9 окт 17, 13:16    [20854306]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Начинучка,

NORECOMPUTE
9 окт 17, 13:36    [20854377]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3145
Начинучка
как определить список таблиц, для которых движок сервера "плохо" подобрал размер сэмплинга и собрал "кривую" статистику?
Пользователи сами скажут, что именно тормозит Еще можно в sys.dm_db_stats_properties() глянуть.

Ну или можете профайлер погонять, чтобы собирал только запросы с Duration больше определенного предела. Это вообще имеет смысл делать регулярно.
9 окт 17, 17:32    [20855399]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
o-o
Guest
Ennor Tiegael
Начинучка
как определить список таблиц, для которых движок сервера "плохо" подобрал размер сэмплинга и собрал "кривую" статистику?
Пользователи сами скажут, что именно тормозит Еще можно в sys.dm_db_stats_properties() глянуть.

у вас такие продвинутые пользователи,
что аж сообщают, почему именно запрос тормозит?
-- алло, ДБА? запрос, за который отвечает второй пункт меню нашего приложения
сегодня тормозит из-за плохо собранной статистики.
кстати, запрос из третьего пункта тоже тормозит,
но наш хрустальный шар показал, что с ним все хорошо,
он просто сидит ожидает S lock, пока вы данные балком подгружаете
---
а какая колонка из возвращаемых sys.dm_db_stats_properties отвечает именно за неудачность SAMPLED rows?
9 окт 17, 18:41    [20855643]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
Начинучка
Guest
o-o,

чувствую, вопросы у меня вышли из разряда "поиска серебряной пули"....
9 окт 17, 18:45    [20855651]     Ответить | Цитировать Сообщить модератору
 Re: Пара вопросов об автоматическом обновлении статистик.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Начинучка,

да, способ расчета статистик волнует, интригует, но ничего не значит в практике обслуживания и разработки. Black Box.
9 окт 17, 23:36    [20856172]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить