Mysql事物阻塞的实现

 更新时间:2024年04月11日 09:03:59   作者:be.be  
本文主要介绍了Mysql事物阻塞的实现,阻塞并不是一件坏事,其是为了确保事务可以并发且正常地运行,具有一定的参考价值,感兴趣的可以了解一下

阻塞因为不同锁之间的兼容性关系,在有些时刻一个事务中的锁需要等待另一个事务中的锁释放它所占用的资源,这就是阻塞。

阻塞并不是一件坏事,其是为了确保事务可以并发且正常地运行。在InnoDB存储引擎中,参数innodb_lock_wait_timeout用来控制等待的时间(默认是50秒),innodb_rollback_on_timeout用来设定是否在等待超时时对进行中的事务进行回滚操作(默认是OFF,代表不回滚)。参数innodb_lock_wait_timeout是动态的,可以在MySQL数据库运行时进行调整而innodb_rollback_on_timeout是静态的,不可在启动时进行修改,当发生超时,MySQL数据库会抛出一个1205的错误,需要牢记的是,在默认情况下InnoDB存储引擎不会回滚超时引发的错误异常。其实InnoDB存储引擎在大部分情况下都不会对异常进行回滚。

1、查看现有事物(锁),批量生成 kill 命令

select CONCAT('kill ', trx_mysql_thread_id, ';') as kill_command, a.*
from information_schema.innodb_trx as a 
-- where trx_query is null 

2、查看指定数据库的线程,及其对应的事物(锁),批量生成 kill 命令

select CONCAT('kill ', trx_mysql_thread_id, ';') as kill_command, a.*, b.*
from information_schema.processlist as a 
left join information_schema.innodb_trx as b
-- join information_schema.innodb_trx as b
on a.id = b.trx_mysql_thread_id 

where a.db = 'my_db'
-- and b.trx_query is null

3、查看事务超时时间

SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';

lock_wait_timeout 是一个服务器级别的参数,它用于设置所有连接在等待行级锁或表级锁时可以等待的最大时间。当连接等待的时间超过了 lock_wait_timeout 的值时,MySQL 将抛出一个错误,并终止连接。默认值为 31536000 秒(即一年)。

innodb_lock_wait_timeout 是一个存储引擎级别的参数,它仅用于设置使用 InnoDB 存储引擎的连接在等待行级锁或表级锁时可以等待的最大时间。当连接等待的时间超过了 innodb_lock_wait_timeout 的值时,InnoDB 将抛出一个错误,并终止连接。默认值为 50 秒。

建议将 innodb_lock_wait_timeout 的值设置得比较小,因为这可以有效避免因等待锁而导致的超时问题。但是,也要注意不要设置得过小,以免在高并发的情况下出现频繁的超时错误。

到此这篇关于Mysql事物阻塞的实现的文章就介绍到这了,更多相关Mysql事物阻塞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决mysql报错ERROR 1049 (42000): Unknown database ‘数据库‘的问题

    解决mysql报错ERROR 1049 (42000): Unknown dat

    对于错误代码1049(42000):Unknown database ‘数据库‘,这个错误通常表示您正在尝试访问一个不存在的数据库,本文给出了解决方法,您可以按照文中步骤进行操作,需要的朋友可以参考下
    2024-01-01
  • MySQL Server时区支持的使用

    MySQL Server时区支持的使用

    MySQL Server维护了几个时区,本文主要介绍了MySQL Server时区支持的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • MySQL IS NULL空值查询的实现

    MySQL IS NULL空值查询的实现

    MySQL 提供了 IS NULL 关键字,用来判断字段的值是否为空值,本文主要介绍了MySQL IS NULL空值查询的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • MySQL系列连载之XtraBackup 备份原理解析

    MySQL系列连载之XtraBackup 备份原理解析

    关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天本文推荐另一个备份工具innobackupex,重点给大家介绍XtraBackup 备份的相关知识,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • 解决Mysql的left join无效及使用的注意事项说明

    解决Mysql的left join无效及使用的注意事项说明

    这篇文章主要介绍了解决Mysql的left join无效及使用的注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • MySQL之浅谈DDL和DML

    MySQL之浅谈DDL和DML

    大家好,本篇文章主要讲的是MySQL之浅谈DDL和DML,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • show engine innodb status显示信息不全如何解决

    show engine innodb status显示信息不全如何解决

    执行 show engine innodb status\G 时,显示的信息不全,DEADLOCK相关信息太多,后面的都没了
    2012-11-11
  • MySQL完整性约束的定义与实例教程

    MySQL完整性约束的定义与实例教程

    数据完整性约束是对关系性模型完整性规则做某种约束条件,这篇文章主要给大家介绍了关于MySQL完整性约束的相关资料,需要的朋友可以参考下
    2021-05-05
  • MySql 查询符合条件的最新数据行

    MySql 查询符合条件的最新数据行

    这篇文章主要介绍了MySql 怎么查出符合条件的最新的数据行,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • mysql存储过程之if语句用法实例详解

    mysql存储过程之if语句用法实例详解

    这篇文章主要介绍了mysql存储过程之if语句用法,结合实例形式详细分析了mysql存储过程中if语句相关原理、使用技巧与操作注意事项,需要的朋友可以参考下
    2019-12-12

最新评论