选择事务隔离级别

whe*_*kie 8 sql postgresql

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

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

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

Lau*_*lbe 7

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

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

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

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

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

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

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