如何通过避免死锁来同步 mysql 中的两个 table?

How to sync two table in mysql by avoiding deadlocks?

我正在使用 my-sql 作为驱动程序的 AWS-Aurora 中的 2 个表工作。 让我们将两个表称为 Table A 和 Table B.

所以,我开始更新我的 Table A,使用左连接 Table B。 我在 cron 作业中开始 运行 我的更新语句。在我知道更新正在创建阻碍我的完整数据管道的死锁之前,一切都很顺利。

我正在寻找同步我的 Table A:

的解决方案
  1. 我可以在哪里避免 Table A.
  2. 上的死锁
  3. 此外,我想避免对数据管道进行任何更改。

死锁是由两个或多个事务同时引起的运行。 事实是,您可以做很多事情来减少死锁,但在实际意义上有很多不同类型的 activity,完全消除死锁通常是不可能的。

处理死锁的唯一方法是重试任何因死锁而失败的事务。

现在,如果您的更新导致现有应用程序中的事务回滚并且您不想更改它,最好的办法是将每个语句中更新的行数保持在最低限度。如果您一次更新一行,则不太可能。当然,那是很慢的。

现在,您可以使用 lock table 在 运行 您的 cron 之前锁定 table。这将导致其他一切等待并可能导致性能问题,但它会起作用。

您可以执行 select ... for update 来锁定您计划更新的行。但我怀疑您正在尝试同时执行所有行,因此无论如何您都会有效地锁定整个 table。