Настройка автоочистки для запуска при изменении схемы базы данных?

Всякий раз, когда я обновляю свою схему базы данных из программного обеспечения (кода) с помощью нескольких миграций, выполнение некоторых операций с базой данных занимает много времени. Я понял pgstats, что что-то было напутано, и план запроса был изменен. Те же операции завершатся через 2-3 секунды после запуска ANALYZE вручную.

Углубившись в автоочистку и анализ, я понял, что она делает. Но мое требование - запустить ANALYZE после обновления моей схемы БД.

Мое приложение использует первый подход кода Entity framework. Схема базы данных обновляется при запуске и загрузке моего программного обеспечения. Несмотря на то, что мой параметр autovacuum postgres включен, он не запускается при обновлении схемы. Итак, мне нужно запустить ANALYZE после того, как мое программное обеспечение загрузится.

Как я могу запустить ANALYZE для всей базы данных из моего кода после загрузки программного обеспечения и непосредственно перед тем, как произойдет какое-либо нажатие? Это приложение C # WPF.


person vinmm    schedule 13.03.2020    source источник
comment
EF 6 или EF Core? Можете ли вы опубликовать свой код запуска?   -  person Jeremy Lakeman    schedule 13.03.2020
comment
Ваше приложение не должно изменять схему базы данных при каждом запуске, и поэтому вам не нужно АНАЛИЗИРОВАТЬ ее при каждом запуске. Можете ли вы опубликовать код, чтобы показать, что вы делаете? PS попробуйте ничего не менять в базе данных при запуске приложения и запустите запрос, если он все еще медленный, проблема может быть связана с холодным запросом, который EF выполняет до фактического выполнения первого запроса: stackoverflow.com/a/16407062/9363973   -  person MindSwipe    schedule 13.03.2020


Ответы (1)


Вы должны сделать это явно. Изменения схемы не запускают анализ, и даже если бы это произошло, для завершения обработки потребовалось бы некоторое время.

Но должно быть просто добавить ANALYZE для каждой затронутой таблицы как часть процедуры обновления.

person Laurenz Albe    schedule 13.03.2020