加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 尽管有LOCK,Redshift:可序列化隔离错误(1023)

发布时间:2020-12-13 18:11:10 所属栏目:百科 来源:网络整理
导读:我在Redshift集群上并行运行了几个批处理ETL操作. 我的管道执行以下操作: 在临时临时表上做一堆东西.最后,通过执行以下操作,进入最终表(永久和跨进程共享): BEGIN;LOCK table X;DELETE FROM X USING stage_table...INSERT INTO X ...END; 但是,当我有几个
我在Redshift集群上并行运行了几个批处理ETL操作.

我的管道执行以下操作:

在临时临时表上做一堆东西.最后,通过执行以下操作,进入最终表(永久和跨进程共享):

BEGIN;
LOCK table X;
DELETE FROM X USING stage_table...
INSERT INTO X ...
END;

但是,当我有几个并行的进程时,有些失败了:

ERROR: 1023
DETAIL: Serializable isolation violation on table – 142443,transactions > forming the cycle are: 388224,388226 (pid:32012)

(142443是我的桌子X)

当我一个接一个地运行这个过程时,一切都像魅力一样.我在其他进程上成功使用了锁(并验证它是按预期工作的)所以我很困惑.任何帮助赞赏!

这是预料之中的. Redshift使用的事务隔离级别是SERIALIZABLE,如 AWS Doc中所述

Note: READ UNCOMMITTED,READ COMMITTED,and REPEATABLE READ have no
operational impact and map to SERIALIZABLE in Amazon Redshift.

具体来说,这意味着如果您并行运行不是SERIALIZABLE的SQL语句(可以以任何顺序运行而没有结果差异),您将获得隔离级别错误.

顺便说一下,R??edshift为您提供工具来确定哪些查询存在冲突.使用您在上面的日志消息中获得的数字,您可以查询如下:

select query,trim(querytxt) as sqlquery from stl_query where xid = 388224;

388224形成循环的transaction_id.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读