选择事务隔离级别

时间:2019-05-28 10:00:09

标签: sql postgresql

这里没有具体示例,我只是想了解different levels of transaction isolation,以及如何决定哪种方法最适合给定情况。

我试图考虑一种情况,在这种情况下,我希望事务不是可序列化的,而不是在我愿意放弃一点数据完整性的情况下提高性能。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

  2. READ COMMITTED:如果您准备通过锁定希望稳定的行来自己处理并发事务,则这是最佳的隔离级别。最大的优点是您无需处理序列化错误(除非遇到死锁)。

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