Mysql 的事务和行锁、页锁

数据库 新民 2401℃ 已收录 4评论

1、Mysql 的行锁特点:

行锁偏向于InnoDB存储引擎,开销大,加锁慢;会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

InnoDB 引擎与MyISAM 引擎最大的不同有两点:一是支持事务,而是采用了行级锁。

2、事务及ACID属性:

事务是由一组SQL语句组成的逻辑处理单元,事务具体有以下4个属性,通常简称为事务的ACID 属性:

       原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全执行,要么全不执行;

      一致性(Consistent):在事务开始和完成时,数据都保持一致状态。这就意味所有相关的数据规         则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或       双向链表)也都必须是正确的;

      隔离性(Isolation): 数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独 立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然;

      持久性(Durable):事务完成之后,它对数据的修改是永久性的,即使出现系统故障也能够保持。

3、并发事务处理带来的问题:

  1. 更新丢失(Lost Update):
  2. 脏读(Dirty Reads):
  3. 不可重复读(Nos-Repeatable Reads):
  4. 幻读(Phantom Reads):

 

4、Mysql 的事务隔离级别(可重读):

5、Mysql 行锁:

InnoDB存储引擎由于实现了行级锁定,虽然在锁定机制的实现方面所带来的性能损耗可能比表级锁定更高一些,但是在整体并发处理能力方面要远远优于MyISAM 表级锁定的。当系统并发量较高的时候,InnoDB的整体性能和MyISAM 相比就会有明显的优势了。

但是,InnoDB 的行级锁定同样也有其脆弱的一面,当我们使用不当的时候,可能会让InnoDB的整体性能表现不仅不能比MyISAM 的高,甚至有可能会更差。

6、如何分析行级锁定?

通过检查 innodb_row_lock 状态变量来分析系统上的行锁的争夺情况:

        Show status like innodb_row_lock% ;

 

对各个状态的说明如下:

          Innodb_row_lock_current_waits:当前正在等待锁的数量;

          Innodb_row_lock_time:从系统启动到现在锁定的总时间长度;

          Innodb_row_lock_time_avg:每次等待所花平均时间;

          Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花时间;

          Innodb_row_lock_waits:从系统启动到现在总共等待的次数;

对于这5个状态变量,比较重要的是

           Innodb_row_lock_time_avg(等待平均时长),

           Innodb_row_lock_waits(等待总次数),

           Innodb_row_lock_time(等待总时长)

尤其是当等待次数很高,而且每次等待时长也不小的时候,我们就需要分析系统中为什么会有如此多的等待,然后根据分析结果着手制定优化计划。

    行锁优化建议:

  • 尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁,
  • 合理设计索引,尽量缩小锁的范围,
  • 尽可能较少检索条件,避免间隙锁,
  • 尽量控制事务大小,减少锁定资源量和时间长度,
  • 尽可能低级别事务隔离。

7、Mysql 页锁:

开销和加锁时间介于表锁和行锁之间:会出现死锁,

锁定粒度介于表锁和行锁之间,并发度一般。

由于页锁用的很少,就不做详细介绍了。

本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.snowruin.com/?p=1686
喜欢 (3)or分享 (0)
发表我的评论
取消评论
表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(4)条精彩评论。
  1. 朋友 交换链接吗
    bandwagonhost vps2017-07-04 16:11 回复| Google Chrome 45.0.2454.101| Windows 8.1 x64
    • 新民
      可以
      新民2017-07-12 22:04 回复| Google Chrome 53.0.2785.104| unknow
      • 已添加贵站链接,我站:https://bwhvps.com/,站名:bandwagonhost vps
        bandwagonhost vps2017-10-18 08:28 回复| Google Chrome 55.0.2883.87| Windows 8.1 x64
  2. 分享你感兴趣的资源俑鹊
    WordPress主题2017-05-20 17:59 回复| Internet Explorer 9.0| Windows 7