暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 8.0 如何显示长事务

原创 Shubing Wu 2022-10-19
574

最近,有人问我如何在MySQL中找到长时间运行的事务。

我已经有一个MySQL Shell插件允许找到当前事务并按时间进行排序。该插件还允许你获得所需事务的详细信息。详情可看check.getRunningStatements().

让我们看看如何轻松地找到那些对dba来说是噩梦的长事务((see MySQL History List Length post)。

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;


我们可以看到,目前我们有一个活动事务打开了超过43分钟,但似乎什么都没有做。

休眠会话实际上是那些引起最多问题的会话,因为它们可能是已被遗忘的交互会话,默认情况下将存在很长很长时间(8小时,interactive_timeout)。

如果启用了该工具,还可以列出该事务中执行的语句(默认限制为10条,即performance_schema_events_statements_history_size):

UPDATE performance_schema.setup_consumers 
       SET enabled = 'yes' 
  WHERE name LIKE 'events_statements_history_long' 
     OR name LIKE 'events_transactions_history_long';

现在启用了该功能,我们可以使用以下语句查看所有新事务的历史记录:

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再次包含了我们需要的所有内容。

享受MySQL,避免长事务!


原文标题:MySQL 8.0: How to display long transactions

原文作者:LEFRED

原文地址:https://lefred.be/content/mysql-8-0-how-to-display-long-transactions/



最后修改时间:2022-10-20 11:42:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论