Производительность служб SSIS по сравнению с OpenQuery со связанным сервером от SQL Server до Oracle - PullRequest
4 голосов
/ 28 марта 2019

У нас есть связанный сервер (OraOLEDB.Oracle), определенный в среде SQL Server.Oracle 12c, SQL Server 2016. На SQL Server также установлен клиент Oracle (64-разрядный).

При извлечении данных из Oracle (простой запрос, получение всех столбцов из строки 3M, довольно узкой таблицы,с varchars, датами и целыми числами) мы видим следующие показатели производительности:

sqlplus: выберите из Oracle> Файл ОС на самом SQL Server менее чем 2 000 строк / сек

SSMS: вставьтев таблицу SQL Server выберите из Oracle, используя OpenQuery (передача в Oracle, то есть удаленное выполнение), менее 2 000 строк / сек

Инструмент экспорта / импорта SQL (по сути, SSIS): вставка в таблицу SQL Server,использование OLEDB Oracle для источника и OLEDB SQL Server для цели со скоростью более 30 тыс. строк в секунду

Поиск путей повышения пропускной способности с использованием OpenQuery / OpenResultSet для обеспечения соответствия пропускной способности служб SSIS.Возможно, где-то есть какой-то буфер / флаг, позволяющий добиться того же самого?

Пожалуйста, сообщите ...

Спасибо!

- Алекс

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Я думаю, что есть много способов повысить производительность запроса INSERT, я предлагаю прочитать следующую статью, чтобы получить больше информации о производительности загрузки данных.

Существует один способ, который вы можете попробовать, который сводит к минимуму ведение журнала с помощью кластерного индекса.проверьте ссылку ниже для получения дополнительной информации:

0 голосов
/ 28 марта 2019

Возможно, где-то есть некоторый буфер / флаг, позволяющий добиться того же самого?

Вероятно, ищем FetchSize параметр

FetchSize - указывает количество строк, которые провайдер будет выбирать время (выборочный массив). Он должен быть установлен на основе размера данных и время отклика сети. Если значение установлено слишком высоким, то это может привести к увеличению времени ожидания во время выполнения запроса. Если значение установлено слишком низким, то это может привести к еще большему числу раундов поездки в базу данных. Допустимые значения: от 1 до 429 496 и 296. по умолчанию 100.

например

exec sp_addlinkedserver N'MyOracle', 'Oracle', 'ORAOLEDB.Oracle', N'//172.16.8.119/xe', N'FetchSize=2000', ''

См., Например, https://blogs.msdn.microsoft.com/dbrowne/2013/10/02/creating-a-linked-server-for-oracle-in-64bit-sql-server/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...