|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
Добрый день, есть два сервера. И в каждом есть огроменная таблица (300+ Гб). Надо как-то сравнить эти две траблицы по одному текстовому полю (по полю есть индекс). Подскажите как это сделать? Запрос с дб_линком выполняется бесконечно долго: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 17:31 |
|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
Ну, так, если таблмцы гиганские нафига ж тогда делать такое Код: sql 1. 2. 3.
Можно просто посчитать к-во , да и вместо NOT IN использовать EXISTS, например ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 20:59 |
|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
Уткъ, hash посчитать? ИМХО основные тормоза при передаче данных по сети, поэтому надо как-то заставить запросы по таблицам выполняться каждый на своем серваке. Может быть еще перетащить файл индекса и ( не уверен что возможно ) сравнить сожержимое индексов какой-то утилиткой ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 10:49 |
|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
УткъДобрый день, есть два сервера. И в каждом есть огроменная таблица (300+ Гб). Надо как-то сравнить эти две траблицы по одному текстовому полю (по полю есть индекс). Подскажите как это сделать? Запрос с дб_линком выполняется бесконечно долго: Код: sql 1. 2. 3.
А вообще вы бы планы показали чтоли. И 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 таблицы на одном сервере восстановление на другом под другим названием в туже базу где сверять и сверить локальным запросом (если сеть медленная это может быть единственным рабочим вариантом). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 12:44 |
|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
Maxim Boguk, fdw нефига не серебрянная пуля. я как то проверил create table a as select * from fdw_a; -- по одной оно записи фетчит. пайп Код: plaintext
тут тоже можно попытаться быстро втянуть с одной стороны на сторону исполнения : ~ Код: sql 1. 2.
, вот только от попыток хеш--джойниться проверить. а то будет больно ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2019, 13:05 |
|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
Уткъ, может считать хэш от поля и уже его юзать? вероятно именно только его можно гнать по сетке... либо как тут уже прозвучало - перегон всей базы и локально уже компарэ... (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 10:37 |
|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
Под "сравнить" вы понимаете "найти значения в своей таблице, отсутствующие в удаленной"? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 10:51 |
|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
поправка: qwwqя как то проверил create table a as select * from fdw_a; -- по одной оно записи фетчит. припоминаю, что соврал. гнал инсертом селект всего с фдв в только-что созданную пустую с индексами. задача на много дней и недель. т.к. на удаленном идёт фетч по одной, а на целевом -- вставка по одной с перестроением индексов после каждого фетча. невзлетело ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 11:28 |
|
Как сравни две гиганские таблицы на двух серверах?
|
|||
---|---|---|---|
#18+
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 на сторону удаленную сторону не пробрасывается - там начинаются проблемы наоборот - а именно лишние записи могут по сети ездить. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2019, 16:14 |
|
|
start [/forum/topic.php?fid=53&msg=39813997&tid=1995202]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 166ms |
0 / 0 |