Назад | Перейти на главную страницу

Могут ли массовые вставки в одну БД повлиять на производительность всего сервера?

У меня есть процесс, который использует BULK INSERT чтобы вставить два файла CSV в таблицы SQL, чтобы я мог объединить их данные с другой таблицей, которая у меня есть. Данные, поступающие из файлов CSV, создают таблицы примерно по 100 000 строк каждая. Когда процесс завершен, эти таблицы усекаются. Весь этот процесс выполняется в БД, созданной только для этого (никаких других действий).

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

Каждое действие, которое вы выполняете с экземпляром, потребляет ресурсы и в некоторой степени влияет на производительность. Некоторые вещи более заметны, чем другие.

В какой модели восстановления находится ваша база данных? Таблица, в которую вы добавляете данные, находится в другой базе данных?

Трудно сказать, в чем может заключаться основная проблема, только с предоставленной вами информацией. Вам нужно будет провести некоторый мониторинг на своем сервере, чтобы точно увидеть, в чем может быть причина. Ваш сервер может ставить в очередь запросы ввода-вывода, вы можете увеличивать свой файл журнала транзакций и запускать там ожидания, вы можете выдвигать ограничения памяти, индексы могут перестраиваться и т. Д.

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

Ссылка: http://msdn.microsoft.com/en-us/library/ms190422.aspx

Ссылка: http://sankarreddy.com/2011/03/interrogating-prerequisites-for-minimal-logging-in-bulk-import-part-1/

Кроме того, проверьте настройки памяти в поле и убедитесь, что максимальный объем памяти установлен правильно. Вы также смотрели на использование файла подкачки? Если используется слишком много файла подкачки, вы также можете уменьшить настройку максимальной памяти. Что еще работает на коробке?

Правильный способ справиться с этим - использовать информацию WAIT STATISTICS [http://technet.microsoft.com/en-us/library/ms179984.aspx] а также отслеживать некоторую информацию, когда сервер работает медленно. Когда сервер работает медленно, вам необходимо проверить использование ЦП, использование ввода-вывода и т. Д., А в @SQLSoldier есть отличный скрипт для определения основной причины высоких временных скачков ЦП.

Ссылка: http://www.sqlsoldier.com/wp/sqlserver/catchingtransientcpuspikesusingsqltrace

Это отправная точка, и вы можете сделать еще кое-что, но вам потребуется дополнительная информация.

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