【发布时间】:2019-05-28 10:00:09
【问题描述】:
我在这里没有具体的例子,我只是想了解different levels of transaction isolation 以及人们如何决定哪个最适合特定情况。
我正在尝试考虑在哪些情况下我想要一个可序列化的事务,而不是在我愿意放弃一点数据完整性的情况下可能提高性能.
谁能提供一个示例,说明“未提交读”、“已提交读”和/或“可重复读”是更可取的隔离级别?
【问题讨论】:
标签: sql postgresql
我在这里没有具体的例子,我只是想了解different levels of transaction isolation 以及人们如何决定哪个最适合特定情况。
我正在尝试考虑在哪些情况下我想要一个可序列化的事务,而不是在我愿意放弃一点数据完整性的情况下可能提高性能.
谁能提供一个示例,说明“未提交读”、“已提交读”和/或“可重复读”是更可取的隔离级别?
【问题讨论】:
标签: sql postgresql
使用可序列化的隔离级别,不仅有好处,也有坏处:
您必须接受增加的性能开销。
您必须通过重做事务来处理序列化错误,这会使您的应用程序代码复杂化,并且如果经常发生这种情况会损害性能。
我将提出其他事务级别的用例。这个列表当然不完整:
READ UNCOMMITTED:如果你请求这个隔离级别,你实际上会得到READ COMMITTED。所以这个隔离级别是无关紧要的。在使用读锁的数据库系统上,您可以使用该隔离级别来避免它们。
READ COMMITTED:如果你准备好通过锁定你想要稳定的行来自己处理并发事务,这是最好的隔离级别。最大的优势是您永远不必处理序列化错误(除非您遇到死锁)。
REPEATABLE READ:此隔离级别非常适合需要查看数据库一致状态的长时间运行的只读事务。最好的例子是pg_dump。
【讨论】: