postgresql - PostgreSQL Serializable 可以安全地与较低的隔离级别混合使用吗?
问题描述
我试图弄清楚混合可序列化和较低级别的隔离时的行为是什么,但运气不佳。具体来说,我们有一个 reorder-queue-items 事务,它当前正在获取表锁,以确保在此期间不会添加新项目。将其序列化并读取队列的头部(以确保对结果的依赖)是否会提供相同级别的保证,即使其他事务以可重复读取操作?
使用 PostgreSQL 9.5。
PS。我知道还有一个类似标题的问题,但它已经超过 4 年了,它所问的具体内容要少得多,鉴于引用的材料,唯一的答案基本上是没有来源的,并且没有真正回答这个问题。
解决方案
为了保证可序列化,所有参与的事务都应该使用SERIALIZABLE
隔离级别。
但我不确定可序列化隔离是否能解决您的问题。它不会阻止任何人读取或写入队列,它会使一些事务失败,而失败的事务很可能是试图重新排序队列的事务。
我认为在这种情况下,锁是要走的路。使用可序列化事务同样会影响性能,不同之处在于您必须不断重试事务,直到重新排序成功,而不是等待。
推荐阅读
- apache-spark - 如果我们在 case when 语句中使用 udf,火花会如何表现,它是否将 udf 应用于所有记录,然后应用 case 过滤器?
- c# - 使用表达式函数返回值
- xamarin - 如何在 Xamarin Forms 中使用嵌入资源字体文件中的图标
- javascript - Javascript / CSS 砌体 - 尊重列
- mysql - 如何将查询集限制为 MySQL 中的 ID 子集?
- apache-storm - Apache Storm 2.1.0 内存相关配置
- django - Django MaterializeCSS - 工作,但不确定设置 css 和 js 的正确方法?
- r - 在堆积条形图中自定义不同大小的标签(ggplot2)
- angular - 向动态表单添加验证
- select - 检索具有给定值集且没有其他值的行