2016-10-28 2 views
0

Вот что странно: при запуске BULK INSERT добавить 20 миллионов или около того записей в таблицу из огромного текстового файла, после того, как он бежит некоторое время, скажем, 250000 строк ... Я снова смотрю через 15 минут и есть 2 200 000 рядов ... немного позже - 2 000 000. Как может записываться количество записей DOWN во время BULK INSERT? Я замечаю, что у меня также есть несколько предупреждений DISK FULL. SQL Server каким-то образом начинает удалять записи, когда накопитель заполняется? Помогите!SQL Server потерял записи?

+0

Сколько свободного места на диске при каждом запросе? Кроме того, что-то догадываешься, но я думаю, что вещи не являются «КОМИТЕТОМ», как вы можете ожидать. [Этот вопрос может вдохновить.] (Http://stackoverflow.com/questions/41869/is-sql-server-bulk-insert-transactional) –

ответ

0

Я бы попробовал это несколькими партиями из 2 миллионов записей и посмотрел, что произойдет. Я вытащил это из Microsoft's documentation:

Производительность Вопросы

Если количество страниц должны быть промыты в одной партии превышает внутренний порог, полное сканирование буфера пула может произойти, чтобы определить какие страницы закрашиваются, когда партия совершает. Это полное сканирование может повредить производительность массового импорта. Вероятность случай превышения внутреннего порога возникает, когда большой буфер пул объединен с медленной подсистемой ввода-вывода. Чтобы избежать переполнения буфера на больших машинах, либо не используйте подсказку TABLOCK (которая будет удалять объемную оптимизацию), либо используйте меньший размер партии (который сохраняет объемную оптимизацию). Поскольку компьютеры различаются, мы рекомендуем вам протестировать различные размеры партии при загрузке данных до , чтобы узнать, что лучше всего подходит для вас.

Вы также можете ознакомиться с использованием bcp utility.

+0

Привет, dylpickle! Ну, это работает нормально вообще до сих пор, всегда с большим количеством записей. Мне просто интересно, если он действует, потому что диск может стать полным. Но это все еще не объясняет, почему количество записей идет DOWN, поскольку BULK INSERT продолжает работать ... ???? !! –

+0

Да, это странно. Я думаю, что Боб Кауфман может быть чем-то с идеей отката. Место на диске и размер журнала - это немного недостающая информация, которая может помочь диагностировать. – dylpickle

+0

SQL-сервер использует потоки и списки заданий. Допустим, ваш объемный поток делает много заданий вставки в пакетах, которые нужно обрабатывать/записывать на диск. Затем у вас есть другой поток, который на самом деле записывает его на диск, который должен дождаться, пока ОС даст ему разрешение на прямую запись на диск, затем он займет задание и записывает его на диск. Если при выполнении ошибки возникает ошибка, она выдает ошибку, очищает, завершает работу и ждет следующего окна записи, а затем повторяет следующую партию. Вот как работа продолжает работать синхронно, иногда отключаясь, никогда не останавливаясь. – Tschallacka

Смежные вопросы