mysql未完成事务查看

因为MySQL的事务管理主要是基于InnoDB存储引擎的,并且事务的状态(例如,是否已提交或回滚)通常是内部的、不直接暴露给用户的,但是可以通过一些方法间接地检查或诊断与事务相关的问题

查看正在运行的事务

使用SHOW ENGINE INNODB STATUS;命令可以查看InnoDB存储引擎的状态,其中包含了关于当前正在运行的事务的信息。在输出中,你可以查找TRANSACTIONS部分,它列出了当前活跃的事务。
在这里插入图片描述

  • 我们把查询的status复制出来,看TRANSACTIONS部分,他表示当前活动的事务,包括等待和运行中的事务。
TRANSACTIONS
------------
Trx id counter 1171181
Purge done for trx's n:o < 1170292 undo n:o < 0 state: running but idle
History list length 0
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 283462706467760, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 283462706466936, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 283462706466112, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 283462706465288, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 283462706464464, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
--------

包含信息

  • Trx id:事务的唯一标识符,用于跟踪和识别特定的事务。
  • State:事务的当前状态,如RUNNINGSLEEPINGLOCK WAIT等。RUNNING表示事务正在执行,SLEEPING表示事务在等待某些条件成立(如等待锁释放),而LOCK WAIT表示事务正在等待获取锁。
  • MySQL thread id:与事务关联的MySQL线程ID,这有助于将事务与特定的客户端连接或查询关联起来。
  • OS thread id:操作系统级别的线程ID,用于在更底层进行调试和诊断。
  • Locked tables:事务当前锁定的表列表。如果事务锁定了多个表,这里会列出所有被锁定的表。
  • Type:事务的类型,例如只读事务或读写事务。
  • Started:事务开始的时间戳。

例子解读

  1. Trx id counter 1171181 表示当前事务ID计数器的值为1171181。每次InnoDB开始一个新事务时,它都会从这个计数器中获取一个新的、唯一的事务ID。

  2. Purge done for trx's n:o < 1171181undo n:o < 0 state: running but idle 意味着InnoDB的清除操作已经完成,已经清除了所有事务ID小于1171181的事务的撤销日志(undo logs)。撤销日志用于支持事务的回滚和MVCC(多版本并发控制)。running but idle状态表明清除操作当前正在运行,但当前没有执行任何任务(即它是空闲的)。

  3. History list length 0 表示历史列表的长度为0。历史列表用于跟踪已经被清除但尚未从系统表空间物理删除的撤销日志记录。长度为0表示当前没有这样的记录。

  4. LIST OF TRANSACTIONS FOR EACH SESSION: 下面的内容列出了每个会话的事务信息。在您提供的输出中,只有一个事务:

---TRANSACTION 283462706464464, not started
0 lock struct(s), heap size 1136, 0 row lock(s)

这个事务ID为283462706464464的事务尚未开始(not started)。它当前没有锁定任何结构(0 lock struct(s)),没有行级锁(0 row lock(s)),并且它的堆大小为1136字节。除此之外,我们还可能看到锁定的相关信息(mysql tables in use 1, locked 1),这个时候我们可以运行SHOW PROCESSLIST;的命令来查询哪些表在锁定中

如果未回滚的事务,TRANSACTIONS部分中状态为RUNNINGLOCK WAIT的事务,并且这些事务可能已经持续了一段时间

查看数据库进程

SHOW PROCESSLIST; 是一个在 MySQL 和 MariaDB 数据库管理系统中常用的命令。这个命令用于显示当前在服务器上运行的所有进程列表。这些进程可能包括正在执行的查询、正在等待的查询、休眠状态的线程等。

例子

SHOW PROCESSLIST;

在这里插入图片描述

字段解释

  • Id: 进程的唯一标识符。
  • User: 执行该进程的 MySQL 用户。
  • Host: 用户的主机名或 IP 地址。
  • db: 当前数据库的名称(如果有的话)。
  • Command: 进程正在执行的命令类型(例如,SleepQueryBinlog Dump 等)。
  • Time: 进程已经运行的时间(以秒为单位)。
  • State: 进程的当前状态(例如,runningWaiting for table metadata lock 等)。点击
    • 如果查询正在执行,State的值可能是running
    • 如果查询正在等待资源或锁,State的值可能是Waiting for table metadata lock;
    • 如果连接处于空闲状态,State的值可能是Sleep
  • Info: 进程正在执行的 SQL 查询(如果有的话)。
  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值