仅仅是一些背景知识:我们的软件执行简单,但速度非常快(高峰期每秒+/- 1,有时同时),针对特定Redshift的INSERT
和SELECT
语句表。有时,其中一个语句(通常是INSERT
语句(可能总是?))会引发Serializable Isolation Violation。没有连接或任何复杂的操作,只需插入单个记录,并根据过滤器选择记录组。
我的问题:如何仅使用Insert和Select语句在Redshift中引发Serializable Isolation Violation?
根据我对Serializable Isolation如何工作的理解,只有像UPDATE
和DELETE
语句这样的东西才能破坏可串行化。我一遍又一遍地阅读documentation,但它没有提供任何有用的例子来真正理解手头的原则。我想,也许我对SI的理解不正确。有人可以解释(希望通过一个例子)这个原理是如何运作的吗?
这个问题的另一个标题也可能是:“解释就像我是5:序列化隔离”,因为我很可能完全提出错误的问题。
答案 0 :(得分:2)
这个怎么样:
T1: INSERT A
T2: INSERT B
T2: SELECT somethingThatWouldIncludeAIfItWasCommitted
=> but it was not committed, so it will not be included
=> T1 must be after T2
T1: SELECT somethingThatWouldIncludeBIfItWasCommitted
=> T2 must be after T1 => BOOM