Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Копирование таблицы из одной СУБД в другую  [new]
warren82
Member

Откуда:
Сообщений: 39
Добрый день!
Копирую таблицу из SQL Server в PostgreSQL порциями в несколько потоков, C+SQL. Каждый поток выполняет в цикле получение границ новой порции и копирование данных порции в таблицу-приемник.
Данные в таблице-источнике модифицируются в процессе, заблокировать таблицу нельзя.
Не устраивает производительность этого процесса, но другой алгоритм придумать пока не получается.
Как бы вы это делали?
Возможно, есть литература/статьи в тему?
Открытые реализации, в которых можно подсмотреть?
Возможно, есть какие-то встроенные в СУБД средства?
Любая информация может помочь.
17 ноя 21, 13:10    [22396937]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
uaggster
Member

Откуда:
Сообщений: 1155
warren82, как именно вы производите копирование?
Имеется ввиду чтение с постгресса и вставку на MSSQLSERVER?
17 ноя 21, 13:16    [22396943]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
Агрох
Member

Откуда:
Сообщений: 135
MS SQL поддерживает подключение к базам PostgreSQL. Так и ищем: "Подключение к источнику данных PostgreSQL" в документации к SQL Server.
Так же есть интеграционные средства, например, сходу нашёл на хабре описание настройки TDS FDW.

Сообщение было отредактировано: 17 ноя 21, 13:19
17 ноя 21, 13:18    [22396945]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
komrad
Member

Откуда:
Сообщений: 5910
warren82
Добрый день!
Копирую таблицу из SQL Server в PostgreSQL порциями в несколько потоков, C+SQL. Каждый поток выполняет в цикле получение границ новой порции и копирование данных порции в таблицу-приемник.
Данные в таблице-источнике модифицируются в процессе, заблокировать таблицу нельзя.


посмотрите ответ
https://www.sqlservercentral.com/forums/topic/replicating-data-from-ms-sql-server-2012-to-postgresql

судя по описанию ваших данных (обновление данных, добавление новых) я бы попробовал репликацию.

какой размер таблицы-источника?
какая частота обновления требуется на приемнике?

Сообщение было отредактировано: 17 ноя 21, 13:45
17 ноя 21, 13:42    [22396969]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9155
warren82,

"копирование данных порции в таблицу-приемник" смысла нет делать в несколько потоков, так как вставка выполняется в один поток.
17 ноя 21, 14:08    [22396989]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
andy st
Member

Откуда:
Сообщений: 899
warren82
Добрый день!
Копирую таблицу из SQL Server в PostgreSQL порциями в несколько потоков, C+SQL. Каждый поток выполняет в цикле получение границ новой порции и копирование данных порции в таблицу-приемник.
Данные в таблице-источнике модифицируются в процессе, заблокировать таблицу нельзя.
Не устраивает производительность этого процесса, но другой алгоритм придумать пока не получается.
Как бы вы это делали?
Возможно, есть литература/статьи в тему?
Открытые реализации, в которых можно подсмотреть?
Возможно, есть какие-то встроенные в СУБД средства?
Любая информация может помочь.

Начните с того, что определите какая часть вашей "качайки" тормозит. Если запросы к таблице в SQL Server, то описывайте DDL+DML в посте - местное население подскажет что править: руки, гены или код. Если тормоза на вставке в PostgreSQL, то, наверное, имеет смысл обратиться в соответствующий раздел форума
17 ноя 21, 14:57    [22397015]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
uaggster
Member

Откуда:
Сообщений: 1155
Владислав Колосов
warren82,

"копирование данных порции в таблицу-приемник" смысла нет делать в несколько потоков, так как вставка выполняется в один поток.

Да щас, конечно.
С чего вы взяли, что у них вставка в таблицу с автоинкрементным ключом, на котором OPTIMIZE_FOR_SEQUENTIAL_KEY off?
17 ноя 21, 15:46    [22397048]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9155
uaggster,

с чего Вы взяли, что постгресс вставляет в несколько потоков?
17 ноя 21, 16:32    [22397087]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
warren82
Member

Откуда:
Сообщений: 39
uaggster,
Наоборот, чтение с SQL Server, запись в PostgreSQL, но не суть.
Данные получаю через SELECT, вставляю через COPY.
Или вы про интерфесы, через которые работаю с СУБД?
17 ноя 21, 16:35    [22397088]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
warren82
Member

Откуда:
Сообщений: 39
Агрох,

Спасибо, попробую порыться в исходниках.
17 ноя 21, 16:35    [22397089]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
warren82
Member

Откуда:
Сообщений: 39
komrad,

У меня задача ускорить копирование первоначальных данных, а не изменений. Не нашел, как в CDC сделать первоначальный снимок таблицы, который можно перетащить на другую СУБД?
Таблица может быть большая (миллиарды записей).
17 ноя 21, 16:41    [22397097]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
uaggster
Member

Откуда:
Сообщений: 1155
Владислав Колосов
uaggster,

с чего Вы взяли, что постгресс вставляет в несколько потоков?

А, пардон. Думал, что он читает с постргресса, и вставляет на MSSQLSERVER.
17 ноя 21, 16:50    [22397105]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9155
warren82,

если не постгрессе нет секционирования, то придется сделать загрузку в несколько таблиц при параллельном выполнении.
17 ноя 21, 16:52    [22397106]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
andy st
Member

Откуда:
Сообщений: 899
warren82,
для быстрой заливки данных рсубд в принципе везде одинаковые рекомендации - на получателе выпилить все ключи, ограничения, индексы, триггеры. если есть возможность включить опцию типа delayed durability в SQL Server (в pg такое есть. это развлечения со стороны одминов)
в copy для pg вроде была опция загрузки данных из бинарного вида. обещали что мол быстрее,чем текст. правда бинарный вид - отдельная история, как отдельная история и то, что он запросто может поменяться в следующей версии.
были в pg еще какие-то средства оффлайн-загрузки данных, но хз подойдут тут или нет
17 ноя 21, 17:18    [22397114]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4434
warren82
Агрох,

Спасибо, попробую порыться в исходниках.


В "исходниках" чего вы собрались "порыться"?
17 ноя 21, 17:24    [22397119]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблицы из одной СУБД в другую  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 4434
warren82
komrad,

У меня задача ускорить копирование первоначальных данных, а не изменений. Не нашел, как в CDC сделать первоначальный снимок таблицы, который можно перетащить на другую СУБД?
Таблица может быть большая (миллиарды записей).


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

Я когда-то делал приблизительно так:
рабочая таблица, в ней флажки, приложение читает от флажка до флажка порцию и пишет куда-то, при изменении (вставке, апдейте, удалении) флажки изменяются, все работает через брокер. Переносимые данные должны быть "идемпотентны".
Да, предположим, пьяный администратор рестартонул сервер, вырубилось электричество и т.д., все должно продолжить работать.
17 ноя 21, 17:30    [22397124]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить