简单描述来说(这里就不展开ACID以及隔离级别的拓展讨论了),在最早的数据库理论里,行上的锁有两种,读锁与写锁,当要访问一行数据的时候,如果是select,会获取读锁,读锁会阻塞写锁,但不会阻塞读锁,当有...实际上这个的现实世界的实现,就是IBM DB2,以数据库理论来说,DB2实现得更加理论化,但如果有用过DB2的DBA,应该对这个数据库与主流数据库(Oracle,MySQL)的实现不一致深为头疼,而实际上...众所周知,Oracle非常早就使用UNDO实现了MVCC,而MVCC最大的的特点,就是读写不再相互阻塞,读不会阻塞写,写也不会阻塞读,Oracle的销售,可以拿着这个特性对DB2有技术上的优势,在很多性能测试中...,行锁数量过多的话会升级为表锁),是我早些年对DB2最大的槽点(如果抛开那个巨丑巨丑的数据库图形工具的话)....除此之外,出于能者多劳的考虑,并且"反正都需要扫描一遍表",包括表的统计数据分析,也由vacuum进程代劳了,这点看着很是别扭.
◆◆
目前的解决方案
◆◆
在PG的各种技术讨论中,vacuum永远是主要话题之一