Каков рекомендуемый пакетный размер для SqlBulkCopy?

Используйте LinearLayout с вертикальной ориентацией вместо RelativeLayout. Вы автоматически получите вертикальное положение объектов

81
задан Ray Vega 2 April 2013 в 22:59
поделиться

3 ответа

У меня есть утилита импорта, которая находится на том же физическом сервере, что и мой экземпляр SQL Server. Используя специальный IDataReader , он анализирует плоские файлы и вставляет их в базу данных с помощью SQLBulkCopy . Типичный файл имеет около 6 миллионов квалифицированных строк, в среднем 5 столбцов десятичного и короткого текста, около 30 байт на строку.

Учитывая этот сценарий, я обнаружил, что размер пакета в 5000 является лучшим компромиссом между скоростью и потреблением памяти. Я начал с 500 и экспериментировал с более крупными. Я обнаружил, что 5000 в среднем в 2,5 раза быстрее, чем 500. Вставка 6 миллионов строк занимает около 30 секунд при размере пакета 5000 и около 80 секунд при размере пакета 500.

10000 не было заметно быстрее. Увеличение до 50 000 улучшило скорость на несколько процентных пунктов, но это ' s не стоит повышенной нагрузки на сервер. Более 50 000 не показали улучшения скорости.

Это не формула, это еще одна точка данных, которую вы можете использовать.

91
ответ дан 24 November 2019 в 09:39
поделиться

Все зависит от вашей реализации.

Какую скорость вы можете ожидать в своей сети? Вы используете его в формах или ASP.Net? Вам нужно предупредить пользователя о прогрессе? What is the size of the total job?

In my experience running bulk copy without a batch size specified will cause timeout issues. I Like to start with something like 1000 records and do some adjustments from there.

4
ответ дан 24 November 2019 в 09:39
поделиться

Это проблема, над которой я тоже потратил некоторое время. Я хочу оптимизировать импорт больших файлов CSV (16+ ГБ, 65+ миллионов записей и их рост) в базу данных SQL Server 2005 с использованием консольного приложения C # (.Net 2.0). Как Джереми уже указал , вам нужно будет выполнить некоторую тонкую настройку для ваших конкретных обстоятельств, но я бы порекомендовал вам иметь начальный размер пакета 500 и проверять оба значения. выше и ниже этого.

Я получил рекомендацию проверить значения от 100 до 1000 для размера пакета из сообщения на форуме MSDN и был настроен скептически. Но когда я проверил размер пакетов от 100 до 10 000, я обнаружил, что 500 было оптимальным значением для моего приложения. Значение 500 для SqlBulkCopy. BatchSize также рекомендуется здесь .

Чтобы еще больше оптимизировать операцию SqlBulkCopy, ознакомьтесь с этим советом MSDN ; Я считаю, что использование SqlBulkCopyOptions.TableLock помогает сократить время загрузки.

28
ответ дан 24 November 2019 в 09:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: