mysql锁表原因及解决

这篇具有很好参考价值的文章主要介绍了mysql锁表原因及解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mysql锁表原因及解决

问题如图

mysql锁表原因及解决

锁表发生原因

  • 锁表发生在 insert、update、delete中;
  • 锁表的原理是数据库使用独占式锁机制,当执行上面的语句时,对表进行锁住,直到发生commit或者rollback或者退出数据库用户
  • 锁表的原因:
    • A程序执行了对table_1insert、update、delete,并还未commit时,B程序也对table_1进行insert、update、delete`时会发生资源正忙的异常,也就是锁表;
    • 锁表常发生与并发而不是并行(并行时,一个线程操作数据库时,另一个线程是能操作数据库的,cpu和i/o分配原则)
    • 锁表也发生在事务嵌套,外层事务对table_1进行了insert、update、delete内层事务(PROPAGATION_REQUIRES_NEW)也对table_1进行了insert、update、delete,内层事务commit的时需要等待外层事务先commit释放资源(但是是不可能的),最终导致死锁(本次问题就是事务嵌套导致)。多查几次SELECT * FROM information_schema.innodb_trx ;如果锁跟着业务结束(connect超时)锁没了,那么基本上可以确定是业务代码导致,需要分析业务代码。

mysql锁表解决

-- 找到超时的表,查询超时的SQL
SELECT * FROM information_schema.innodb_trx ;

-- 查看当前被使用的表,查询是否有锁表
-- SHOW OPEN TABLES:列举在表缓存中当前被打开的非TEMPORARY表。
-- In_use:表当前被查询使用的次数。如果该数为零,则表是打开的,但是当前没有被使用。
show OPEN TABLES where In_use > 0;
-- 查询全局等待事务锁超时时间
SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';
 
-- 设置全局等待事务锁超时时间
SET  GLOBAL innodb_lock_wait_timeout=100;
 
 
-- 查询当前会话等待事务锁超时时间
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';

-- 查看进程id,然后用kill id杀掉进程
show processlist;
SELECT * FROM information_schema.PROCESSLIST;

-- 查询正在执行的进程
SELECT * FROM information_schema.PROCESSLIST where length(info) >0 ;

-- 查看被锁住的
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

-- 等待锁定
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

-- innodb_locks表在8.0.13版本中由performance_schema.data_locks表所代替,innodb_lock_waits表则由performance_schema.data_lock_waits表代替

-- 杀掉锁表进程
kill 5601
 

事务嵌套引起的死锁

这时候就不能简单的kill掉进程了,需要review代码,找出问题代码文章来源地址https://www.toymoban.com/news/detail-485679.html

到了这里,关于mysql锁表原因及解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle锁表解决方法

    今天就整理了一下简单的Oracle解锁和查询锁表的方法; 一、首先PLSQL以管理员的账号(system/admin等)登录 二、查看被锁表信息 三、杀掉锁表进程 四、查看数据库引起锁表的语句

    2024年02月13日
    浏览(33)
  • 【MySQL】说透锁机制(三)行锁升表锁如何避免? 锁表了如何排查?

    在上文我们曾小小的提到过,在 索引失效 的情况下,MySQL会把 所有聚集索引记录和间隙 都锁上,我们称之为 锁表 ,或叫 行锁升表锁 . 那么对于 行锁升表锁 ,有的同学误以为 行锁 升级变成了 表锁 ,但实际上 锁的类型并没有发生变化 ✍️, 还是行锁! 只是表的所有聚集

    2024年04月10日
    浏览(38)
  • 【用Percona Toolkit给mysql大表在不锁表的情况下建索引】

    共分为两步骤: 配置仓库 安装文档1 安装 安装文档2 由于mysql8默认使用的是caching_sha2_password,认证方式,而Percona Toolkit在centos7中使用的perl-dbd-mysql版本目前是4.023,暂时不支持这种认证方式,因此需要在mysql中新建一个以mysql_native_password认证的用户 建立索引 根据提示输入密码

    2024年02月07日
    浏览(38)
  • MySQL 主从延迟的常见原因及解决方法

    承蒙大家的支持,刚上市的《MySQL实战》已经跃居京东自营数据库图书热卖榜第 1 名,收到的反馈也普遍不错。 对该书感兴趣的童鞋可通过右边的链接购买。目前,京东自营有活动,只需 5 折。 主从延迟作为 MySQL 的痛点已经存在很多年了,以至于大家都有一种错觉:有 MyS

    2023年04月19日
    浏览(36)
  • macOS 下mysql不能启动,原因及解决办法

    如果 macOS 上的 MySQL 无法启动,可能会有多种原因,以下是一些常见的解决方法: 1.确保 MySQL 已经正确安装并已经启动。可以尝试使用命令 brew services start mysql 启动 MySQL。 2.检查是否有其他进程在占用 MySQL 的端口。可以使用命令 sudo lsof -i :3306 查看是否有进程在使用该端口,

    2024年02月11日
    浏览(45)
  • 报错处理:MySQL报错解决:连接失败原因与解决方案

    大家好,今天我来分享一下在Linux上遇到的一个MySQL连接失败的报错以及解决方法。如果你在尝试连接MySQL数据库时遇到以下报错信息:“Can’t connect to MySQL server on ‘localhost’ (111)”,那么请接着往下看,我会帮你找到可能的原因和解决方案。 一、问题描述 这个报错信息通常

    2024年02月04日
    浏览(44)
  • docker中mysql容器自动停止原因及解决方法

     第一步:查询已被停止的mysql docker ps -a  第二步:查询日志 dmesg | grep mysql 得出原因:mysql使用的内存过多,导致系统杀死了对应的进程(本服务器内存为1G) 第三步:重启mysql 依据 docker ps -a 能查出容器id 启动命令: docker start 容器id 第四步:mysql启动后设置限制内存 在宿主

    2023年04月08日
    浏览(34)
  • Mysql报错:too many connections原因及解决方法

    1、原因是mysql连接数过多 解决方案: 1、linux登录mysql: 2、查看mysql允许的最大连接数 3、查看这次mysql服务启动到现在,同一时刻最多mysql有多少连接 4、修改mysql最大连接数 5、以上步骤修改后虽然能登录,但仍有隐患,我们应该把那些sleep的连接杀掉 (1)查看所有连接状态

    2024年02月10日
    浏览(57)
  • Mysql与SeaweedFS数据不同步问题产生原因及解决办法

    在数据库和文件存储系统之间保持一致性是数据管理中的一个关键问题。这篇文章将专注于Mysql和SeaweedFS(一种快速、简单和高效的分布式存储系统)之间数据不同步的问题,探讨可能的原因并提出相应的解决策略。 Mysql是最流行的关系型数据库管理系统之一,被广泛应用于

    2024年02月06日
    浏览(33)
  • 外部navicat无法连接mysql数据库的问题原因及解决方案

    问题起因是这样:在linux操作中的docker中部署了一个数据库,数据库启动之后,端口也映射了(创建容器时用 -p 30036:3306进行的映射),但是在外不想使用navicat连接时,怎么都连不上,本人遇到的问题如下 一、端口虽然映射了,但是服务器上的30036端口并未对外开放,因此要先开

    2024年02月07日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包