postgresql 选择事务隔离级别

eit6fx6z  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(2)|浏览(133)

我这里没有一个具体的例子,我只是试图理解different levels of transaction isolation以及如何决定哪一个最适合给定的情况。
我试图考虑在哪些情况下我会想要一个不可序列化的事务,而不是在我愿意给予一点数据完整性的情况下提高性能。
谁能举个例子,说明“未提交读”、“已提交读”和/或“可重复读”是更可取的隔离级别?

jgovgodb

jgovgodb1#

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

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

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

  1. READ UNCOMMITTED:如果您请求此隔离级别,您实际上将得到READ COMMITTED。因此,此隔离级别是无关紧要的。在使用读锁定的数据库系统上,您可以使用此隔离级别来避免读锁定。
  2. READ COMMITTED:如果您已准备好借由锁定想要保持稳定的数据列,自行行程并行交易,则这是最佳的隔离层级。最大的优点是您永远都不必行程序列化错误(除非发生死锁)。
  3. REPEATABLE READ:这种隔离级别非常适合于需要查看数据库一致状态的长时间运行的只读事务,最好的例子是pg_dump
mlmc2os5

mlmc2os52#

如果您的数据库很少更新,并且您需要尽可能高的查询性能,则可以将隔离级别设置为READ UNCOMMITTED

相关问题