Я использую класс SqlBulkCopy для выполнения объемной вставки в SQLServer DB.
Исходный размер файла .mdf, связанного с БД, составляет 1508 Мб.
Когда я запускаю его (по тем же данным около 4 миллионов записей) с:
BatchSize 100000, размер .mdf увеличивается до 1661 МБ.
BatchSize 1000000, размер .mdf увеличивается до 1659 МБ.
Почему этот вариант? Такая небольшая вариация ничтожно мала, за исключением того, что, когда мой тестер запускает ее (по тем же данным) с размером партии 100, файл .mdf становится безумно до тех пор, пока он не воспользуется всеми доступными для него 20 гигабайтами, а затем ошибок из-за отсутствия свободного места.
Это потому, что SqlBulkCopy имеет блоки фиксированного размера, которые он выделяет?
Он работает отлично с BatchSizes> 100000, но я хочу понять основную причину этого странного поведения / ошибки.
В вашем файле mdf хранятся ваши данные - он должен расти примерно в соответствии с нагрузкой на ваши данные. Но поскольку «ck» уже указывал - SQL Server позволяет указать определенный шаблон роста, например, файл mdf не вырабатывает байт байтом всякий раз, когда вы вставляете строку. Таким образом, в зависимости от вашей настройки, он будет иметь «прыжки» по размеру, когда ему нужно больше места.
Это не имеет никакого отношения к тому, загружаете ли вы свои данные с помощью обычного оператора INSERT или SqlBulkLoad.
Марк