Назначение плоского файла пакета SSIS
Обзор: я использую пакет SSIS для копирования данных из SQL Server 2016 в канал плоских файлов, разделенных указанными в кавычках идентификаторами, и обработки управляющих последовательностей. Я использую компонент Script в задаче потока данных в качестве источника для записи данных в плоский файл, так как мне нужно копировать данные из более чем 100 таблиц с другой схемой, так что это единственный динамический подход, сработавший для меня. Также данные огромны по объему, большинство таблиц имеют более 100 столбцов и более 5 миллионов записей. Я настроил, что мой главный пакет вызывает один и тот же пакет 12 раз параллельно для разных таблиц (управляемых с помощью таблиц и параметров SQL). Кроме того, мой дочерний пакет создает файл партиями, реализованными с использованием контейнеров и параметров цикла For Loop.
Постановка проблемы: когда я запускаю свой пакет из SSDT, он начинает записывать данные в файл сразу после обработки записей, но когда я запускаю тот же пакет через задание агента SQL Server, это занимает намного больше времени и записывает данные в файл. после обработки всех записей.
Пример: Допустим, что таблица 'a' имеет 4 миллиона записей, и я создаю 4 файла по 1 миллиону, при том же параметре SSDT начинает записывать строки в файл ~50-60 КБ (может зависеть от размера буфера), как только они обрабатываются, но тот же пакет с той же конфигурацией, когда я запускаю из задания агента SQL-сервера, он обрабатывает все 1 миллион записей и пытается писать все за раз.
Проблема: поскольку он записывает 1 миллион записей за раз, создание файла занимает много времени только для записи 1 миллиона записей ~5-10 минут зависит от количества столбцов в таблице, но с SSDT это намного быстрее ~2-5 минут для той же таблицы.
Может ли кто-нибудь подсказать мне, какие настройки я должен проверить, чтобы он работал быстрее. Таблица, из которой он выбирает данные, хорошо проиндексирована. Тот же запрос для 1 миллиона записей при запуске с базой данных в SSMS занял ~2-4 минуты.