Выгрузка данных из SQL Server в PostgreSQL. Ускорение в 800 раз

Выгрузка данных из SQL Server в PostgreSQL. Ускорение в 800 раз

Автор: @QuickJoey

В процессе развития проекта периодически появляется необходимость обмена данными между серверами баз данных. Предположим, у нас есть источник данных в виде SQL Server и удалённый PostgreSQL сервер, на котором эти данные должны оказаться. После добавления удалённого сервера в качестве linked server, можно делать запросы вида:

Проблема в том, что такие запросы выполняются очень долго. Если перед нами стоит задача выгрузить десятки и сотни тысяч записей, то время на выполнение стремится к бесконечности. Рассмотрим два с половиной способа вставить данные в таблицу на linked server и сравним время выполнения.

Создание нового linked server:

Чтобы создать linked server, у вас уже должен быть источник данных ODBC. В моём случае имя linked server и источника ODBC совпадают.

Способ номер 1

Пусть на удалённой машине есть простая таблица:

Посмотрим на время выполнения простого запроса:

В моём случае это заняло 2 минуты 52 секунды. Примерно 6 записей в секунду. Небыстро. Для справки: удалённая машина находится на канале около 5 Мбит/сек и средним пингом 16 мс.

Способ номер 2

В случае с удалённым сервером SQL Server позволяет использовать конструкцию вида:

Чтобы это было возможным, в настройках Linked Server должны быть разрешены удалённые вызовы процедур (RPC = remote procedure call). В этом случае запрос выполняется непосредственно на удалённой машине.
Посмотрим, как это скажется на времени выполнения:

Время выполнения 17.25 секунд, уже лучше, но попробуем уменьшить это время.

Способ номер 2.5

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

Запрос будет представлять из себя длинную строку вида:

Такой запрос, в тех же условиях выполнился за 217 миллисекунд. Что примерно в 800 раз быстрее первоначального варианта.

P. S. Данные для вставки в таблицу специально упрощены.

Запись опубликована в рубрике Полезно и интересно с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: