|
use index foreign table
|
|||
---|---|---|---|
#18+
Ребята, подскажите, не нашел в доках. Ситуация такая есть таблица T1 с полем date на которое навесил индекс date_idx select * from schema.T1 where c_date>current_date использует индекс date_idx Цепляю эту таблицу как внешнюю на другом сервере Этот же запрос уже индекс не использует. select * from foreign_schema.T1 where c_date>current_date Где можно про это почитать подскажите пожалуйста! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 14:26 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
kliff, Код: sql 1.
либо другая константа. current_date не константа и автоматически в константу не переписывается. Вопрос не в индексе, а в том, какой запрос отправляет fdw. В explain (verbose) это будет видно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 14:47 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Melkij, date 'now' это тоже не константа. Это же вычисляемое значение!? абсолютно такая же Дело в в неиспользовании индексов. Сталкиваюсь уже не первый раз поэтому это точно. Вопрос почему и что можно сделать. Один и тот же запрос План первого запроса Buffers: shared hit=5 read=2 -> Index Scan using idx_date on T1 (cost=0.43..576.83 rows=18119 width=44) (actual time=16.097..16.101 rows=10 loops=1) Index Cond: (c_date > '2021-04-09'::date) Buffers: shared hit=5 read=2 Planning time: 0.981 ms Execution time: 16.134 ms План второго -> Foreign Scan on T1 (cost=100.00..140.11 rows=401 width=44) (actual time=13029.820..81112.138 rows=10 loops=1) Filter: (c_date > '2021-04-09'::date) Rows Removed by Filter: 8215940 Planning Time: 1.345 ms Execution Time: 81159.278 ms ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 17:42 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
kliff, Таки с c_date > date 'now' работает по индексу или нет при fdw? А с c_date > '2021-04-09'::date тоже через fdw? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 18:03 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
kliff Melkij, date 'now' это тоже не константа. Это же вычисляемое значение!? абсолютно такая же Именно что константа и именно абсолютно не такая же, как current_date. Я ведь на всякий случай даже проверил прежде чем отправить сообщение. Повторю: посмотрите какой запрос отправляет fdw. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 18:09 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Maxim Boguk kliff, Таки с c_date > date 'now' работает по индексу или нет при fdw? А с c_date > '2021-04-09'::date тоже через fdw? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru в первом посте я написал какой первый, а какой второй запрос. А во втором посте привел их планы. В плане видно, что не работает по индексу. Хоть так date 'now' хоть так '2021-04-09'::date ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 19:08 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Melkij kliff Melkij, date 'now' это тоже не константа. Это же вычисляемое значение!? абсолютно такая же Именно что константа и именно абсолютно не такая же, как current_date. Я ведь на всякий случай даже проверил прежде чем отправить сообщение. Повторю: посмотрите какой запрос отправляет fdw. ну планы и время идентичные почти current_date Index Cond: (date_end > ('now'::cstring)::date) date 'now' Index Cond: (date_end > '2021-04-09'::date) --какой запрос отправляет fdw fdw а где это посмотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 19:12 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
kliff Maxim Boguk kliff, Таки с c_date > date 'now' работает по индексу или нет при fdw? А с c_date > '2021-04-09'::date тоже через fdw? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru в первом посте я написал какой первый, а какой второй запрос. А во втором посте привел их планы. В плане видно, что не работает по индексу. Хоть так date 'now' хоть так '2021-04-09'::date Покажите 1)explain (verbose) для случая с '2021-04-09'::date 2)покажите какой тип данных у поля c_date (а то всякое бывает) 3)use_remote_estimate включен на fdw? 4)analyze таблицы делали (на удаленной стороне) -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 19:14 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
kliff --какой запрос отправляет fdw fdw а где это посмотреть? Я же сразу написал: в explain (verbose) это будет видно И какая версия базы, где стоит fdw? И postgres_fdw ли это вообще или какой-то из generic fdw? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 21:59 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Melkij, да, стоит postgres_fdw. Версия PG 12.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 08:09 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Maxim Boguk, делаю лимит 10, иначе запрос висит вечно 1) Limit (cost=100.00..100.99 rows=10 width=4) (actual time=5530.590..36439.849 rows=10 loops=1) Output: id -> Foreign Scan on t1 (cost=100.00..196.06 rows=975 width=4) (actual time=5530.588..36439.842 rows=10 loops=1) Output: id Filter: (c_date > '2021-04-09'::date) Rows Removed by Filter: 8215940 Remote SQL: SELECT id, c_date FROM t1 Planning Time: 1.542 ms Execution Time: 36517.025 ms 2)timestamptz NOT NULL, 3)после создания сервера делал ALTER SERVER db_srv_load OPTIONS (ADD use_remote_estimate 'true'); 4)да ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 08:42 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
kliff Maxim Boguk, 2)timestamptz NOT NULL, Блин вы же выше написали "таблица T1 с полем date" а там дрова лежат как я и ожидал (в смысле timestamptz) потому и не работает и работать по другому не может... потому что приведение timestamptz к дате - операция неоднозначная и зависит от настроек сервера и клиента. поэтому одно и тоже условие может на разных серверах разное давать и поэтому fdw будет фильтровать на получателе. Пример Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
См на то что ::date дает разный результат на одном входе при разных настройках timezone. По научному - приведение timestamptz к date - не immutable и как любая не immutable функция в условии не может быть проброшена на удаленную сторону fdw. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 17:29 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Maxim Boguk, Огромное спасибо! Все понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2021, 19:46 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Maxim Boguk, Максим, не подскажете еще Есть таблица с индексом по полю n_id_form_version int4 NOT NULL select * from ft_frm where n_id_form_version = 20577291 Запрос на самом сервере Index Scan using ft_frm_form_id on ft_frm fd (cost=0.71..14918.00 rows=613688 width=78) (actual time=0.076..8.722 rows=35679 loops=1) Output: n_id, n_id_form_version, n_id_left_header, n_id_top_header, n_val, s_val, d_val, n_err, id_row, n_id_new Index Cond: (fd.n_id_form_version = 20577291) Planning time: 19.210 ms Execution time: 9.983 ms Запрос через fdw Foreign Scan on ft_frm fd (cost=100.71..27291.76 rows=613688 width=78) (actual time=1.478..160.303 rows=35679 loops=1) Output: n_id, n_id_form_version, n_id_left_header, n_id_top_header, n_val, s_val, d_val, n_err, id_row, n_id_new Remote SQL: SELECT n_id, n_id_form_version, n_id_left_header, n_id_top_header, n_val, s_val, d_val, n_err, id_row, n_id_new FROM ft_frm WHERE ((n_id_form_version = 20577291)) Planning Time: 44.055 ms Execution Time: 161.871 ms Очевидно индекс используется в обоих случаях, иначе бы запрос просто умер, там сотни млн записей, но разница во времени выполнения конечно астрономическая. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 13:49 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
kliff, 1)сравните время выполнения на простом запросе select 1 локально и через fdw 2)измерьте сетевую задержку между этими двумя серверами с базами 3)сделайте на стороне сервера источника тестовую базу и с нее fdw на тут таблицу что тестируете... и посмотрите на времена выполнения там - это даст вам результат максимально чистый от скорости сети между 2мя серверами 4)посмотрите на размер ответа от того запроса что вы запускали (например через \copy в файл его) и измерьте за какое время он (файл) у вас между серверами передается через тот же scp или rsync дальше если все еще будет не понятно - пришлите все эти результаты сюда... вдруг у вас действительно нетипичная проблема (КРАЙНЕ СОМНИТЕЛЬНО на самом деле). PS: форум все таки не служба поддержки продукта )). PPS: разница меньше 10 раз... никто не обещал что FDW бесплатный тем более при передаче по сети... так что это не астрономическая. Но причины вполне можно изучить и часто ускорить до разницы не более чем в пару раз. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 15:05 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Maxim Boguk, Большое спасибо за ответ. Я не пытаюсь сделать, чтоб мне все разжевали и на тарелку положили, просто не всегда можно предположить, что ответ потребует много временных затрат. В данном случае думал будет в духе "смотри в сторону .." или "для fdw это нормально". Конечно развернутые ответы это круто, огромное спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 07:19 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
Maxim Boguk, продолжу исследовать тему, хотелось бы в итоге сделать для себя более менее однозначные выводы. Вообще надо 5ТБ данных переложить из одной БД в другую БД с абсолютно другой схемой данных на другом сервере и может оказаться, что fdw вообще плохой вариант для этих целей. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 07:21 |
|
use index foreign table
|
|||
---|---|---|---|
#18+
kliff Maxim Boguk, Большое спасибо за ответ. Я не пытаюсь сделать, чтоб мне все разжевали и на тарелку положили, просто не всегда можно предположить, что ответ потребует много временных затрат. В данном случае думал будет в духе "смотри в сторону .." или "для fdw это нормально". Конечно развернутые ответы это круто, огромное спасибо. С любыми проблемами не бывает однозначных ответов... всегда есть десяток возможных причин почему так и почему не так... И сразу сказать в чем проблема или все нормально или нет - нельзя. С той же c_date>current_date все легко решается указанием вместо даты полного timestamptz чтобы не было приведений типов и было понятно в какой именно timezone сравниваем типа c_date>'2021-04-12 00:00:00+03'::timestamptz -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 10:52 |
|
|
start [/forum/topic.php?fid=53&msg=40061139&tid=1994088]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 256ms |
total: | 391ms |
0 / 0 |