powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сравни две гиганские таблицы на двух серверах?
9 сообщений из 9, страница 1 из 1
Как сравни две гиганские таблицы на двух серверах?
    #39813147
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, есть два сервера.

И в каждом есть огроменная таблица (300+ Гб).

Надо как-то сравнить эти две траблицы по одному текстовому полю (по полю есть индекс).





Подскажите как это сделать?




Запрос с дб_линком выполняется бесконечно долго:

Код: sql
1.
2.
3.
SELECT id_text
FROM данные_из_дб_линк 
WHERE  id_text NOT IN (SELECT id_text FROM таблица_локальная)
...
Рейтинг: 0 / 0
Как сравни две гиганские таблицы на двух серверах?
    #39813218
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так, если таблмцы гиганские нафига ж тогда делать такое

Код: sql
1.
2.
3.
SELECT id_text
FROM данные_из_дб_линк 
WHERE  id_text NOT IN (SELECT id_text FROM таблица_локальная)



Можно просто посчитать к-во , да и вместо NOT IN использовать EXISTS, например
...
Рейтинг: 0 / 0
Как сравни две гиганские таблицы на двух серверах?
    #39813915
varlamovvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ,

hash посчитать?
ИМХО основные тормоза при передаче данных по сети, поэтому надо как-то заставить запросы по таблицам выполняться каждый на своем серваке.
Может быть еще перетащить файл индекса и ( не уверен что возможно ) сравнить сожержимое индексов какой-то утилиткой
...
Рейтинг: 0 / 0
Как сравни две гиганские таблицы на двух серверах?
    #39813981
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УткъДобрый день, есть два сервера.

И в каждом есть огроменная таблица (300+ Гб).

Надо как-то сравнить эти две траблицы по одному текстовому полю (по полю есть индекс).





Подскажите как это сделать?




Запрос с дб_линком выполняется бесконечно долго:

Код: sql
1.
2.
3.
SELECT id_text
FROM данные_из_дб_линк 
WHERE  id_text NOT IN (SELECT id_text FROM таблица_локальная)



А вообще вы бы планы показали чтоли.
И 20 раз уже писалось (и кажется вам тоже что not in в postresql не используют кроме случая not in (1,2,3) и подобных.
Тем более что 300gb через db_link не пролезет нормально никогда.

1)вам надо fdw
2)какая толщина канала между серверами? (ожидайте около 600gb траффика)
3)переделайте запрос на fdw + not exists и выдайте очень много work_mem на том сервере где запрос выполняется (гигабайт 4-16 если есть возможность)
4)в любом случае если у вас сетка не 10+gbit - это будут часы (а то и сутки).

Костыльный метод - dump таблицы на одном сервере восстановление на другом под другим названием в туже базу где сверять и сверить локальным запросом (если сеть медленная это может быть единственным рабочим вариантом).
...
Рейтинг: 0 / 0
Как сравни две гиганские таблицы на двух серверах?
    #39813997
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

fdw нефига не серебрянная пуля. я как то проверил create table a as select * from fdw_a; -- по одной оно записи фетчит.
пайп
Код: plaintext
> psql ... copy ... 2 stdout |psql... copy ... from stdin 
кроет его порядков на ..дцать при суб-террабайтах.

тут тоже можно попытаться быстро втянуть с одной стороны на сторону исполнения :
~
Код: sql
1.
2.
with u(id) as (select unnest( (select a from dblink(conn, 'SELECT array(SELECT id from fdw_tab)') as t (a bigint[]) ) ) )
select id  from u where not exists (select 1 from local_tab l where l.id = u.id)


, вот только от попыток хеш--джойниться проверить. а то будет больно
...
Рейтинг: 0 / 0
Как сравни две гиганские таблицы на двух серверах?
    #39814465
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ,

может считать хэш от поля и уже его юзать? вероятно именно только его можно гнать по сетке...
либо как тут уже прозвучало - перегон всей базы и локально уже компарэ...


(круглый)
...
Рейтинг: 0 / 0
Как сравни две гиганские таблицы на двух серверах?
    #39814478
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под "сравнить" вы понимаете "найти значения в своей таблице, отсутствующие в удаленной"?
...
Рейтинг: 0 / 0
Как сравни две гиганские таблицы на двух серверах?
    #39814501
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка:
qwwqя как то проверил create table a as select * from fdw_a; -- по одной оно записи фетчит.

припоминаю, что соврал. гнал инсертом селект всего с фдв в только-что созданную пустую с индексами. задача на много дней и недель. т.к. на удаленном идёт фетч по одной, а на целевом -- вставка по одной с перестроением индексов после каждого фетча. невзлетело
...
Рейтинг: 0 / 0
Как сравни две гиганские таблицы на двух серверах?
    #39814720
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqпоправка:
qwwqя как то проверил create table a as select * from fdw_a; -- по одной оно записи фетчит.

припоминаю, что соврал. гнал инсертом селект всего с фдв в только-что созданную пустую с индексами. задача на много дней и недель. т.к. на удаленном идёт фетч по одной, а на целевом -- вставка по одной с перестроением индексов после каждого фетча. невзлетело

Странно что на удаленном сервере fetch по одной идет.
По умолчанию - блоками по 100... если быстрая сеть я бы для такой задачи поставил бы блоки в 10000-100000.
Настройки см https://www.postgresql.org/docs/11/postgres-fdw.html
в части
fetch_size
This option specifies the number of rows postgres_fdw should get in each fetch operation. It can be specified for a foreign table or a foreign server. The option specified on a table overrides an option specified for the server. The default is 100.
Может вы для какой то другой задачи поставили в настройках сервера или таблицы размер fetch_size в 1?

Но поскольку limit на сторону удаленную сторону не пробрасывается - там начинаются проблемы наоборот - а именно лишние записи могут по сети ездить.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сравни две гиганские таблицы на двух серверах?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]