Книга: Настольная книга 1С:Эксперта по технологическим вопросам
Назад: 4.4.Регламентные операции SQL Server и настройка их автоматического выполнения
Дальше: Очистка процедурного кеша (кеша планов)

Обновление статистики SQL Server

Чтобы правильно выбирать план запроса, SQL Server должен иметь актуальную информацию о таблицах базы. Просто для примера: если вам нужны какие-то бумаги из шкафа, вы можете ходить за каждым листиком, можете взять несколько папок и разобрать их у себя на столе, а можете передвинуть к своему столу весь шкаф целиком (потом не забыв вернуть). В каждом случае вы будете принимать решение, соотнося количество бумаг, которые вам нужны, с количеством бумаг в шкафу и их размещением там. Если вы ошибетесь, вы можете 100 раз ходить к шкафу, доставая оттуда по листочку, потому что будете думать, что там 10 миллионов бумаг, и все разложены по разным местам, а на самом деле их там всего 100 и было. Или, напротив, ради 10 листов перетащить к себе весь шкаф, считая, что там только эти 10 листов и есть, а там их окажется 10 тысяч. Но человек имеет возможность корректировать свои действия, а SQL Server, который может ошибиться примерно так же, должен будет выполнить работу в соответствии с назначенным планом, не имея возможности до следующего раза его поменять.

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

Для обновления статистик по всем таблицам базы данных необходимо выполнить следующий SQL запрос (базу надо выбирать свою, а не master и не какую-либо еще):

exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'

Рекомендуется выполнять его не реже раза в день. Время выполнения этой и следующей операций тем больше, чем реже их делают, и если делать их несколько раз в день, они будут проходить быстро. И даже если при этом произойдет снижение производительности на 10–15 %, очень немногие его смогут на себе ощутить.

Чтобы обновление статистик выполнялось по расписанию автоматически, нужно сделать следующее:

  1. В ранее созданный план обслуживания (он у нас назывался «MaintenancePlan» или «Регламентные операции») добавить новый вложенный план кнопкой Add Subplan (Добавление вложенного плана). Имя можно дать свое: «Обновление статистик и очистка процедурного кеша» (почему так, станет ясно позднее).
  2. Сразу же в форме создания можно задать расписание (Schedule). Как уже говорилось, рекомендуется выполнять это задание ежедневно.
  3. Перетащить на поле плана с панели элементов задачу Update Statistics Task (Обновление статистики).
  4. Открыть появившуюся задачу двойным щелчком. В появившемся окне выбрать (или потом в поле Database(s) («Базы данных») отметить) нужные базы, остальные поля заполнить, как приведено на рис. 4.4.1:

Рис. 4.4.1. Настройка свойств задачи обновления статистики

  1. Сохранить задачу, нажав ОК.
  2. Сохранить план, например в меню Файл выбрав Сохранить выбранные элементы.
  3. Убедиться, что в срок, указанный в расписании, задание отработало.
Назад: 4.4.Регламентные операции SQL Server и настройка их автоматического выполнения
Дальше: Очистка процедурного кеша (кеша планов)