Планировщик запросов, выбирающий разные планы для идентичных запросов - PullRequest
0 голосов
/ 14 июня 2019

Мы запускаем производственную базу данных Postgresql в Amazon RDS. Уже два дня мы наблюдаем значительное снижение производительности базы данных. После первоначального исследования мы заметили, что планировщик запросов использует разные планы для идентичных запросов.

выберите a_id, b_id, create_date ИЗ таблицы1 ГДЕ create_date МЕЖДУ '2019-04-14T16: 40: 11.165 + 0000' И '2019-05-13T16: 40: 11.165 + 0000' И c_id = 49639;

ПЛАН ЗАПРОСА

Сканирование индекса с использованием table1_c_id_created_date_idx для table1 (стоимость = 0.57..790.59 строк = 197 ширина = 24) Индекс Cond: ((c_id = 49639) AND (созданная_дата> = '2019-04-14 09: 40: 11.165-07' :: временная метка с часовым поясом) И (созданная_дата <= '2019-05-13 09:40: 11.165-07 ':: временная метка с часовым поясом)) (2 ряда) </p>

Но тот же запрос с другим диапазоном дат имеет другой план запроса

выберите a_id, b_id, create_date ИЗ таблицы1 ГДЕ create_date МЕЖДУ '2019-05-14T16: 40: 11.165 + 0000' И '2019-06-13T16: 40: 11.165 + 0000' AND c_id = 49639;

ПЛАН ЗАПРОСА

Сканирование индекса с использованием table1_created_date_idx для table1 (стоимость = 0.57..8.59 строк = 1 ширина = 24) Индекс Cond: ((созданный_дата> = '2019-05-14 09: 40: 11.165-07' :: временная метка с часовым поясом) И (созданный_датчик <= '2019-06-13 09: 40: 11.165-07' :: временная метка с часовым поясом)) Фильтр: (c_id = 49639) (3 ряда) </p>

Для обоих диапазонов дат существует одинаковое количество записей.

У нас есть параметры auto_vacuum и default_statistics_target, установленные в базе данных.

Запросите ваши комментарии по вышеуказанному вопросу и предложите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...