Использую СУБД Postgresql, относительно не так давно, SQL запросы стали выполняться намного дольше по времени. Некоторые запросы выполняются в несколько десятков раз дольше.
Провел анализ работы БД (сравнил с данными месячной давности), проблем с памятью или процами нет. Но заметил что время доступа к разделу с БД различается на порядок, что можно с эти сделать, кроме банального VACUUM FULL ANALYZE?
Вам следует вначале
Вам следует вначале посмотреть на то, как и какие именно выполняются запросы. Затем их прогнать explain'ом
В запросе стал использоваться другой индекс
В запросе стал использоваться другой индекс, правильно ли я понимаю, после
VACUUM FULL ANALYZE должна обновиться статистика, которую использует планировщик для выбора оптимального
способа выполнения запроса, также должен помочь REINDEX?
Есть ли еще способ кроме VACUUM FULL ANALYZE поставить "на путь истинный" планировщик?
К сожалению VACUUM и REINDEX
К сожалению VACUUM и REINDEX не помогли.
Как работает планировщик POSTGRES, для меня загадка.
Есть такая же БД(тестовая, с аналогичным набором данных) на другом сервере, в аналогичных запросах,
там используется нужный индекс, который раньше использовался на проблемной базе.
Приведу элементарный запрос и планы выполнения
План запроса на проблемной БД:
Используется Index1 по полю Field2 с классом оператора varchar_pattern_ops, запрос выполнялся 25 секунд
С аналогичной БД на другом сервере
Используется Index2 по полям (Field2 с классом оператора varchar_pattern_ops, Field3), запрос выполнялся 50 миллисекунд
Как-то оптимизировать запрос нельзя, куда уж проще. У меня осталась последняя мысль, удалить Index1,
но будет ли во всех местах, где действительно нужен Index1, использоваться Index2 и не будет ли он тормозить эти запросы?
Буду рад любым конструктивным идеям
Как можно скрыть оп
Как можно скрыть оп планировщика поле Field2, чтобы использовался индекс по Fileld3. В запросе
В поле Field2 в нижнем регистре тип данных text
Вариант 1:
Вариант 2:
Может есть варианты более оптимальные?
помогли следующие волшебные
помогли следующие волшебные команды
ALTER TABLE "Table1" ALTER COLUMN "Field2" SET STATISTICS 10000;
VACUUM ANALYZE "Table1";