СекСкана (или индекс скана), из-за чего неудачно переключается на SeqScan и выполняет запросы по 20-30 секунд.
Что можно почитать (а лучше починить) на эту тему?
Проявляется это на выражениях вида WHERE a=ANY($1) AND b>0
a - индексированное. b - нет.
если в $1 - мало элементов (до 10) - идет сначала индекс скан по a, остаток проверяется на выражение b.
Если в $1 - много элементов (20 и более) - то сначала проверяется выражение b (SecScanом), а потом только выражение a.
Дайте, пожалуйста, совет.
попробуйте сделать ANALYZE TABLE
Для начала разговора о скорости запросов приведите всю информацыю из закрепа: https://t.me/pgsql/303899 Можно воспользоваться вот этим скриптом: https://t.me/pgsql/476688 Без этой информацыи такой разговор будет беспредметным.
Это может повлиять на оценку стоимости тех или иных операций Постгрессом?
Спасибо. Если другие способы не помогут, я соберусь с духом и выполню )
Но вообзе, прямой путь — взять и самому посчитать эти оцэнки. Посмотреть в исходники по первости, да. Будет понятнее — как он это получает — из этого выведите, на чём он ошыбается.
Ммм. Боюсь, что недостоин читать исходники постгресса 🥲. Хотя очень бы хотел уметь.
Огромное спасибо. Дело оказалось именно в этом. Оказалось, что в процессе создания экземпляра сервера на новой виртуалке не запускался ANALYZE, поэтому сервер не понимал, с таблицами какого размера она работает. Было предположение, что "раз включен автовакуум, то он сам всё проанализирует", но когда именно вакуум проанализирует - момент не проконтролировали. А оказалось, что "не тогда, когда надо". Большое спасибо еще раз.
Обсуждают сегодня