MySQL 8.0长事务查看
2023-08-10 09:32 abce 阅读(64) 评论(0) 编辑 收藏 举报查看长时间运行的事务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | SELECT thr.processlist_id AS mysql_thread_id, concat(PROCESSLIST_USER, '@' ,PROCESSLIST_HOST) User , Command, FORMAT_PICO_TIME(trx.timer_wait) AS trx_duration, current_statement as `latest_statement` FROM performance_schema.events_transactions_current trx INNER JOIN performance_schema.threads thr USING (thread_id) LEFT JOIN sys.processlist p ON p.thd_id=thread_id WHERE thr.processlist_id IS NOT NULL AND PROCESSLIST_USER IS NOT NULL AND trx.state = 'ACTIVE' GROUP BY thread_id, timer_wait ORDER BY TIMER_WAIT DESC LIMIT 10; + -----------------+--------------------+---------+--------------+-------------------------------------------------------------------+ | mysql_thread_id | User | Command | trx_duration | latest_statement | + -----------------+--------------------+---------+--------------+-------------------------------------------------------------------+ | 3062872 | root@192.168.11.23 | Sleep | 5.13 s | NULL | | 3062771 | root@localhost | Query | 309.02 us | SELECT thr.processlist_id AS m ... ER BY TIMER_WAIT DESC LIMIT 10 | + -----------------+--------------------+---------+--------------+-------------------------------------------------------------------+ 2 rows in set (0.05 sec) |
从查看结果可以看到,有个活跃事务运行了5.13s,而且latest_statement的结果是NULL,目前什么也看不到。sleep状态的会话通常可能是引起问题的会话。他们可能是被遗忘的非活跃会话,持续存在很长时间。默认的超时设置是8小时(interactive_timeout参数设定)。
如果开启了相应的instrumentation,也可以通过performance_schema_events_statements_history_size来查看事务中执行过的语句:
开启以下两个instrumentation:
1 2 3 4 | UPDATE performance_schema.setup_consumers SET enabled = 'yes' WHERE name LIKE 'events_statements_history_long' OR name LIKE 'events_transactions_history_long' ; |
根据上面查询结果中的mysql_thread_id的值进行查看:
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT DATE_SUB(now(), INTERVAL ( SELECT variable_value FROM performance_schema.global_status WHERE variable_name= 'UPTIME' )-TIMER_START*10e-13 second ) start_time, SQL_TEXT FROM performance_schema.events_statements_history WHERE nesting_event_id=( SELECT EVENT_ID FROM performance_schema.events_transactions_current t LEFT JOIN sys.processlist p ON p.thd_id=t.thread_id WHERE conn_id=<VALUE OF mysql_thread_id COLUMN >) ORDER BY event_id; |
这会列出一些之前运行过的长事务语句。performance_schema几乎包含了我们所有想要的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2016-08-10 Create your first isolated Python environment
2016-08-10 列表解析
2016-08-10 三元操作符(即条件表达式)
2015-08-10 Oracle 12C -- 扩展varchar2、nvarchar2、和raw数据类型的大小限制
2015-08-10 Oracle 12C -- top-n查询新特性
2015-08-10 Oracle 12C -- native left outer join的加强