监视mariadb中具有许多更新的sql脚本的进度

hkmswyz6  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(394)

我正在运行一个包含数百万条更新语句的脚本,如下所示:

  1. UPDATE data SET value = 0.9234 WHERE fId = 47616 AND modDate = '2018-09-24' AND valueDate = '2007-09-01' AND last_updated < '2018-10-01';

fid、moddate和valuedate是数据表复合主键的3个组件。
我最初是和 AUTOCOMMIT=1 但我想如果我开始 AUTOCOMMIT=0 把交易分成25块。
在自动提交模式下,我使用 SHOW PROCESSLIST 我会在输出中看到update语句,所以从fid外键,我可以看出脚本已经进展了多远。
然而,没有自动提交,看着它现在运行,我没有看到任何与 SHOW PROCESSLIST ,仅此而已:

  1. 610257 schema_owner_2 201.177.12.57:53673 mydb Sleep 0 NULL 0.000
  2. 611020 schema_owner_1 201.177.12.57:58904 mydb Query 0 init show processlist 0.000

这个 Sleep 状态让我怀疑系统上的其他用户正在阻止更新,但是如果我运行 SHOW OPEN TABLES 我不确定是否有问题:

  1. MariaDB [mydb]> SHOW OPEN TABLES;
  2. +----------+----------------+--------+-------------+
  3. | Database | Table | In_use | Name_locked |
  4. +----------+----------------+--------+-------------+
  5. | mydb | data | 2 | 0 |
  6. | mydb | forecast | 1 | 0 |
  7. | mydb | modification | 0 | 0 |
  8. | mydb | data3 | 0 | 0 |
  9. +----------+----------------+--------+-------------+

我的剧本会永远等下去吗?我应该回到使用自动提交模式吗?有没有办法看看进展有多大?我想我可以检查数据的更新,但这将是艰苦的拼凑起来。

jhdbpxl9

jhdbpxl91#

通过实际检查数据来检查进度。
我猜你在做什么 COMMIT ?
什么都看不到是合理的——每一个都是 UPDATE 只需要几毫秒;会有的 Sleep 时间间隔 UPDATEs . Time 存在 0 是你的线索,它正在进展。
不一定会有任何线索 PROCESSLIST 它已经走了多远。
你可以加上 SELECT SLEEP(1), $fid; 在循环中,$fid(或其他)是最后一个 UPDATEd 行id。这会使进度每25行减慢1秒,所以可能您应该执行100或500个组。

相关问题