是否可以仅使用Insert和Select语句在Redshift中引发Serializable Isolation Violation?

时间:2016-03-17 01:36:36

标签: sql amazon-redshift

仅仅是一些背景知识:我们的软件执行简单,但速度非常快(高峰期每秒+/- 1,有时同时),针对特定Redshift的INSERTSELECT语句表。有时,其中一个语句(通常是INSERT语句(可能总是?))会引发Serializable Isolation Violation。没有连接或任何复杂的操作,只需插入单个记录,并根据过滤器选择记录组。

我的问题:如何仅使用Insert和Select语句在Redshift中引发Serializable Isolation Violation?

根据我对Serializable Isolation如何工作的理解,只有像UPDATEDELETE语句这样的东西才能破坏可串行化。我一遍又一遍地阅读documentation,但它没有提供任何有用的例子来真正理解手头的原则。我想,也许我对SI的理解不正确。有人可以解释(希望通过一个例子)这个原理是如何运作的吗?

这个问题的另一个标题也可能是:“解释就像我是5:序列化隔离”,因为我很可能完全提出错误的问题。

1 个答案:

答案 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