您当前的位置: 首页 >  sql

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL高级——Mysql行锁总结、分析与优化建议

小志的博客 发布时间:2021-03-31 23:10:38 ,浏览量:0

目录
    • 一、Mysql行锁总结
    • 二、Mysql行锁分析
    • 三、Mysql优化建议
    • 四、页锁的了解

一、Mysql行锁总结
  • Innodb存储引擎由于实现了行级锁定,虽然在锁定机制的实现方面所带来的性能损耗可能比表级锁定会要更高一些,但是在整体并发处理能力方面要远远优于MyISAM的表级锁定的。当系统并发量较高的时候,Innodb的整体性能和MyISAM相比就会有比较明显的优势了。
  • 但是,Innodb的行级锁定同样也有其脆弱的一面,当我们使用不当的时候,可能会让Innodb的整体性能表现不仅不能比MyISAM高,甚至可能会更差。
二、Mysql行锁分析

1、如何分析Mysql行锁定

#分析行锁定的sql
show status like 'innodb_row_lock%';

在这里插入图片描述 2、分析行锁定对各个状态量的说明如下:(红色表示比较重要的参数)

状态解释Innodb_row_lock_current_waits当前正在等待锁定的数量 Innodb_row_lock_time从系统启动到现在锁定总时间长度 Innodb_row_lock_time_avg每次等待所花平均时间Innodb_row_lock_time_max从系统启动到现在等待最常的一次所花的时间 Innodb_row_lock_waits系统启动后到现在总共等待的次数
  • 注意:当等待次数很高,而且每次等待时长也不小的时候,我们就需要分析系统中为什么会有如此多的等待,然后根据分析结果着手指定优化计划。

3、查询正在被锁阻塞的sql语法。

SELECT * FROM information_schema.INNODB_TRX

在这里插入图片描述

三、Mysql优化建议
  • 尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。
  • 尽可能较少检索条件,避免间隙锁
  • 尽量控制事务大小,减少锁定资源量和时间长度
  • 锁住某行后,尽量不要去调别的行或表,赶紧处理被锁住的行然后释放掉锁。
  • 涉及相同表的事务,对于调用表的顺序尽量保持一致。
  • 在业务环境允许的情况下,尽可能低级别事务隔离
  • 开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
四、页锁的了解
  • 开销和加锁时间界于表锁和行锁之间;会出现死锁;
  • 锁定粒度界于表锁和行锁之间,并发度一般。
关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0387s