查看SQL语句执行进度信息
有时候我们跑一个语句,若修改大表或查询量很大时候,不知道执行到什么程度了,什么时候能执行完成,在5.7版后可以查询sys.session来观察
select * from sys.session where conn_id != connection_id();
模拟对一个大表执行了alter操作
alter table ytest.data_million_large change d d varchar(220);
ps: 这边有个地儿感兴趣的小伙伴可以去了解下,将字段d修改为 varchar(220) 以下,例如 varchar(200),这个会触发copy,执行会非常慢,而若将值改大,例如 varchar(2000),执行会非常快,修改元数据。【表字符集 utf8】
- 字段progress 可以认为是执行的百分比
- 百分比并不精准,仅是一个近似值
mysql> select * from sys.session where conn_id != connection_id() G
*************************** 1. row ***************************
thd_id: 2560
conn_id: 2534
user: root@221.228.242.102
db: sys
command: Query
state: copy to tmp table
time: 54
current_statement: alter table ytest.data_million_large change d d varchar(220)
statement_latency: 55.04 s
progress: 21.78 ## 执行的百分比
lock_latency: 39.49 ms
rows_examined: 0
rows_sent: 0
rows_affected: 0
tmp_tables: 0
tmp_disk_tables: 0
full_scan: NO
last_statement: NULL
last_statement_latency: NULL
current_memory: 4.29 MiB
last_wait: NULL
last_wait_latency: NULL
source: NULL
trx_latency: NULL
trx_state: NULL
trx_autocommit: NULL
pid: NULL
program_name: NULL
1 row in set (15.10 sec)