SQL查看查询进度

时间:2015-07-15 15:55:02

标签: mysql sql progress

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

我不想查看剩余时间的进度或与时间有关的事情,因为我发现它不可能或我错了?。

3 个答案:

答案 0 :(得分:3)

您可以在mysql中尝试show processlist;,它会为您提供查询所需的时间以及当前步骤查询的提取,发送等。

答案 1 :(得分:1)

有可能!

请注意,例如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 |
+-----+------+-----------+------+---------+------+-------+-----------------------+----------+

进度: 该过程的总进度(0-100%)(如何启用它?请参见Progress Reporting-MariaDB手册页)。

此功能是从 MariaDB 5.3 中引入的。

(2)in MySQL

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

Id: 3123
User: stefan
Host: localhost
db: apollon
Command: Query
Time: 0
State: NULL
Info: SHOW FULL PROCESSLIST

如果您想监视例如在{strong> InnoDB 中,ALTER TABLE命令的进度,您可以使用:

SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM events_stages_current;

会产生类似的结果

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

但是首先必须启用此机制:

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

UPDATE setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';

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

here中描述了整个过程。

太好了!我忘记了这个重要的链接: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

如何检查过程监视工具的当前状态:

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%';

注意: 如果您收到错误

ERROR 1227 (42000): Access denied; you need the PROCESS privilege for this operation

那么您可能已以匿名用户身份连接。尝试运行“选择current_user”进行查看。

答案 2 :(得分:0)

据我所知,SQL查询无法正常工作。您可以查看重要的期间或执行时间/日期,然后评估开始和结束之间的差异,或者可以拆分查询,看看它如何影响所花费的总时间。

我只是不认为SQL会以这种方式报告,所以“加载”的想法有点远远看。虽然我只使用了一些SQL技术......