支持并发模式对比
并发模式 | SQL Server | MySQL | PostgreSQL | Oracle |
悲观并发模式 | 默认采用悲观并发模式 | 支持 | 支持 | 支持 |
乐观并发模式 | 基于快照的行版本技术,把行版本存放在TempDB数据库中,默认不开启。 | 采用多版本并发控制(MVCC)机制来支持乐观并发模式,默认开启。 | 采用多版本并发控制(MVCC)机制来支持乐观并发模式,默认开启。 | 采用多版本并发控制(MVCC)机制来支持乐观并发模式,默认开启。 |
MVCC的实现方法有两种:
第一种实现方式是将数据记录的多个版本保存在数据库中,当这些不同版本数据不
再需要时,垃圾收集器回收这些记录。这个方式被PostgreSQL和Firebird/Interbase
采用,SQL Server使用的类似机制,所不同的是旧版本数据不是保存在数据库中,
而保存在不同于主数据库的另外一个数据库tempdb中。
第二种实现方式只在数据库保存最新版本的数据,但是会在使用undo时动态重构旧
版本数据,这种方式被Oracle和MySQL/InnoDB使用。
与oracle数据库和MySQL中的innodb引擎相比较,PostgreSQL的MVCC实现方式的
优缺点如下。
优点:
1.事务回滚可以立即完成,无论事务进行了多少操作;
2.数据可以进行很多更新,不必像Oracle和MySQL的Innodb引擎那样需要经常保证回
滚段不会被用完,也不会像oracle数据库那样经常遇到“ORA-1555”错误的困扰;
缺点:
1.旧版本数据需要清理。PostgreSQL清理旧版本的命令成为Vacuum;
2.旧版本的数据会导致查询更慢一些,因为旧版本的数据存在于数据文件中,查询时需
要扫描更多的数据块。
支持事务隔离级别对比
隔离级别 | SQL Server | MySQL | PostgreSQL | Oracle |
read uncommited | 支持 | 支持 | 不支持 | 不支持 |
read commited | 支持(默认) | 支持 | 支持(默认) | 支持(默认) |
repeatable read | 支持 | 支持(默认) | 支持 | 不支持 |
serializable | 支持 | 支持 | 支持 | 支持 |
注意:
在MySQL的Innodb存储引擎下,在repeatable read的隔离级别下,连续多次快照读,ReadView会产生复用,不会出现幻读的情况。但是当两次快照读之间存在当前读,ReadView会重新生成,导致了幻读。




