DBT 在随机模型 (Redshift) 的构建运行中出现死锁错误

DBT getting deadlock errors on build runs for random models (Redshift)

我们在 dbt 中安排了几个环境构建。 每个环境都有几个模型(10-15)。

每次我们 运行 构建时,无论是按计划还是手动构建,都有几个模型没有完成。每次失败的模型似乎都是随机的。

错误总是沿着这些方向:

Database Error in model my_model (models/env1/my_model.sql)
  deadlock detected
  DETAIL:  Process 123 waits for ShareLock on transaction 456; blocked by process 789.
  Process 789 waits for AccessShareLock on relation 123456 of database 654321; blocked by process 123.
  compiled SQL at target/run/my_company/models/env1/my_model.sql

我们正在 运行针对我们的 AWS Redshift 集群使用 DBT Cloud。 我们的 Redshift 集群由四台 ra3.xlplus 机器组成。

我们的时间表已经过增量式和非增量式的尝试(每个 运行 都重建)。 Table 大小从 7MB 到 285GB 不等。时间表已经在夜间和每 4 小时左右尝试过。这些变化没有明显差异。

模型查询多种多样,但都非常简单。我们也没有注意到这里有任何相关性,相同的模型有时会 运行 而在其他模型上会出现死锁,而无需任何更改。

您与 Redshift 建立了多个连接,它们之间存在 table 依赖关系(循环依赖循环 - 进程 1 正在从 table B 更新 table A,而在例如,同时进程 2 正在根据 table A 更新 table B)。只有当执行时间以某种方式排列时,才会出现此问题。由于这个问题相当重复table,所以有问题的会话很可能都来自 DBT,但不确定此时是否还有其他工具在运行。

我认为您需要查找有问题的 2 个进程(会话/连接)并查看它是什么用户以及它们正在执行什么操作。然后查找 tables 和有问题的交易。排列时间戳并查看依赖性是什么并理解它发生的原因。有了这些信息,您可以制定一个计划,以确保这种情况(循环依赖循环)不会再次发生 table.