云数据库 RDS-AutoVacuum介绍和调优:autovacuum常见问题
autovacuum常见问题
- 长事务/事务未提交影响autovacuum正常工作
由于MVCC机制,长事务/事务未提交不允许autovacuum清理死元组,如果当前事务在执行删除或更新操作之前拍摄的数据快照,那autovacuum会跳过这些死元组;出现autovacuum不能正常工作的时候应优先排查idle in transaction中的会话。
可以通过如下SQL查询autovacuum进程的锁信息:
select locktype, relation::regclass, pid, mode, granted from pg_locks where pid in($autovacuum_pid);
可以通过如下SQL查询长事务以及等待事件信息:
select pid,wait_event_type,wait_event,state,backend_start,xact_start,query_start,state_change, query from pg_stat_activity where state not in ('idle', 'active');
确认后通过如下SQL杀死该事务:
select pg_terminate_backend(pid);
- 废弃的复制槽影响autovacuum正常工作
复制槽中存储着备机追上主机需要的信息,如果备机宕机或者严重落后于主机,将无法清理在主节点上复制槽中的列。
可以通过如下SQL查询包含旧事务的复制槽:
SELECT slot_name, slot_type, database, xmin, catalog_xmin FROM pg_replication_slots ORDER BY age(xmin), age(catalog_xmin) DESC;
使用pg_drop_replication_slot()删除废弃的复制槽。
- autovacuum时占用资源高,或者经常导致中断
这时一般是由于autovacuum执行次数过于频繁,需要调整参数降低其执行次数:
- 适当增大autovacuum_vacuum_cost_delay和减少autovacuum_vacuum_cost_limit的值。
- 减少autovacuum_max_workers的数量。
如果业务量比较大,可以做定时任务在业务低峰期进行清理,也可以设置定时任务为特殊的表单独设置autovacuum参数。
- 表膨胀的速度加快
在autovacuum正常运行的情况下,如果业务量增加,可能在短时间内产生大量死元组,导致autovacuum跟不上节奏,会导致查询性能下降;可通过修改autovacuum的相关参数进行优化:
- 适量降低autovacuum_vacuum_cost_delay,适量增加autovacuum_vacuum_cost_limit。
- 适量增大autovacuum_max_workers增加并行。
- autovacuum执行卡住或执行很慢
如果autovacuum执行卡住或执行很慢,尝试手动执行vacuum。
- 通过SQL查询autovacuum运行情况,找到autovacuum的PID:
SELECT datname, usename, pid, now() - xact_start AS runtime, query FROM pg_stat_activity WHERE upper(query) LIKE '%VACUUM%' ORDER BY xact_start;
- 多次执行以下命令,判断autovacuum是否正常运行:
SELECT pg_terminate_backend($PID);
确认autovacuum正常运行后,对需要清理的表手动执行vacuum freeze终止autovacuum进程:
verbose选项可选。vacuum freeze verbose $TBL_NAME;
- 通过SQL查询autovacuum运行情况,找到autovacuum的PID:
- GaussDB数据库参数调优_GaussDB版本_高斯数据库参数调优
- 文档数据库服务DDS性能调优_MongoDB性能调优_华为云
- GaussDB性能怎么调_GaussDB性能调优_高斯数据库性能怎么调-华为云
- OBS常见问题_OBS含义_OBS介绍
- GaussDB性能_性能统计_高斯数据库性能-华为云
- GaussDB案例指南_高斯数据库函数_高斯数据库案例指南_华为云
- GaussDB硬件_金融级高可用_高斯数据库硬件-华为云
- GaussDB性能_Gaussdb数据库性能_高斯数据库性能-华为云
- GaussDB性能怎么调_华为gaussdb_gaussdb性能_gaussdb学习
- GaussDB计算性能_gaussdb递归_高斯数据库计算性能_华为云