我这里没有具体的例子,我只是想理解different levels of transaction isolation以及如何确定最适合给定情况的方法。
我正在考虑在哪些情况下我想要一个不可可序列化的事务,而不是在我愿意放弃一点数据完整性的情况下可能提高性能.
谁能提供一个例子,说明“读未提交”、“读已提交”和/或“可重复读”是更可取的隔离级别?
最佳答案
使用serializable隔离级别不仅有好处,也有坏处:
您必须接受增加的性能开销。
您必须通过重做事务来处理序列化错误,这会使您的应用程序代码复杂化,并且如果经常发生会影响性能。
我将为其他事务级别提出用例。这个列表当然是不完整的:
READ UNCOMMITTED
:如果您请求此隔离级别,您实际上将获得READ COMMITTED
。所以这个隔离级别是无关紧要的。在使用读锁的数据库系统上,您可以使用该隔离级别来避免它们。READ COMMITTED
:如果您准备好通过锁定希望保持稳定的行来自行处理并发事务,这是最好的隔离级别。最大的优势是您永远不必处理序列化错误(遇到死锁时除外)。REPEATABLE READ
:此隔离级别非常适合希望查看数据库一致状态的长时间运行的只读事务。主要示例是pg_dump
。
关于sql - 选择事务隔离级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339652/