Мы запускаем производственную базу данных 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, установленные в базе данных.
Запросите ваши комментарии по вышеуказанному вопросу и предложите.