导致表碎片的原因:频繁删改,自动清理autovacuum无法锁定数据表,表的死元组dead tuple比例过高导致表膨胀,查询出现缓慢的情况。
检查方法:
###查询表膨胀sql语句
select relname,coalesce(round(n_dead_tup * 100 / (case when n_live_tup + n_dead_tup = 0 then null else n_live_tup + n_dead_tup end ),2),0.00) as dead_tup_ratio
from pg_stat_all_tables
where 1=1 and n_dead_tup >=10000
order by dead_tup_ratio desc
limit 10;
处理办法:
sql清理表碎片
vacuum full shcemaname.tablename;
或者 在VDS客户端右键对应的对象,进行分析清理
处理后再次查询表膨胀问题,确认问题是否得到解决。
建议:表膨胀将会影响表的扫描时间,影响SQL执行效率,存在表膨胀现象的表,需要及时清理,检查阈值bloat_pct>50,即膨胀率大于50%告警