Один и тот же запрос на 2 одинаковых БД - разные планы выполнения - PullRequest
0 голосов
/ 25 февраля 2019

Я перемещаю базу данных Postgres на другой сервер.После импорта данных (с помощью pg_dump) я проверил производительность и обнаружил, что один и тот же запрос приводит к различным планам запросов для двух БД (учитывая, что версии СУБД, структура БД и сами данные одинаковы):

запрос:

explain analyse select * from common.composite where id = 0176200005519000087

план запроса производственной БД:

Index Scan using composite_id_idx on composite  (cost=0.43..8.45 rows=1 width=222) (actual time=0.070..0.071 rows=1 loops=1)
  Index Cond: (id = '176200005519000087'::bigint)
Planning time: 0.502 ms
Execution time: 0.102 ms

для нового:

Bitmap Heap Scan on composite  (cost=581.08..54325.66 rows=53916 width=76) (actual time=0.209..0.210 rows=1 loops=1)
  Recheck Cond: (id = '176200005519000087'::bigint)
  Heap Blocks: exact=1
  ->  Bitmap Index Scan on composite_id_idx  (cost=0.00..567.61 rows=53916 width=0) (actual time=0.187..0.187 rows=1 loops=1)
        Index Cond: (id = '176200005519000087'::bigint)
Planning time: 0.428 ms
Execution time: 0.305 ms

Очевидно, что естьиндекс btree для идентификатора в обеих БД.Насколько я мог судить, новый использует почему-то битовую карту, в то время как btree был импортирован из дампа.Это приводит к огромной задержке (до 30 раз) в сложных запросах.

Что-то не так при импорте индекса / зависимостей или есть способ указать, какие индексы должен использовать планировщик?

Спасибо.

...