有人知道SQL数据库如何检测可序列化的隔离冲突(SIV)吗?这似乎只是简单的蛮横,强迫事务执行的每一个排列都找到并发执行结果的匹配,以验证可序列化性不会扩展。
根据一位第三方研究人员的文章:failure.pdf
SIV是在两个事务同时发生时发生的,而最近的一个事务提交了一些已删除的行,稍后较少的事务也尝试删除这些行。这是MVCC无法处理的情况,因此必须用SIV中止。
这对于检测SIV中涉及删除MVCC中行的查询是有意义的,但我不明白仅使用select和insert查询时如何检测到SIV。例如,AWS中的这个示例:https://aws.amazon.com/premiumsupport/knowledge-center/redshift-serializable-isolation/
有人知道吗?
发布于 2022-05-30 15:20:43
让我把事情简化一下,因为发生的事情很复杂,很容易让树木错过森林。
就这样。Redshift并不“知道”其他事务所做的更改对此事务正在进行的结果具有重要意义。只是因为它可能是物质。因为它可能是实质性的,所以存在序列化危险,并且一个事务被中止,以防止产生不确定结果的可能性。
这个主题有很多复杂性和细微之处,只有当您试图理解为什么某些情况、时间和SQL有效,而其他情况却不起作用时,这才是很重要的。这就进入了谓词锁定,这就是Redshift“知道”如果在其他地方进行的某些更改会影响到对此事务具有重要意义的初始状态的一部分。也就是一堆簿记。这就是为什么"select * from tab1“在链接的知识中心文章中很重要的原因--它为这个事务创建了”谓词锁“。
https://stackoverflow.com/questions/72429816
复制相似问题