【发布时间】:2014-05-22 06:49:40
【问题描述】:
我一直在尝试解决同一个表上的两个并发更新导致创建/插入额外记录的问题。从未在任何其他关系数据库中经历过这种情况,我也不会。因此,我认为在跨多个节点分布查询的 redshifts 架构中可能存在一个怪癖,但无法确定或提供真实世界的示例。
在运行这两个更新之前,我将新数据插入到表中。插入包含填写一天数据的每日快照,大多数列都有准备好更新以填充它们的空值。
更新是并发运行的,它们是简单的更新 sql,更新它们各自的列。如果单独运行,我看不到创建额外的记录并且没有重复。
更新在整个表中进行,超过 2 亿条记录,但是重复只发生在最近填充的记录中(那几天的新数据。
这有点让人担心,因为我永远不会假设更新会创建新记录,除了第一次插入创建的记录。
更奇怪的是,重复的记录包含不同的数据。
通过查看 redshifts 查询日志 (stl_query),我已确认没有其他查询超出预期。
【问题讨论】:
-
"重复的记录包含不同的数据" - 如果它们包含不同的值,那么它们如何“重复”?您是否对相关列有唯一索引?表的定义是什么?
-
重复项位于复合主键上。 redshift 不强制执行密钥,因此可能会发生重复。我看到的是重复记录(根据复合主键。)。但是其他值不同。然而,唯一正在执行的 sql 是两个更新,并且只有当它们同时运行时。在任何其他典型数据库中,这都不应该发生。所以我质疑这在红移上怎么可能。
标签: sql amazon-web-services duplicates amazon-redshift