暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

支持的事务隔离级别对比

原创 bingo 2023-02-19
147

支持并发模式对比

并发模式

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会重新生成,导致了幻读。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论