0

У меня есть пакет SSIS, который экспортирует 2,5 ГБ данных, содержащих 10 миллионов записей в Sql Server Database, в которой есть 10 разделов, включая PRIMARY FILE GROUP.Есть ли религия для "ROW PER BATCH" И "MAX INSERT COMMIT SIZE" В пакетах SSIS?

Перед Изменения по умолчанию Макс Вставить Commit размера т.е. «2147483647» и Row за партию .It принимает 7 минут для завершенной трансформации с быстрой опцией нагрузки.

Но после того, как вы сделали несколько приличных значений с помощью какой-то формулы, выполнение было выполнено всего за 2 минуты.

FYI- DefaultMaxBufferRows & DefaultMaxBufferSize было значение по умолчанию в обоих scenorio т.е. 10000 и 10 МБ соответственно.

Для расчета Макс Вставить Commit размер & Row на партию Ниже calucation используются.

1) Рассчитанная длина записей из передаваемого источника. который составляет около 1038 байт.

CREATE TABLE [dbo].[Game_DATA2](
    [ID] [int] IDENTITY(1,1) NOT NULL, -- AUTO CALCULATED 
    [Number] [varchar](255) NOT NULL, -- 255 bytes 
    [AccountTypeId] [int] NOT NULL, -- 4 bytes 
    [Amount] [float] NOT NULL,-- 4 bytes 
    [CashAccountNumber] [varchar](255) NULL, -- 255 bytes 
    [StartDate] [datetime] NULL,-- 8 bytes 
    [Status] [varchar](255) NOT NULL,-- 255 bytes 
    [ClientCardNumber] [varchar](255) NULL -- 255 bytes 
) 

2) Строки в расчете = количество_байтов/байт на запись = 32767/1038 = 32 прибл.

3) Макс вставка фиксации размер = размер packate * количество сделки = 32767 * 100 = 3276700 (Packate размер и номер транзакции являются переменными могут изменяться в соответствии с требованием)

Вопрос:

  • Есть ли какая-либо релевантность строк в каждом пакете и максимальном размере фиксации вставки? Поскольку в архиве нет информации, упомянутой в архиве article для настройки DFT (DATA FLOW TASK).

  • Эти конфигурации работают вместе с DefaultBuffermaxzie и
    DefualtBuffermaxrows? Если да, то как?

ответ

1

Эти параметры относятся только к назначению DFT OLE DB. OLE DB Destination выдает команду insert bulk. Эти два параметра контролировать его следующим образом:

  • Максимальный размер вставки фиксации - управляет тем, как много данных, вставленные в одном пакете. Итак, если у вас установлено MICS 5000 и у вас 9000 строк, и вы столкнулись с ошибкой в ​​первых результатах 5000, вся партия 5000 будет отброшена. MISC соответствует аргументу BATCHSIZE в команде transact-sql BULK INSERT.
  • Строки в партии - всего лишь подсказка к оптимизатору запросов. Значение этого параметра должно быть установлено на фактическое ожидаемое количество строк. RPB соответствует аргументу ROWS_PER_BATCH команде BULK INSERT transact-sql.
    Задание значения для MICS будет иметь несколько эффектов. Каждая партия копируется в журнал транзакций, что приведет к быстрому ее росту, но дает возможность резервировать этот журнал транзакций после каждой партии.Кроме того, наличие большой партии негативно влияет на память, если у вас есть индексы в целевой таблице, и если вы не используете блокировку таблицы, у вас может быть больше блокировки.

MS Article по этой команде.

DefaultBuffermaxsize и DefualtBuffermaxrows управляет ОЗУ управления буфером внутри самого ДПФ, и не имеет никаких помех вариантов, упомянутых выше.

+0

Итак, какое значение RPB для файла имеет фактическое ожидаемое количество строк в 10 миллионов. Может быть, мы используем формулу выше? Или это метод ** try и error ** base. –

+0

@HarsimranjeetSingh, оставив RPB по умолчанию, устанавливает его в фактический номер строки в insert, OLE DB делает это за вас. Вы можете установить ограничения, описанные выше. В вашем случае я сначала играл бы с MICS. – Ferdipux

0

Dear Harsimranjeet Singh;

В основе моего личного опыта, ROWS_PER_BATCH определить количество строк в пакете, что oledb_destination должен Получать из компонента ДПФ, тогда как DefualtBuffermaxrows определить размер bacth ДПФ, поэтому DefualtBuffermaxrows это зависит от спецификации сервера SSIS и ROWS_PER_BATCH это зависит, чтобы сервер назначения и каждый из них должен быть установлен с их условиями.

Также Maximum_Insert_Commit_Size определяет количество записей, когда он набирает номер, тогда он записывается в файл журнала и совершается; уменьшая это число, увеличивает количество ссылок на журнал, и это плохо, но это приводит к тому, что MSDB (система db) не накачивается, и это очень хорошо для повышения производительности.

Другим моментом является отношение между DefualtBuffermaxrows и DeafultBufferSize, которое должно быть установлено вместе. DefualtBuffermaxrows, умноженный на размер каждой записи, должен быть приблизительно равен DeafultBufferSize, если это больше, чем ssis, уменьшите это, чтобы достичь этого, и если это меньше, чем размер минимального буфера, а затем увеличьте его, чтобы коснуться минимального размера буфера. Эта операция серьезно снижает производительность вашего пакета.

Удачи!