SHOW ENGINE INNODB STATUS中的Transaction not started是什么意思?

8

以下是“SHOW ENGINE INNODB STATUS;”的几行响应:


TRANSACTIONS
------------
Trx id counter 58EC54C6
Purge done for trx's n:o < 58EC54C3 undo n:o < 0
History list length 2420
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 58EC51E6, not started
MySQL thread id 520131, OS thread handle 0x7f0db930e700, query id 24011015 108.89.56.87 xyz
---TRANSACTION 58EC527E, not started
MySQL thread id 520061, OS thread handle 0x7f0dbb596700, query id 24011370 108.89.56.87 xyz
---TRANSACTION 58EC53AC, not started
MySQL thread id 520065, OS thread handle 0x7f0dbb28a700, query id 24012094 108.89.56.87 xyz
---TRANSACTION 58EC50CE, not started
MySQL thread id 520109, OS thread handle 0x7f0dbba69700, query id 24010431 108.89.56.87 xyz    ---TRANSACTION 58EC51E8, not started
MySQL thread id 520123, OS thread handle 0x7f0dbb4d3700, query id 24011016 108.89.56.87 xyz    ---TRANSACTION 58EC51D0, not started
MySQL thread id 520072, OS thread handle 0x7f0db865c700, query id 24010944 108.89.56.87 xyz
---TRANSACTION 58EC5184, not started
MySQL thread id 520058, OS thread handle 0x7f0db8c74700, query id 24010807 108.89.56.87 xyz

我想知道“Transaction transId, not started”是什么意思?是否有查询未能执行?
我正在使用InnoDB。同时,我没有手动启动事务。因为我在一个包含大量数据的表上发出了更新查询,所以它会自动考虑事务。在5-10分钟内,这个单一表格上会有几百个MySQL更新查询。
请告诉我“Transaction not started”到底是什么意思?它是显示失败的查询还是正常的日志?
提前感谢!
2个回答

16

当一个线程(~连接)在事务期间需要锁定某些数据时,会创建一个事务“对象”(~上下文)。该事务“对象”并不会在事务结束时被销毁,而是在同一线程开始新的事务时被重复使用。

每个显示为未开始的事务都是属于一个线程拥有的事务“对象”,该线程目前没有进入事务(更精确地说,它不需要为事务维护单独的上下文)。

线程ID是在发出SHOW PROCESSLIST命令时在Id列中显示的ID。

这种情况无需担心,实际上这是正常行为。


2
我在互联网上找到了这个:

InnoDB什么时候开始事务?

2011年1月11日,Peter Zaitsev

9条评论 inShare1

InnoDB什么时候开始事务?答案看起来很显然——当您发出“BEGIN”命令时。然而,从引擎的角度来看,这是错误的答案。运行“SHOW INNODB STATUS”,您将在事务列表中看到“未启动”的状态。

来自这里

对于MySQL的每个连接,如果该连接没有活动的InnoDB事务,则会出现未启动状态,否则为活动状态。请注意,即使连接处于“Sleep”阶段,如果它是多语句事务,则事务也可以处于活动状态。 InnoDB还将打印OS thread_id和进程ID,这可能有助于您使用gdb连接到正在运行的mysqld进行故障排除等操作。此外,报告了事务状态,这基本上是事务正在执行的操作,它可以是“获取行”,“更新”和其他几个值。

来源在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接