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

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

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

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 ,仅此而已:

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

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

MariaDB [mydb]> SHOW OPEN TABLES;
+----------+----------------+--------+-------------+
| Database | Table          | In_use | Name_locked |
+----------+----------------+--------+-------------+
| mydb     | data           |      2 |           0 |
| mydb     | forecast       |      1 |           0 |
| mydb     | modification   |      0 |           0 |
| mydb     | data3          |      0 |           0 |
+----------+----------------+--------+-------------+

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

pftdvrlh

pftdvrlh1#

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

相关问题