SQL 查看查询进度

Pro*_*oid 3 mysql sql progress

有没有办法可以查看查询的进度?例如,必须获取大量数据的 SELECT 查询。如果一个表包含 100 行,SQL 可以报告当前正在处理哪一行吗?那将是 1 到 100 个进步。

我不想查看剩余时间的进度或与时间相关的内容,因为我觉得不可能或我错了?。

Vil*_*ilq 5

有可能的!

顺便说一句,请注意,例如 mytop - MySQL 和 MariaDB 的 CLI 监控工具已经实现了该功能。

(1) 在 MariaDB 中

SHOW FULL PROCESSLIST;
+-----+------+-----------+------+---------+------+-------+-----------------------+----------+
| Id  | User | Host      | db   | Command | Time | State | Info                  | Progress |
+-----+------+-----------+------+---------+------+-------+-----------------------+----------+
| 126 | root | localhost | NULL | Query   |    0 | NULL  | SHOW FULL PROCESSLIST |    0.000 |
+-----+------+-----------+------+---------+------+-------+-----------------------+----------+
Run Code Online (Sandbox Code Playgroud)

进度:流程的总进度(0-100%)(如何启用?请参阅进度报告- MariaDB 手册页)。

这个函数是从MariaDB 5.3引入的。

(2) 在 MySQL 中

查询属性的默认列表是例如:

Id: 3123
User: stefan
Host: localhost
db: apollon
Command: Query
Time: 0
State: NULL
Info: SHOW FULL PROCESSLIST
Run Code Online (Sandbox Code Playgroud)

如果您想监控InnoDB 中的ALTER TABLE命令进度,您可以使用:

SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM events_stages_current;
Run Code Online (Sandbox Code Playgroud)

这将产生类似的东西:

+------------------------------------------------------+----------------+----------------+
| EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED |
+------------------------------------------------------+----------------+----------------+
| stage/innodb/alter table (read PK and internal sort) |            280 |           1245 |
+------------------------------------------------------+----------------+----------------+
Run Code Online (Sandbox Code Playgroud)

但首先你必须启用这个机制:

UPDATE setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/alter%';

UPDATE setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';
Run Code Online (Sandbox Code Playgroud)

当然,您必须已经启用了performance_schema

此处描述整个过程。

哎哟! 我忘记了这个重要链接:https : //dev.mysql.com/doc/refman/5.7/en/sys-schema-progress-reporting.html,从 MySQL 5.7.9 开始,有几个插件可用。

如何在 cfg 文件中启用:

[mysqld]
performance-schema-instrument='stage/%=ON'
performance-schema-consumer-events-stages-current=ON
performance-schema-consumer-events-stages-history=ON
performance-schema-consumer-events-stages-history-long=ON
Run Code Online (Sandbox Code Playgroud)

如何检查进程监控工具的当前状态:

SELECT * FROM setup_instruments WHERE NAME RLIKE 'stage/sql/[a-c]';
SELECT * FROM setup_instruments WHERE
       ENABLED='YES' AND NAME LIKE "stage/%";
SELECT * FROM setup_consumers WHERE NAME LIKE '%stages%';
Run Code Online (Sandbox Code Playgroud)

注意:如果出现错误

ERROR 1227 (42000): Access denied; you need the PROCESS privilege for this operation
Run Code Online (Sandbox Code Playgroud)

那么您可能以匿名用户的身份连接。尝试运行“select current_user”来查看。