我有一个带有 InnoDB 表的 MariaDB 数据库。我有两个连接到同一个数据库。一个连接是围绕大量工作使用事务。另一个连接的任务是更新同一数据库中的表(但在事务工作范围之外)以跟踪事务的进度。
所有这一切都发生在同一个脚本中,但同样具有不同的连接:一个用于正在执行的实际工作(包括交易),另一个用于保留有关工作进度的元信息。
我预计这会起作用,以便作业跟踪记录会随着作业的进展而更新 - 10%、20%、50% 等,因为事务工作是在单独的连接上完成并影响其他表。但是,在我的测试中,在提交作业的事务之前,作业跟踪记录不会更新。
据我所知,它不会死锁,因为“进度监控”连接根本没有使用事务。“worker”连接将其查询包装在一个事务中,但另一个连接没有。
我通过查看随着工作的进展而填写的“完成百分比”字段来检查进度。操作顺序是:
然后,在另一个 HTTP 连接中,我正在轮询并输出进度值,但在连接 1 上的事务提交之前它永远不会更新。
除了将作业跟踪表移动到完全不同的数据库之外,有什么方法可以获得我想要的行为?