点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
故障背景

检查思路
SELECT pid, state, query, age(clock_timestamp(), query_start) AS runtime FROM pg_stat_activity WHERE state = 'active'ANDqueryLIKE'AUTOVACUUM%';

SELECT * FROM pg_stat_progress_vacuum;

pid 正在执行 VACUUM 的进程 ID。 datid 数据库的 OID(对象标识符)。 relid 正在进行 VACUUM 的表的 OID。 index_relid 如果是索引的 VACUUM,则显示索引的 OID;否则为 NULL。 phase 当前 VACUUM 操作的阶段(例如,initializing、scanning heap、cleaning 等)。 heap_tuples_removed 已删除的堆元组(即 dead tuples)数量。 heap_blks_vacuumed 已清理的堆块数量。 index_vacuum_count 已处理的索引页数量。 last_vacuum_time 上一次执行 VACUUM 的时间。 vacuum_start_time 当前 VACUUM 操作开始的时间。
select n_tup_ins as"inserts", n_tup_upd as"updates", n_tup_del as"deletes", n_live_tup as"live_tuples", n_dead_tup as"dead_tuples"from pg_stat_user_tables where schemaname ='cnsoc'and relname ='tbm_cfs_prop_inst';

select
to_number(current_setting('autovacuum_analyze_threshold'),'9999')+to_number(current_setting('autovacuum_analyze_scale_factor'),'99.99')*reltuples as auto_analyze_threshold,
to_number(current_setting('autovacuum_vacuum_threshold'),'9999')+to_number(current_setting('autovacuum_vacuum_scale_factor'),'99.99')*reltuples as auto_vacuum_threshold,
relname,reltuples
from pg_class c
where relname like'%目标表名%';
select * from pg_stat_all_tables where relname = '目标表名';
故障起因及处理
如果dead_tuple远大于阈值,则可能autovacuum的worker数过少,无法处理所有autovacuum,导致积压。 如果阈值过高,可以尝试设置较小的scale_factor,提高autovacuum频率。
部署数据库年龄告警,及时发现问题; 针对数据库业务及时调整数据库性能参数。
altertable table_name set (autovacuum_vacuum_scale_factor=0.002);

本文作者:易龙超(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




