Способы выгрузки данных
В Экстракторе есть два способа выгрузки данных: блоками и через файл. Ниже рассмотрен принцип работы каждого из них на примере СУБД MS SQL.
Способ «через файл» работает быстрее, однако для его использования необходимо настроить каталоги обмена.
Способ выгрузки «блоками»
Использует инструкцию INSERT: данные каждого сегмента вставляются в таблицу, а старые данные удаляются командой DELETE. Строки SQL-инструкций имеют ограниченную длину, поэтому для одного сегмента может потребоваться несколько инструкций.
Схематично это можно изобразить так:
MS SQL при выполнении каждой INSERT-инструкции:
обновляет индексы таблицы, что приводит к трате ресурсов сервера;
проверяет внешние ключи в каждой вставленной строке; при массовых вставках возможна взаимоблокировка двух процессов, читающих одни и те же данные ключа;
регистрирует каждую инструкцию INSERT в журнале транзакций (протоколирование).
Таким образом, чем больше инструкций, тем медленнее загрузка. Рекомендуется использовать этот способ для выгрузки небольшого объёма данных.
Способ выгрузки «через файл»
Рекомендуется для выгрузки очень больших таблиц.
Использует инструкцию BULK INSERT и берёт данные из файлов на диске: 1 файл = 1 инструкция. BULK INSERT требует меньше протоколирования и обрабатывается как единая транзакция, что существенно ускоряет загрузку больших объёмов по сравнению со множеством отдельных INSERT.
Для работы данного способа необходимо настроить каталог обмена – одну физическую папку с двумя путями:
Каталог выгрузки – путь, доступный серверу 1С для записи.
Каталог загрузки – путь, доступный серверу MS SQL для чтения.
Важно! Необходимо настроить доступ сервера 1С и сервера MS SQL к каталогу обмена (обычно выполняет системный администратор). Пользователю SQL-сервера требуются права bulkadmin:
-- Добавить пользователю SQL-сервера роль bulkadmin
ALTER SERVER ROLE [bulkadmin] ADD MEMBER [Username]Алгоритм работы: сервер 1С записывает данные в виде файлов в каталог обмена и даёт команду серверу MS SQL их загрузить; сервер MS SQL загружает файлы (требуются только права на чтение).
Схематично это можно изобразить так: