正好最近看到pg的新版本特性讨论中,提到在pg新版本中要引入undo这个概念,于是就有了对这一系列概念进行整理的想法.
◆◆
MVCC
◆◆
首先说一下,在最原始的数据库理论中,是没有MVCC这个概念的...MySQL中,每个事务都会被分配到一个事务id,这个事务id是全局自增的数字,保证新事务的id必然大于老事务,然后这个id也会作为一个读视图id去用来读取数据(如果是可重复读的隔离级别的话,对于读已提交隔离级别来说...除此之外,出于能者多劳的考虑,并且"反正都需要扫描一遍表",包括表的统计数据分析,也由vacuum进程代劳了,这点看着很是别扭.
◆◆
目前的解决方案
◆◆
在PG的各种技术讨论中,vacuum永远是主要话题之一...人工策略
来自@德哥博客的建议,主要有三个:
1 是对表进行分区,每个表不大于32GB,降低freeze的时间以及IO代价
2 是对不同的表,设置不同的freeze时间,alter table t set...在调度的时候,对于连续vacuum失败进行报告.