Большая вставка / обновление в таблице приводит к превышению времени ожидания, пока SQL Server переупорядочивает индексы
Мы вставляем / удаляем около 1 миллиона строк таблицы из двух миллионов строк с помощью служб SSIS.
У нас есть 20 индексов на эту таблицу.
Сразу после окончания службы SSIS у нас возникают тайм-ауты во внешнем интерфейсе. Тайм-ауты в конце концов уходят.
Я подозреваю, что индексы вызывают это во время их реорганизации.
Что мы можем сделать?
3 ответа
Индексы обновляются по мере обновления данных, обновления индексов являются синхронными.
Теперь обновление статистики - это асинхронная операция. После того, как обновление данных выполнено вручную, выполните обновление статистики по рассматриваемым таблицам.
Обновляя более 20% строк в таблице, вы запускаете обновление статистики.
Поведение сервера SQL по умолчанию - делать это синхронно. Это означает, что если затронутый индекс используется в плане выполнения, оптимизатор замечает, что статистика устарела, немедленно инициирует обновление и перекомпилирует план выполнения.
В SQL Server 2005 появилась новая функция, которая делает обновление статистики асинхронным для базы данных, т.е. оптимизатор будет использовать устаревшую статистику, но запускать обновление статистики в фоновом режиме, чтобы следующий запрос использовал преимущества новой статистики., Команда AUTO_UPDATE_STATISTICS_ASYNC ON
см. BOL для получения дополнительной информации.
Альтернатива, как уже предлагалось, заключается в принудительном обновлении таблицы вручную после загрузки. Вы можете сделать это с UPDATE STATISTICS
команда. Вот ссылка на BOL.
Если вы используете задачу "Массовая вставка" в службах SSIS, вы можете попытаться установить размер пакета, это разделит его на более мелкие куски с коммитами между ними.