#performance #ssis #bulkinsert
#Производительность #ssis #bulkinsert
Вопрос:
Для источника: OLE DB Source — команда Sql
SELECT -- The destination table Id has IDENTITY(1,1) so I didn't take it here
[GsmUserId]
,[GsmOperatorId]
,[SenderHeader]
,[SenderNo]
,[SendDate]
,[ErrorCodeId]
,[OriginalMessageId]
,[OutgoingSmsId]
,24 AS [MigrateTypeId] --This is a static value
FROM [MyDb].[migrate].[MySource] WITH (NOLOCK)
К месту назначения: назначение OLE DB
Для вставки 1.000.000 данных требуется 5 или более минут. Я даже снял флажок Check Constraints
Затем, с теми же конфигурациями SSIS, я хотел протестировать его с другой таблицей, точно такой же, как таблица назначения. Итак, я заново создаю целевую таблицу (с теми же ограничениями, кроме внутренних данных) и называю как dbo.MyDestination
.
Но для обработки одних и тех же данных с тем же объемом данных требуется около 30 секунд или меньше. Почему это значительно быстрее с тестовой таблицей, а не с исходной таблицей? Это потому, что исходная таблица уже содержит 107.000.000 данных?
Ответ №1:
Проверьте наличие индексов / триггеров / ограничений и т.д. в вашей целевой таблице. Это может значительно замедлить работу.
Проверьте размер пакета OLE DB connection Manager, установите его соответствующим образом, вы можете следовать этой статье, чтобы установить для него правильное значение.
Если вы знакомы с профилировщиком SQL Server, используйте его, чтобы получить больше информации, особенно о том, что происходит, когда вы используете воссозданную таблицу для вставки данных в исходную таблицу.
Комментарии:
1. ДА! ДА! Предоставленная вами статья определенно помогла! Спасибо!
2. Я рад, что это помогло!