我在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语句(可以以任何顺序运行而没有结果差异),您将获得隔离级别错误.
顺便说一下,Redshift为您提供工具来确定哪些查询存在冲突.使用您在上面的日志消息中获得的数字,您可以查询如下:
select query,trim(querytxt) as sqlquery from stl_query where xid = 388224;388224形成循环的transaction_id.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。