#sql #sql-server #tsql #sql-server-2008
#sql #sql-сервер #tsql #sql-server-2008
Вопрос:
Итак, я играю с BULK INSERT
заявлением и начинаю любить его. То, о чем говорили SQL Server Import/Export Wizard
7 часов, занимает всего 1-3 часа использования BULK INSERT
. Однако я наблюдаю, что время до завершения сильно зависит от BATCHSIZE
спецификации.
Ниже приведены случаи, которые я наблюдал для файла объемом 5,7 ГБ, содержащего 50 миллионов записей:
BATCHSIZE = 50000, Time Taken: 17.30 mins
BATCHSIZE = 10000, Time Taken: 14:00 mins
BATCHSIZE = 5000 , Time Taken: 15:00 mins
Это только вызывает у меня любопытство: возможно ли определить хорошее число для BATCHSIZE
и если да, то от каких факторов это зависит и можно ли его приблизить без необходимости запускать один и тот же запрос десятки раз?
Моим следующим запуском будет файл объемом 70 ГБ, содержащий 780 миллионов записей. Любые предложения будут оценены? Я сообщу о результатах, как только закончу.
Ответ №1:
Здесь есть некоторая информация, и, похоже, размер пакета должен быть настолько большим, насколько это практически возможно; в документации в целом указано, что чем больше размер пакета, тем выше производительность, но вы этого вообще не испытываете. Кажется, что 10 кб — это хороший размер пакета для начала, но я бы посмотрел на оптимизацию массовой вставки с других точек зрения, таких как перевод базы данных в простой режим или указание подсказки tablock во время выполнения импорта.
Комментарии:
1. 1 Спасибо! Я не подумал ни об одном из них. Надеюсь, это покажет некоторое улучшение производительности 🙂