Увеличивает ли SQLBulkCopy размер файла .mdf? - PullRequest
0 голосов
/ 17 апреля 2009

Я использую класс SqlBulkCopy для массовой вставки в БД SQLServer.

Исходный размер файла .mdf, связанного с БД, составляет 1508 Мб.

Когда я запускаю его (на тех же данных около 4 миллионов записей) с помощью:
BatchSize размером 100000, размер .mdf увеличивается до 1661 МБ.
BatchSize 1000000, размер .mdf увеличивается до 1659 МБ.

Почему этот вариант? Такое небольшое отклонение пренебрежимо мало, за исключением того, что , когда мой Tester запускает его (на тех же данных) с размером пакета 100, файл .mdf растет безумно, пока не использует все 20 доступных ему гигабайт а затем происходит ошибка из-за недостатка свободного места.

Это потому, что у SqlBulkCopy есть несколько блоков фиксированного размера, которые он выделяет?
Он отлично работает с BatchSizes> 100000, но я хочу понять причину этого странного поведения / ошибки.

Ответы [ 3 ]

3 голосов
/ 17 апреля 2009

Ваш mdf-файл - это место, где хранятся ваши данные - он должен примерно расти в соответствии с вашей загрузкой данных. Но, как уже отмечалось, «ck» - SQL Server позволяет вам указать определенную модель роста, например, mdf-файл не увеличивается побайтно, когда вы вставляете строку. Таким образом, в зависимости от ваших настроек, он займет «скачки» по размеру, когда ему нужно больше места.

Это не имеет никакого отношения к тому, загружаете ли вы данные с помощью регулярного оператора INSERT или SqlBulkLoad.

Марк

1 голос
/ 17 апреля 2009

Это зависит от настроек роста вашей базы данных. По умолчанию он увеличивается на 10%, но при заполнении его можно настроить на 1 ГБ и т. Д.

0 голосов
/ 17 апреля 2009

Загрузка данных при массовой загрузке или «обычной» загрузке будет влиять на размер файла журнала, а не на файл MDF (БД должна находиться в режиме простого или массового восстановления, есть некоторые другие требования) Вы уверены, что файл журнала тестера не занимал все доступное пространство?

...