首页 > 数据库 >MYSQL长事务排查

MYSQL长事务排查

时间:2024-08-22 12:15:30浏览次数:9  
标签:tmp 事务 thread trx ID 排查 blocking MYSQL id

查看造成等待的事务执行SQL

SELECT
  tmp.waiting_thread '等待线程 ID',
  tmp.waiting_trx_id '等待事务 ID',
  tmp.wating_trx_state 等待事务状态,
  tmp.waiting_query 等待语句,
  case 
	when (tmp.waiting_time - 28800) > 0 then (tmp.waiting_time - 28800)
	else tmp.waiting_time
  end as 等待时间,
  p.HOST 阻塞连接,
  tmp.blocking_thread '阻塞线程 ID',
  tmp.blocking_trx_id '阻塞事务 ID',
  tmp.blocking_trx_state 阻塞事务状态,
  case 
	when (tmp.blocking_exe_time - 28800) > 0 then (tmp.blocking_exe_time - 28800)
	else tmp.blocking_exe_time
  end as 阻塞事务运行时间,
  IFNULL( blocking_query, c.SQL_Text ) 阻塞语句,
  c.current_schema 阻塞表
FROM
  (
  SELECT
    r.trx_state wating_trx_state,
    r.trx_id waiting_trx_id,
    r.trx_mysql_thread_Id waiting_thread,
    r.trx_query waiting_query,
    b.trx_state blocking_trx_state,
    b.trx_id blocking_trx_id,
    b.trx_mysql_thread_id blocking_thread,
    b.trx_query blocking_query,
	timestampdiff( SECOND, r.trx_wait_started, CURRENT_TIMESTAMP ()) as waiting_time,
	timestampdiff( SECOND, r.TRX_STARTED, CURRENT_TIMESTAMP ()) as blocking_exe_time
  FROM
    information_schema.innodb_lock_waits w
    INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
    INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id 
  ) tmp
  LEFT JOIN information_schema.PROCESSLIST p ON tmp.blocking_thread = p.id
  LEFT JOIN PERFORMANCE_SCHEMA.threads t ON t.PROCESSLIST_ID = p.id
  LEFT JOIN PERFORMANCE_SCHEMA.events_statements_current c ON t.thread_id = c.THREAD_ID

  

  

查看长事务的连接信息

SELECT
  t.thread_id 线程ID,
  t.processlist_id 会话ID,
  t.processlist_user 用户,
  t.processlist_host 用户地址,
  t.processlist_db 数据库,
  p.command 会话状态,
  e.STATE 事务状态,
  e.timer_wait 事务持续时长,
  p.current_statement 执行语句
FROM
  PERFORMANCE_SCHEMA.events_transactions_current  e
  left JOIN PERFORMANCE_SCHEMA.threads t on t.thread_id = e.thread_id
  LEFT JOIN sys.PROCESSLIST p ON p.thd_id = t.thread_id
WHERE
  t.type = "FOREGROUND"
  and e.STATE = "ACTIVE"
ORDER BY
  e.timer_wait DESC;

  

 查看事务相关信息

SELECT
  b.id 会话ID,
  b.USER 用户名,
  b.HOST 连接地址,
  b.db 数据库,
  a.TRX_STATE 事务状态,
  a.trx_tables_locked 表锁数量,
  a.trx_rows_locked 行锁数量,
  d.SQL_TEXT 已执行语句,
  a.TRX_QUERY 正在执行语句,
    (
    UNIX_TIMESTAMP(
    now()) - UNIX_TIMESTAMP( a.trx_started )) 事务持续时间
FROM
  information_schema.innodb_trx a
  INNER JOIN information_schema.PROCESSLIST b ON a.TRX_MYSQL_THREAD_ID = b.id 
  AND b.command = 'Sleep'
  INNER JOIN PERFORMANCE_SCHEMA.threads t ON b.id = t.PROCESSLIST_ID
  INNER JOIN PERFORMANCE_SCHEMA.events_statements_current d ON d.THREAD_ID = t.THREAD_ID

  

  

 

查看历史事务语句

SELECT
  ps.id 'PROCESS ID',
  ps.USER,
  ps.HOST,
  esh.EVENT_ID,
  trx.trx_started,
  esh.event_name 'EVENT NAME',
  esh.sql_text 'SQL',
  ps.TIME 
FROM
  PERFORMANCE_SCHEMA.events_statements_history esh
  JOIN PERFORMANCE_SCHEMA.threads th ON esh.thread_id = th.thread_id
  JOIN information_schema.PROCESSLIST ps ON ps.id = th.processlist_id
  LEFT JOIN information_schema.innodb_trx trx ON trx.trx_mysql_thread_id = ps.id 
WHERE
  trx.trx_id IS NOT NULL 
  AND ps.USER != 'SYSTEM_USER' 
ORDER BY
  esh.EVENT_ID

 

 

标签:tmp,事务,thread,trx,ID,排查,blocking,MYSQL,id
From: https://www.cnblogs.com/lucidar/p/18372664

相关文章

  • Prometheus+Grafana监控Mysql数据库
    安装配置Prometheus是Go语言编写的,所以仅依赖二进制编译库,从官网根据操作系统下载对应的二进制库:https://prometheus.io/download/解压到/usr/local/prometheus目录下tar-xzvfprometheus-2.45.2.linux-amd64.tar.gzmvprometheus-2.45.2.linux-amd64/usr/local/prometheus......
  • 深入探索分布式任务调度框架:MySQL实现高效锁机制
    本文主要介绍项目中怎么使用MySQL实现分布式锁的背景假如我们现在要做一个高性能、可扩展的分布式任务调度框架,要怎么设计呢?下面是我之前自己设计的一个架构图。为了方便后续的分布式锁的设计,我们大致描述下各个角色都做了哪些事情(这不是本篇文章的重点)scheduler-c......
  • setupres.dll丢失解决方案速递:全面修复流程,从简易排查至高级修复策略
    遇到setupres.dll文件丢失问题,可以按照以下步骤尝试修复:1.系统文件扫描:首先,利用系统自带的文件检查工具来修复潜在的系统文件问题。打开命令提示符(以管理员身份运行),输入sfc/scannow并回车,等待扫描并修复完成。2.Windows更新:确保操作系统是最新版本,因为有时这类问题可通......
  • Mysql锁查看
    查看InnoDB的锁情况SHOWENGINEINNODBSTATUS;命令会返回一个包含详细InnoDB引擎状态的报告,其中包含当前锁的详细信息。在输出的LATESTDETECTEDDEADLOCK部分找到死锁信息,并在TRANSACTIONS部分找到当前的锁等待信息。查看MyISAM锁情况--方法一:查看表锁SHOWOPEN......
  • Mac导出Mysql千万级表数据
    MysqlDumpmysqldump-h[服务器地址]-u[用户名]-p[密码]--single-transaction--quick[数据库名][表名]>[导出文件.sql]•--single-transaction保证了数据的一致性,并且不会在导出期间锁定表(只针对InnoDB有效)。•--quick选项进一步减少了内存使用,因为它逐行导出数......
  • Windows-安装MySQL数据库
    mysql安装:11.将zip包解压到指定目录,例如:D:\tools\mysql-8.0.18-winx64注:不放到C硬盘,win10系统权限不够会报错,麻烦2.复制改变my.ini文件放在目录:D:\tools\mysql-8.0.18-winx64\bin,并添加相关配置(给的文件中配置内容已经都有了)注1:my.ini配置文件里面非注释语句不要有“”双引......
  • 京东面试:mysql分库分表,深度翻页太慢,如何解决
    京东面试:mysql分库分表,深度翻页太慢,如何解决?在40岁老架构师尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein希音、shopee、百度、网易的面试资格,遇到很多很重要的面试题:mysql分库分表,深度翻页太慢,如何解决?分库分表后,分页......
  • MySQL基本数据类型
    MySQL数据类型MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以......
  • 分布式事务解决方案
    背景分布式事务,后端开发中比较常见啦。因为在面试的时候,总是有interviewers让我给他普及一下分布式事务,虽然我会的也不多呀但是还是浅浅说一说;今天心血来潮,好好地总结一下分布式事务,希望每一位后端工程师都能彻底理解分布式事务。什么是分布式事务?答:既然是分布式,首先必然是分......
  • 银河麒麟系统V10(arm版)安装Mysql-5.7.29说明
    #银河麒麟系统适配#随着2024年微软全球蓝屏丑闻的出现,系统安全越来越重要。目前很多企业开始尝试国产化操作系统上,本文介绍如何在国产化银河麒麟系统V10(arm)版上安装mysql。本资源使用的是arm版本的Mysql-5.7.29离线安装包,能够在arm版国产化银河麒麟系统上进行安装,并配置防火......