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免安装制作使用说明

    mysql免安装制作使用说明

    mysql免安装版本的制作方法,需要的朋友可以参考下。
    2010-08-08
  • CMD命令操作MySql数据库的方法详解

    CMD命令操作MySql数据库的方法详解

    今天小编就为大家分享一篇关于CMD命令操作MySql数据库的方法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • mysql二进制日志文件恢复数据库

    mysql二进制日志文件恢复数据库

    喜欢的在服务器或者数据库上直接操作的兄弟们你值得收藏下!不然你就悲剧了。-----(当然我也是在网上搜索的资料!不过自己测试通过了的!)
    2014-08-08
  • mysql WITH RECURSIVE语法的具体使用

    mysql WITH RECURSIVE语法的具体使用

    WITH RECURSIVE是一个用于创建递归查询的语句,本文主要介绍了mysql WITH RECURSIVE语法的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • SQL中CAST()实例之转换数据类型

    SQL中CAST()实例之转换数据类型

    CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型,下面这篇文章主要给大家介绍了关于SQL中CAST()实例之转换数据类型的相关资料,需要的朋友可以参考下
    2023-01-01
  • MySql命令实例汇总

    MySql命令实例汇总

    这篇文章主要介绍了MySql命令,结合实例分析了MySQL数据库的创建、连接及增删改查等各种常用操作的使用方法与相关注意事项,非常具有实用价值,需要的朋友可以参考下
    2015-11-11
  • Mysql启动报ERROR:2002的分析与解决

    Mysql启动报ERROR:2002的分析与解决

    这篇文章主要给大家介绍了关于Mysql启动时报ERROR:2002问题的分析与解决方法,文中通过示例代码介绍将该问题分析的非常详细,对同样遇到这个问题的朋友们具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • 浅谈Mysql insert on duplicate key 死锁问题定位与解决

    浅谈Mysql insert on duplicate key 死锁问

    本文介绍了在并发场景下的 insert on duplicate key update sql 出现的死锁,经过分析发现这种sql确实比较容易造成死锁,这篇文章就从分析死锁展开,到最终如何解决这样的问题 分享相应的思路,感兴趣的可以了解一下
    2022-05-05
  • Mysql支持的数据类型(列类型总结)

    Mysql支持的数据类型(列类型总结)

    MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述
    2016-12-12
  • MySQL数据库运维之数据恢复的方法

    MySQL数据库运维之数据恢复的方法

    本篇文章主要介绍了MySQL数据库运维之数据恢复的方法,此处总结一下恢复方案,并结合数据库的二进制日志做下数据恢复的示范。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论