Pro*_*oid 3 mysql sql progress
有没有办法可以查看查询的进度?例如,必须获取大量数据的 SELECT 查询。如果一个表包含 100 行,SQL 可以报告当前正在处理哪一行吗?那将是 1 到 100 个进步。
我不想查看剩余时间的进度或与时间相关的内容,因为我觉得不可能或我错了?。
有可能的!
顺便说一句,请注意,例如 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”来查看。