对于少数表autovacuum正在并行运行,一个表进程正在锁定其他表autovacuum进程,其他查询(选择,插入,更新)的性能非常缓慢或几乎停止。
在postgressql.conf文件中,我没有做任何更改。
自动真空=打开
下面是截图以供参考。如果我杀死SELECT pg_cancel_backend(<PID>)
进程,它将重新启动。我能做些什么来安全地阻止这个过程。请告诉我在这里可以采取什么步骤。使用PostgreSQL- 14
x1c 0d1x的数据
自动真空:真空
对于少数表autovacuum正在并行运行,一个表进程正在锁定其他表autovacuum进程,其他查询(选择,插入,更新)的性能非常缓慢或几乎停止。
在postgressql.conf文件中,我没有做任何更改。
下面是截图以供参考。如果我杀死SELECT pg_cancel_backend(<PID>)
进程,它将重新启动。我能做些什么来安全地阻止这个过程。请告诉我在这里可以采取什么步骤。使用PostgreSQL- 14
x1c 0d1x的数据
自动真空:真空
1条答案
按热度按时间krugob8w1#
当在特定表上执行大量写入或删除操作时,会触发自动清空。如果您的应用程序经常对同一个表执行更新或删除查询,请考虑微调以下Postgres参数:
autovacuum_vacuum_scale_factor
:此参数指定表大小的分数,以确定是否触发VACUUM。默认值为0.2(表的20%)。这意味着如果特定时间段的20%的记录被更新或删除,则将触发自动真空。cost_limit
和cost_delay
:这些参数限制了每个真空处理所花费的时间。如果“cost_limit”过低或“cost_delay”设置过高,则可能导致Autovacuum需要更长时间才能完成,从而可能导致争用和锁定。1.如果你的数据库有大量的表,并且Autovacuum同时在所有的表上运行,这可能会导致争用和锁定的增加。
以下是一些有用的查询,可能有助于您更新特定表的这些参数:
1.在表格级别指定自动真空参数。
ALTER TABLE <TABLE-NAME> SET (<POSTGRES PARAMETER>= <VALUE>);
个1.使用查询检查表中已更新的参数
SELECT relname, reloptions FROM pg_class WHERE relname in ('<TABLE NAME>');
个1.检查上次触发自动真空的时间。
SELECT schemaname, relname, last_vacuum, last_autovacuum, vacuum_count, autovacuum_count FROM pg_stat_user_tables;
个