Оптимизация производительности массового импорта данных

В этом разделе описываются параметры оптимизации массового импорта данных в таблицу базы данных MicrosoftSQL Server с помощью команды bcp, инструкции BULK INSERT или функции OPENROWSET(BULK...) языка Transact-SQL. Чтобы как можно быстрее массово импортировать или экспортировать данные, важно понимать, какие факторы влияют на производительность, а также, какие квалификаторы команд доступны для управления ею. Используйте для массового импорта в SQL Server инструкцию Transact-SQL, где это возможно, так как Transact-SQL быстрее bcp.

ПримечаниеПримечание

Сравнение этих методов см. в разделе Операции массового импорта и массового экспорта.

Техника улучшения производительности конкретного массового импорта зависит от влияния следующих факторов.

  • Есть ли в таблице ограничения или триггеры.

  • Модель восстановления, использующаяся базой данных.

    Дополнительные сведения см. в разделе Обзор моделей восстановления.

  • Пуста ли таблица, в которую копируются данные.

  • Есть ли в этой таблице индексы.

  • Задана ли подсказка TABLOCK.

  • Копируются ли данные через один клиент или через несколько клиентов параллельно.

  • Копируются ли данные между двумя компьютерами, на которых запущены экземпляры SQL Server.

Важное примечаниеВажно!

В SQL Server 2005 и более поздних версиях оптимизация массового импорта доступна и при включенных триггерах. Управление версиями строк используется для триггеров. Версии строк сохраняются в хранилище версий базы данных tempdb. Прежде чем производить массовый импорт большого пакета записей данных с использованием триггеров, может потребоваться расширить базу данных tempdb с учетом возросшей потребности в емкости хранилища версий.

Сведения о том, как эти факторы влияют на сценарии массового импорта, см. в разделе Рекомендации по оптимизации массового импорта данных.

Способы оптимизации массового импорта

SQL Server предоставляет следующие способы ускорения массового импорта данных.

  • Минимальное ведение журнала

    В простой модели восстановления массовые операции производятся с минимальным протоколированием.

    В базе данных, использующей модель полного восстановления, все операции вставки строк, выполняющиеся во время массового импорта, полностью записываются в журнал транзакций. Во время импорта большого количества данных это может привести к быстрому заполнению журнала транзакций. Для операций массового импорта минимальное ведение журнала более эффективно, чем полное, поскольку снижает вероятность того, что во время массового импорта журнал будет переполнен. Чтобы выполнять операции массового импорта с минимальным протоколированием в базе данных, которая обычно использует модель полного восстановления, ее можно сначала переключить на модель восстановления с неполным протоколированием, а после выполнения массового импорта данных снова переключить на модель полного восстановления. Дополнительные сведения см. в разделе Особенности переключений между моделью полного восстановления и моделью восстановления с неполным протоколированием.

    ПримечаниеПримечание

    Протоколирование вставки строк минимально только в том случае, если неполное протоколирование применимо. В противном случае вставка строк в журнале транзакций будет протоколироваться полностью. Сведения о том, когда ведется журнал операций массового импорта и как следует выполнять эти операции с минимальным протоколированием, см. в разделах Операции, для которых возможно минимальное протоколирование и Предварительные условия для минимального ведения журнала массового импорта данных.

  • Параллельный импорт данных из нескольких клиентов в одну таблицу

    SQL Server разрешается параллельный массовый импорт данных в одну таблицу из нескольких клиентов. Все три механизма массового импорта поддерживают параллельный импорт данных. Это может повысить производительность операций импорта данных.

    Дополнительные сведения см. в разделе Параллельный импорт данных с блокировкой на уровне таблицы.

  • Использование пакетов

    Сведения об использовании пакетов при импорте данных и о параметрах команд для управления пакетами см. в разделе Управление пакетами для массового импорта данных.

    ПримечаниеПримечание

    Параметр BULK предложения OPENROWSET не поддерживает управление размером пакета.

  • Отключение триггеров

    Отключение триггеров может повысить производительность.

    Дополнительные сведения о влиянии выполнения триггеров на операции массового импорта и о том, как включать и отключать триггеры, см. в разделе Управление выполнением триггеров при массовом импорте данных.

  • Отключение ограничений

    Сведения о том, как проверка ограничений воздействует на операцию массового импорта, и о том, как включать и отключать ограничения CHECK и FOREIGN KEY таблицы, см. в разделе Управление проверкой ограничений при операциях массового импорта.

  • Упорядочение данных в файле данных

    По умолчанию при операции массового импорта подразумевается, что данные не отсортированы. Если в таблице есть кластеризованный индекс, программа bcp, инструкция BULK INSERT и функция OPENROWSET(BULK…) языка Transact-SQL позволяют указать сортировку данных во время операции массового импорта. Данные в файле данных необязательно должны быть отсортированы в том же порядке, что и данные таблицы. Однако можно улучшить производительность массового импорта, если указать то же упорядочение для файла данных, что и в таблице.

    Дополнительные сведения см. в разделе Управление порядком сортировки во время массового импорта данных.

  • CУправление поведением блокировок

    Сведения о том, как указать поведение блокировок во время операций массового импорта, см. в разделе Управление операциями блокировки при массовом импорте.

  • Импорт данных в собственном формате

    Дополнительные сведения см. в разделах Использование собственного формата для импорта и экспорта данных и Использование собственного формата Юникода для импорта или экспорта данных.