postgresql 自动真空运行小时postgres

sg2wtvxw  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(154)

对于少数表autovacuum正在并行运行,一个表进程正在锁定其他表autovacuum进程,其他查询(选择,插入,更新)的性能非常缓慢或几乎停止。
在postgressql.conf文件中,我没有做任何更改。

自动真空=打开

下面是截图以供参考。如果我杀死SELECT pg_cancel_backend(<PID>)进程,它将重新启动。我能做些什么来安全地阻止这个过程。请告诉我在这里可以采取什么步骤。使用PostgreSQL- 14
x1c 0d1x的数据
自动真空:真空

krugob8w

krugob8w1#

当在特定表上执行大量写入或删除操作时,会触发自动清空。如果您的应用程序经常对同一个表执行更新或删除查询,请考虑微调以下Postgres参数:

  1. autovacuum_vacuum_scale_factor:此参数指定表大小的分数,以确定是否触发VACUUM。默认值为0.2(表的20%)。这意味着如果特定时间段的20%的记录被更新或删除,则将触发自动真空。
  2. cost_limitcost_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;

相关问题