Поделиться через


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

MicrosoftSQL Server разрешает нескольким клиентам осуществлять параллельный массовый импорт данных в одну неиндексированную таблицу. Это может улучшить производительность операций массового импорта. Параллельное импортирование данных поддерживается всеми тремя командами массового импорта: bcp, BULK INSERT, и INSERT ... SELECT * FROM OPENROWSET(BULK...).

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

Параллельную загрузку данных в одну таблицу могут выполнять только приложения, использующие API-интерфейсы на основе ODBC или OLE DB SQL. Любое приложение, включая программу bcp, базирующуюся на клиентской библиотеке DB-library, содержащейся в версиях MicrosoftSQL Server 6.5 или более ранних, не может участвовать в параллельной загрузке данных в экземпляр SQL Server.

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

При осуществлении операции параллельного массового импорта на экземпляр SQL Server при помощи параметра TABLOCK необходимо учесть следующее.

  • Простейший сценарий параллельного импорта данных — это загрузка данных в неиндексированную таблицу (кучу).

  • Если таблица не содержит индексов, для операции массового импорта нужно указать параметр TABLOCK. Дополнительные сведения см. в разделе Управление операциями блокировки при массовом импорте.

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

    Если таблица не содержит индексов, операцию параллельной загрузки нельзя выполнить при помощи параметра TABLOCK. Кроме того, конкурирующие потоки блокируют друг друга, если не задан параметр TABLOCK. Перед выполнением операции массового импорта следует рассмотреть возможность удаления индексов из таблицы. Дополнительные сведения о сохранении или удалении индексов см. в разделе Рекомендации по оптимизации массового импорта данных.

  • Разделите данные для импортирования на количество файлов данных, соответствующее количеству клиентов. Определите один файл для каждого клиента.

    Рекомендация   Для наиболее эффективного использования процессора равномерно распределите данные между клиентами. Если необходимо произвести параллельный импорт файлов данных от нескольких клиентов в экземпляр SQL Server, убедитесь в том, что файлы данных имеют одинаковый размер. В противном случае клиентский поток со слабой загрузкой может завершиться рано и поэтому неэффективно использовать ЦП этого клиента.

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

После завершения операции массового импорта в таблицу необходимые индексы можно создать следующими способами.

  1. По очереди от каждого клиента создайте кластеризованные индексы. Дополнительные сведения см. в разделе Создание кластеризованных индексов.

  2. Создайте некластеризованные индексы. Их можно создать одновременно от разных клиентов. Дополнительные сведения см. в разделе Создание некластеризованных индексов.

Если параметр TABLOCK не указан, выполнить параллельный массовый импорт данных можно вне зависимости от числа индексов в целевой базе данных. Но в этом случае невозможна полная оптимизация, а также может возникнуть блокировка при установлении блокировки на отдельные строки или страницы.