美文网首页DB优化
1-1、mysql锁机制

1-1、mysql锁机制

作者: xinput | 来源:发表于2018-07-18 21:12 被阅读18次

一、MySQL的锁

  • 表级锁:开销小,加锁快;不会死锁;粒度大,锁冲突的概率最高,并发度最低。
  • 行级锁:开销大,加锁慢;会死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
  • 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

1、表级锁(MyISAM)。

表级锁有两种模式:共享锁(Table Read Lock)和独占写锁(Table Write Lock)

  • 读操作:不会阻塞其他用户对同一表的请求,但会阻塞对同一表的写请求;
  • 写操作:对其他用户操作该表的读写都阻塞。
  • MyISAM表的读操作和写操作之间,以及写操作之间是串行的。
1-1、MyISAM的表锁
  • 1、共享读锁(S)之间是兼容的,但共享读锁(S)和排他写锁(X)之间,以及排他写锁之间(X)是互斥的,也就是说读和写是串行的。
  • 2、在一定条件下,MyISAM允许查询和插入并发执行,我们可以利用这一点来解决应用中对同一表和插入的锁争用问题。
  • 3、MyISAM默认的锁调度机制是写优先,这并不一定适合所有应用,用户可以通过设置LOW_PRIPORITY_UPDATES参数,或在INSERT、UPDATE、DELETE语句中指定LOW_PRIORITY选项来调节读写锁的争用。
  • 4、由于表锁的锁定粒度大,读写之间又是串行的,因此,如果更新操作较多,MyISAM表可能会出现严重的锁等待,可以考虑采用InnoDB表来减少锁冲突。

2、InnoDB表的锁

2-1、InnoDB两种类型的行锁
  • 共享锁(s):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
  • 排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务取得相同的数据集共享读锁和排他写锁。另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁。
  • 意向共享锁(IS):事务打算给数据行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
  • 意向排他锁(IX):事务打算给数据行加排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。

2-2、InnoDB行锁实现方式

InnoDB行锁是通过索引上的索引项来实现的,Oracle是通过在数据中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味者:只有通过索引条件检索数据,InnoDB才会使用行级锁,否则,InnoDB将使用表锁!

  • 1、InnoDB的行销是基于索引实现的,如果不通过索引访问数据,InnoDB会使用表锁。
  • 2、InnoDB间隙锁机制,以及InnoDB使用间隙锁的原因。
  • 3、在不同的隔离级别下,InnoDB的锁机制和一致性读策略不同。
  • 4、MySQL的恢复和复制对InnoDB锁机制和一致性读策略也有较大影响。
  • 5、锁冲突甚至死锁很难完全避免。
行级锁并不是直接锁记录,而是锁索引,如果一条SQL语句用到了主键索引,mysql会锁住主键索引;如果一条语句操作了非主键索引,mysql会先锁住非主键索引,再锁定主键索引。

相关文章

  • 1-1、mysql锁机制

    一、MySQL的锁 表级锁:开销小,加锁快;不会死锁;粒度大,锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢...

  • MySQL的锁机制

    MySQL锁简介 MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和...

  • MySQL的锁机制

    mysql的锁机制 1、MySQL锁的基本介绍 MyISAM:MySQL的表级锁有两种模式:表共享读锁(Table...

  • 共享 + 排他锁

    mysql锁机制分为表级锁和行级锁 ,mysql中行级锁中的共享锁与排他锁进行分享交流。 测试语法 begin; ...

  • 13.MySQL锁机制

    MySQL锁 相对于其他的数据库而言,MySQL的锁机制比较简单,最显著的特点就是不同的存储引擎支持不同的锁机制。...

  • MySQL学习

    MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。...

  • MySQL解锁与锁表

    MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。...

  • MySQL死锁及解决方案

    1 MySQL锁类型 1. MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-le...

  • MySQL表级锁和行级锁

    MySQL学习笔记(五):MySQL表级锁和行级锁 一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最...

  • MySQL锁机制漫谈(二)

    在MySQL锁机制漫谈(一)一文中,我们主要是探究了以下MySQL(主要是InnoDB)的锁的机制,但是我们平常经...

网友评论

    本文标题:1-1、mysql锁机制

    本文链接:https://www.haomeiwen.com/subject/jfmopftx.html