对于MySQL 5.7版本,可以使用sys.session视图来查看会话最后一次执行的SQL:

SELECT *
FROM sys.session
WHERE CONN_ID = \G

其中sys.session视图关联到sys.processlist,而sys.processlist又使用到`performance_schema`.`events_statements_current`。

如果想查询某个会话从开启到现在的执行过的SQL情况,就需要使用到下列表:

performance_schema.events_statements_current
performance_schema.events_statements_history
performance_schema.events_transactions_history_long

上面三张表中记录MySQL服务器最近执行过的SQL情况,但上面三张表中的表示时间的字段使用皮秒来表示,且不能直接使用FROM_UNIXTIME来转换(不是以1970-01-01 00:00 或 0000-01-01 00:00为起点, 每个MySQL实例的起始基线不同)。

使用下面脚本可以查看到特定会话上的SQL执行情况:

SELECT @dt_ts:=UNIX_TIMESTAMP(NOW());
SELECT
@dt_timer:=MAX(SH.TIMER_START)
FROM performance_schema.threads AS T1
INNER JOIN performance_schema.events_statements_history AS SH
ON T1.`THREAD_ID`=SH.`THREAD_ID`
WHERE T1.PROCESSLIST_ID=CONNECTION_ID(); SELECT
SH.CURRENT_SCHEMA AS database_name,
REPLACE(REPLACE(REPLACE(SH.`SQL_TEXT`,'\n',' '),'\r',' '),'\t',' ') AS executed_sql,
FROM_UNIXTIME(@dt_ts-CAST((@dt_timer-SH.TIMER_START)/1000000000000 AS SIGNED)) AS start_time,
FROM_UNIXTIME(@dt_ts-CAST((@dt_timer+SH.TIMER_END)/1000000000000 AS SIGNED)) AS end_time,
(SH.TIMER_END-SH.TIMER_START)/1000000000000 AS used_seconds,
SH.TIMER_WAIT/1000000000000 AS wait_seconds,
SH.LOCK_TIME/1000000000000 AS lock_seconds,
SH.ROWS_AFFECTED AS affected_rows,
SH.ROWS_SENT AS send_rows
FROM performance_schema.threads AS T1
INNER JOIN performance_schema.events_statements_history AS SH
ON T1.`THREAD_ID`=SH.`THREAD_ID`
WHERE T1.PROCESSLIST_ID=946364
AND SH.TIMER_START<@dt_timer
ORDER BY SH.TIMER_START ASC;

输出效果如下:

+------------------------------------+---------------------+---------------------+--------------+---------------+-----------+
| SQL_TEXT | start_time | end_time | used_seconds | affected_rows | send_rows |
+------------------------------------+---------------------+---------------------+--------------+---------------+-----------+
| select sleep(5) | 2019-07-29 19:59:55 | 2019-07-29 20:00:00 | 5.0003 | 0 | 1 |
| insert into tb001(c1,c2)select 2,4 | 2019-07-29 20:01:26 | 2019-07-29 20:01:26 | 0.0002 | 1 | 0 |
| insert into tb001(c1,c2)select 2,4 | 2019-07-29 20:04:34 | 2019-07-29 20:04:34 | 0.0001 | 1 | 0 |
+------------------------------------+---------------------+---------------------+--------------+---------------+-----------+

扩展:MySQL Transaction--查看未提交事务执行的SQL

MySQL Processlist--查看会话执行过的SQL情况的更多相关文章

  1. Jmeter连接MySQL配置(能执行多条sql语句)

    Database URL为MySQL的连接串,如果要执行多条SQL语句,后面还要添加“?allowMultiQueries=true”

  2. MySQL开启日志记录执行过的SQL语句

    当需要分析执行过的SQL语句来判断问题,可以通过打开查询日志功能,但是重启MySQL服务后需要重新配置. 查询日志查询功能: SHOW VARIABLES LIKE 'general%'; gener ...

  3. MySql使用show processlist查看正在执行的Sql语句

    今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...

  4. Mybatis+MySql 一个标签中执行多条sql语句 这个坑 ,我心中有一句MMP

    解决办法 转自网友: 亲测 解决了问题@ MySql默认是不支持这种骚操作的,但是并不代表不能实现,只需要在jdbc的配置文件中稍做配置: driver=com.mysql.jdbc.Driverur ...

  5. Mybatis+MySql 一个标签中执行多条sql语句

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/cxfly957/article/details/77896590 MySql默认是不支持这种骚操作的 ...

  6. 如何查看sqlalchemy执行的原始sql语句?

    SQLAlchemy打开SQL语句方法如下,echo=true将开启该功能: engine = create_engine("<db_rul>", echo=True) ...

  7. mysql 如何查看sql语句执行时间

    查看执行时间 1 show profiles; 2 show variables;查看profiling 是否是on状态: 3 如果是off,则 set profiling = 1: 4 执行自己的s ...

  8. mysql查杀会话

    root登陆mysql,查看会话(show processlist\G;): mysql> kill

  9. mysql查看正在执行的sql语句

    有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; ...

随机推荐

  1. 2的幂和按位与&——效率

    以前学生时代,只是完成功能就行,进入公司之后,由于产品的特殊性,需要非常考虑效率,发现有以下几个策略(该文不定时更新): hash%length==hash&(length-1)的前提是len ...

  2. mybatis如何接受map类型的参数

    Mybatis传入参数类型为Map   mybatis更新sql语句: ? 1 2 3 4 5 6 7 8 9 <update id="publishT00_notice" ...

  3. python 根据生日计算年龄 sqlalchemy根据身份证号计算生日 性别

    import datetime '): birth_d = datetime.datetime.strptime(birth_s, "%Y%m%d") today_d = date ...

  4. [ ceph ] BlueStore 存储引擎介绍

    为什么需要 BlueStore 首先,Ceph原本的FileStore需要兼容Linux下的各种文件系统,如EXT4.BtrFS.XFS.理论上每种文件系统都实现了POSIX协议,但事实上,每个文件系 ...

  5. Android 问题解决 HorizontalScrollView显示不全(转)

    原链接:https://www.jianshu.com/p/003adbcaff9d Android 问题解决 HorizontalScrollView显示不全 <HorizontalScrol ...

  6. logback不同业务的日志打印到不同文件

    logback不同业务的日志打印到不同文件    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mggwct/article/details/777 ...

  7. vs2017 vs2019 打开cs文件提示无法识别的GUID格式

    总结一句话 no zuo no die. 是我自己在注册表中给vs增加了自动以管理员身份运行,把值给错了,弄成了 ~ RUNASADMIN WIN7RTM, 改成 ~ RUNASADMIN 后OK.还 ...

  8. 解决chrome浏览器插件开发者模式每次启动要确认弹出框的问题

    在日常工作中,我们经常会用到一些浏览器插件,有些插件因为没上架到浏览器的应用商店,只能以开发者模式运行,但是chrome浏览器出了限制,每次重新启动浏览器的时候,就会弹出该插件是否要禁止运行的对话框, ...

  9. myssl.com SSL 检测

    配置正确了,就正常了. 与证书关系不大.

  10. python学习-30 总结

    小结 1.map函数: 处理序列中的每个元素,得到结果是一个‘列表’,该‘列表’元素个数及位置与原来一样 2.filter:遍历序列中的每个元素,判断每个元素得到的布尔值,如果是True则留下来,例如 ...