首页 > 解决方案 > 选择事务隔离级别

问题描述

我在这里没有具体的例子,我只是想了解不同级别的事务隔离以及如何决定哪种方式最适合给定情况。

我正在尝试考虑我想要一个不可序列化的事务的情况,而不是在我愿意放弃一点数据完整性的情况下可能提高性能。

任何人都可以提供一个示例,说明“未提交读取”、“已提交读取”和/或“可重复读取”将是更可取的隔离级别吗?

标签: sqlpostgresql

解决方案


使用可序列化的隔离级别不仅有优点,也有缺点:

  • 您必须接受增加的性能开销。

  • 您必须通过重做事务来处理序列化错误,这会使您的应用程序代码复杂化并且如果它经常发生会损害性能。

我将提出其他事务级别的用例。这个列表当然不完整:

  1. READ UNCOMMITTED: 如果你请求这个隔离级别,你实际上会得到READ COMMITTED. 所以这个隔离级别是无关紧要的。在使用读锁的数据库系统上,您使用该隔离级别来避免它们。

  2. READ COMMITTED:如果您准备通过锁定您想要稳定的行来自己处理并发事务,这是最好的隔离级别。最大的优势是您永远不必处理序列化错误(除非您遇到死锁)。

  3. REPEATABLE READ:此隔离级别非常适合希望查看数据库一致状态的长时间运行的只读事务。最典型的例子是pg_dump


推荐阅读