Собирает ли статистика SQL Server разные данные, если они обновляются под нагрузкой, а не в периоды пиковой нагрузки? - PullRequest
3 голосов
/ 02 августа 2011

Хорошо, основной вопрос: кто-нибудь слышал что-либо, что подразумевало бы, что статистика должна обновляться при ежедневном использовании, чтобы быть эффективной, а не в нерабочее время?

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

План запросов, по-видимому, является результатом нашего плана обслуживания, который еженедельно выполняется в системе.,Один из последних шагов в плане обновления статистики.Единственное, что изменилось за последнее время, - это то, что для обновления статистики была выбрана выборка 10% вместо 30%, как это было ранее.(Теперь мы изменили это обратно)

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

Это противоречит тому, что я понимаю о статистике SQL, и я не могу найти в Интернете ничего, что подсказывало бы мне обновлять статистику в тот или иной момент.

Ответы [ 4 ]

2 голосов
/ 02 августа 2011

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

Обновите свою статистику с помощью FULLSCAN в нерабочее время для максимальной точности, затем оставьте ее в покое.

edit: Как указывает http://blogs.msdn.com/b/chrissk/archive/2008/08/27/do-we-need-to-run-update-statistics-with-fullscan.aspx, статистика с полным сканированием в некоторых случаях может быть не особенно полезна (в основном, если у вас есть таблица, в которой вы много меняете данные). Автоматическая статистика перестроит вашу статистику, если будет изменено достаточное количество строк в вашей таблице (я думаю, это около 500 строк или 20%, в зависимости от того, что больше), а затем будет использовать эту автоматически перестраиваемую статистику по сравнению с полным просмотром. Вы можете либо управлять статистикой вручную ( не рекомендуется), либо оставить автоматическую статистику включенной, но расписание статистики также будет перестраиваться вручную.

1 голос
/ 02 августа 2011

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

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

1 голос
/ 02 августа 2011

Статистика о «распределении данных», а не «нагрузке на сервер»

Если вы делаете их каждую ночь, у вас меньше шансов на обновление статистики в течение дня.

Тогда вы делаете полную или близкую к полной выборку тоже ...

0 голосов
/ 02 августа 2011

Как уже отмечали другие, статистика связана с распределением данных по потенциальному ключевому пространству, поэтому они не зависят от нагрузки. Тем не менее, я видел много баз данных, которые в нерабочее время обрабатывают определенные таблицы (подготовка ETL и т. Д.), Которые бы сильно искажали статистику в зависимости от часа, когда была запущена статистика. Это не значит, что статистика, собранная в течение дня, будет лучше, просто она будет другой.

Целью сбора статистики, как и оптимизации индекса в целом, является настройка сценария, в котором вы хотите, чтобы ваши запросы работали оптимально. Поэтому, если вы хотите, чтобы ваши запросы работали оптимально с миллионами строк в таблице, сгенерируйте статистику с миллионами строк в таблице (распределенных между различными индексными пространствами ключей более или менее, как это было бы, когда ваши запросы должны работать оптимально).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...