auto-vacuum造成oushudb性能下降
元数据使用的 MVCC,所用的事务 ID 是 uint32_t,所以在一段时间后会发生回环,为确保数据可见性,需要 vacuum freeze。
vacuum freeze 做的是将所有 tuple 的 xmin 改为特定的 FrozenTransactionId,保证其永久可见。目前 vacuum freeze 拿的是 ShareUpdateExclusiveLock,reindex table 拿的是 ShareLock。
如果后台 auto-vacuum 在跑,可以发 sigterm 信号终止 vaccum 进程,注意不能是 sigkill
select 'vacuum freeze '||pn.nspname||'.'||pc.relname||';'
from pg_class pc,pg_namespace pn
where pc.relnamespace=pn.oid and
pc.relkind='r' and pc.relstorage!='x' and age(relfrozenxid)> 100000000
order by age(relfrozenxid) desc limit 100;