Mysql 找出未提交事务的SQL及死锁

MYSQL数据库出现死锁如何排查 排查 MySQL 死锁的关键步骤是:查看死锁日志、分析涉及的 SQL 查询、优化事务设计和 SQL 查询、减少事务持锁时间以及确保正确的事务隔离级别和访问顺序。通过系统地分析和优化,能够有效减少死锁的发生,并提高数据库系统的稳定性。 阅读详情

未提交事务:

通过查看information_schema.INNODB_TRX视图,您可以了解当前系统中正在运行的事务情况,从而进行问题排查和性能优化。

SELECT * FROM information_schema.innodb_trx;

通过trx_state为RUNNIG,trx_started判断是否有一直RUNNING的事务。

如果有未提交事务,查询具体执行的sql如下:

SELECT t.trx_mysql_thread_id                        AS connection_id
      ,t.trx_id                                     AS trx_id          
      ,t.trx_state                                  AS trx_state        
      ,t.trx_started                                AS trx_started     
      ,TIMESTAMPDIFF(SECOND,t.trx_started, now())   AS "trx_run_time(s)"  
      ,t.trx_requested_lock_id                      AS trx_requested_lock_id
      ,t.trx_operation_state                        AS trx_operation_state
      ,t.trx_tables_in_use                          AS trx_tables_in_use
      ,t.trx_tables_locked                          AS trx_tables_locked
      ,t.trx_rows_locked                            AS trx_rows_locked
      ,t.trx_isolation_level                        AS trx_isolation_level
      ,t.trx_is_read_only                           AS trx_is_read_only
      ,t.trx_autocommit_non_locking                 AS trx_autocommit_non_locking
      ,e.event_name                                 AS event_name
      ,e.timer_wait / 1000000000000                 AS timer_wait
      ,e.sql_text 
FROM   information_schema.innodb_trx t, 
       performance_schema.events_statements_current e, 
       performance_schema.threads c 
WHERE  t.trx_mysql_thread_id = c.processlist_id 
   AND  e.thread_id = c.thread_id;

结果如下:

死锁:

查看Lock的Table:

SELECT * FROM performance_schema.data_locks;

也可以通过show engine innodb status; 查看详细DEADLOCK信息。

MySql--死锁 接着,事务B也尝试更新第一行记录,但是由于事务A还提交,第一行记录被锁住。当发生死锁时,MySQL会自动选择其中一个事务作为死锁的牺牲者,回滚该事务,并释放锁定的资源,从而解除死锁MySQL会检测到死锁的情况,并自动选择一个事务作为死锁的牺牲者,将其回滚以解决死锁问题。MySQL死锁是指多个事务同时持有不同的资源,并且互相请求对方的资源,导致无法继续进行下去的情况。重试机制:当捕捉到死锁错误时,可以在代码中添加重试机制,即重新执行被阻塞的事务,直到没有死锁发生为止。一、什么是mysql死锁 阅读详情

相关推荐

MySQL找出提交事务信息的方法分享

主要给大家介绍了关于MySQL如何找出提交事务信息的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

MySQL如何查看提交事务SQL

点击上方蓝字关注我MySQL中经常遇到事务中的SQL正在执行或执行完成后提交,如何找出对应的SQL?1. 查看正在执行的SQL查看事务中正在执行的SQL方式有多种,例如1.1 通过processlist查看会话1:执行1个SQLmysql> begin; Query OK, 0 rows affected (0.00 sec) mysql>selectsleep(20),n...

gjc592的博客 5069

MySQL 找出提交事务的信息

processlist 中的提交事务、information_schema.innodb_trx 中的提交事务、performance_schema.events_statements_current 中的提交事务事务锁信息

wzy0623的专栏 5857

mysql完成事务查看

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

youhebuke225的博客 2966

MySql 查看提交事务

MySql 查看提交事务

weixin_42537012的博客 7153

嵌套事务导致mysql死锁_解决MySQL事务提交导致死锁报错 避免死锁的方法

解决mysql 事务提交导致死锁报错:当 sessionA 尝试修改 B 表数据,因为 sessionB 当前为锁定状态,而且 sessionB 对 B 表中数据具有锁定状态中,则出现死锁。sessionB 会自动终止尝试修改 A 表数据事务, 两个事务操作都被终止,并返回下面错误信息。ERROR 1205 (HY000): Lock wait timeout exceeded; try res...

weixin_29728529的博客 1394

解决数据库事务提交等造成的死锁

程序bug或者慢sql都可能会造成死锁等问题,在这里整理了一些解决这类问题的方法 1.查看当前连接Id(线程Id) select connection_id(); 2.可以通过查看表information_schema.innodb_lock,获取锁的状态 select * from information_schema.innodb_locks; 3.查看系统参数锁超时时间 innodb_loc...

pleaseQuiet的博客 2428

MySQL事务事务隔离级别、死锁

例如:两个会话中的事务在更新数据时,语句顺序不同,会发生死锁事务1的更新1执行后,执行事务2的更新1,再执行事务2的更新2时,会等待事务1释放更新1的锁。事务1执行更新2时又要等待事务2释放更新1的锁。彼此之间握住了对方需要的锁,发生死锁。当不同事物因握住彼此事物需要的锁,两个事物都一直在等待对方,永远无法释放锁。两个事务互相锁住了对方将要操作的数据。隔离级别越高,会有越重的性能和可扩展性的问题。隔离级别越低,更容易并发,会有更多用户可以在同时接触到同一数据。查看当前隔离级别:默认是可重复读。

xuwuuu的博客 1333

MySQL死锁日志的查看和分析

目录 一,关于MySQL死锁 二,人造一个死锁的场景 三,查看最近一次死锁的日志 四,死锁日志的内容 1,事务1信息 2,事务1持有的锁 3,事务1正在等待的锁 4,事务2信息 5,事务2正在持有的锁 6,事务2正在等待的锁 7,死锁处理结果 五,关于mysql的八种锁 1,行锁(Record Locks) 2,间隙锁(Gap Locks) 3,临键锁(Next-key Locks) 4,共享锁/排他锁(Shared and Exclusive Locks) 5,意向共享

lkforce 3万+

mysql事务提交导致MySQLTransactionRollbackException: Lock wait timeout

1.问题原因 在使用spring手工开启事务的时候没有提交或者回滚。 2.解决方法 1.确定是否锁表 select * from information_schema.innodb_locks; 2.查询正在锁的事务 select * from information_schema.innodb_locks; 3.查询等待锁的事务 select * from information_schem...

weixin_43328357的博客 3822

mysql——如何解决事务提交导致锁等待

背景 有一次同事使用 Navicat for MySQL 软件对某个表进行了 开启事物,导致我们一直查询不出数据。 这种情况在平时项目也会出现 事物提交的情况。 那么问题来了,事物提交导致锁等待如何解决? 接下来分析定位及如何解决问题: 查看当前连接Id(线程Id) select connection_id(); 可以通过查看表information_schema...

在此立一个IT职业上的flag:https://github.com/Zeb-D/my-review 2万+

(六)事务提交与回滚极死锁检测、处理和预防

事务提交与回滚极死锁检测、处理和预防 (一)MySQL InnoDB事务模型 (二)MySQL InnoDB锁模型 (三)MySQL InnoDB非锁定一致性读与锁定读 (四)MySQL InnoDB锁类型及幻象读问题 (五)MySQL InnoDB中各类语句加锁方式 (六)事务提交与回滚极死锁检测、处理和预防 事务提交与回滚 默认情况下,MySQL开启自动提交,每条语句执行

刀刀的专栏 7668

解决MySQL事务提交导致死锁报错 避免死锁的方法

解决mysql 事务提交导致死锁报错:        当 sessionA 尝试修改 B 表数据,因为 sessionB 当前为锁定状态,而且 sessionB 对 B 表中数据具有锁定状态中,则出现死锁。sessionB 会自动终止尝试修改 A 表数据事务, 两个事务操作都被终止,并返回下面错误信息。ERROR 1205 (HY000): Lock wait timeout exceeded;...

许恒的博客 2万+

mysql 事务提交导致锁等待如何解决

查看当前连接Id(线程Id) select connection_id();   可以通过查看表information_schema.innodb_lock,获取锁的状态 select * from information_schema.innodb_locks;   查看系统参数锁超时时间 innodb_lock_wait_timeout show variables like i...

weixin_42735327的博客 1155

MySQL 死锁问题排查与分析

数据库管理系统中,死锁是一个常见且棘手的问题。当两个或多个事务相互等待对方释放资源时,就会发生死锁,导致事务无法继续执行,严重时甚至会影响整个系统的稳定性。MySQL作为广泛使用的关系型数据库管理系统,也不例外。本文将详细介绍在遇到MySQL死锁问题时,如何进行排查和分析,帮助读者快速定位问题并采取有效措施解决死锁问题。 1. 死锁的基本概念 1.1 死锁的定义 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种僵持状态,若无外力作用,这些事务将无法继续执行。 1.2 死锁的四个必要条件

My_wife_QBL的博客 6213

mysql死锁释放时间参数_【Mysqlmysql 事务提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法...

问题场景问题出现环境:1、在同一事务内先后对同一条数据进行插入和更新操作;2、多台服务器操作同一数据库;3、瞬时出现高并发现象;不断的有一下异常抛出,异常信息:org.springframework.dao.CannotAcquireLockException:### Error updating database. Cause: java.sql.SQLException: Lock wait ...

weixin_39797686的博客 2125

MySQL 事务死锁排查:从日志分析到解决实战

比如电商平台的并发下单场景,若两个订单同时操作同两个商品的库存,就可能出现 “事务 A 锁商品 1 等商品 2,事务 B 锁商品 2 等商品 1” 的死锁。此时两个事务进入无限等待,MySQL 会检测到死锁并终止其中一个事务(“牺牲者”),释放其持有的锁,让另一个事务继续执行。以上述商品库存为例,无论业务顺序如何,强制两个事务都先更新 id 小的商品,再更新 id 大的商品:​。死锁排查的核心是 “通过日志找到锁竞争关系”,解决的关键是 “破坏死锁的必要条件”。长事务会持有锁更久,增加死锁概率。

qq_37782946的博客 1200

mysql事物超时回滚_Mysql死锁引起的事务回滚问题

今天之前的同事问我,之前我负责的系统出现了MySQL异常,但是事务却没有回滚,事务前半部分执行的SQL数据库能看到,日志信息如下org.springframework.dao.DeadlockLoserDataAccessException:### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTran...

weixin_30592887的博客 991
上一篇: C专家编程【美】Peter Van Der Linden
梦想272
博客等级 码龄19年 24粉丝 · 23原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值