sql - 选择事务隔离级别

标签 sql postgresql

我这里没有具体的例子,我只是想理解different levels of transaction isolation以及如何确定最适合给定情况的方法。

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

谁能提供一个例子,说明“读未提交”、“读已提交”和/或“可重复读”是更可取的隔离级别?

最佳答案

使用serializable隔离级别不仅有好处,也有坏处:

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

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

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

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

  2. READ COMMITTED:如果您准备好通过锁定希望保持稳定的行来自行处理并发事务,这是最好的隔离级别。最大的优势是您永远不必处理序列化错误(遇到死锁时除外)。

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

关于sql - 选择事务隔离级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339652/

相关文章:

mysql - 使用零计数的左连接和内连接对结果进行分组

postgresql - PostgreSQL 中重叠间隔的最大计数

postgresql - 为什么我在 Windows 10 的 pgAdmin 中看不到 PostgreSQL 9.5?

mysql - 将 LINQ 与 SQL Server Express 2005 以外的数据库一起使用

mysql - SQL 连接具有两种类型的元素表

SQL - 使用正则表达式的动态查找

sql - 公共(public)表表达式有什么用?

sql - 将两个 SQL 行合并为一个

java - 使用 postgres 池简单连接到数据源

ruby-on-rails - 更新 json 列中的单个属性会触发完整的列更新