InnoDB与MyISAM不同,它实现的是一个行级锁,而非MyISAM的表锁。锁的粒度越大,则发生死锁的概率越小、锁机制开销越小,但并发能力会越低。如果锁的粒度变细,则发生死锁的概率也会增大,锁机制的开销会更大,但是并发能力能提高。表锁是如何实现的呢,以MyISAM为例,是在每个表的结构中加入一个互斥变量记录锁状态,像:
struct Table {
Row rows[MAXROWS];
pthread_mutex_t lock;//表锁
};
这样做的好处就是锁非常简单,当操作表的时候,直接锁住整个表就行,锁机制的开销非常小。但是问题也很明显,并发量上不去,因为无论多小的操作,都必须锁整个表,这可能带来其他操作的阻塞。
行锁又是如何实现的呢,Oracle是直接在每个行的block上做标记,而InnoDB则是靠索引来做。InnoDB的主键索引跟一般的索引不太一样,Key后面还跟上了整行的数据,互斥变量也是加载主键索引上的,像
struct PK_Idx {
Row row;
pthread_mutex_t lock;//行锁
};
multimap pk_idx;
这样的形式。
这样做的好处是锁的粒度小,只锁住需要的数据不被更改,但是问题也很明显,锁的开销很大,每个主键索引上都要加上一个标记,因为锁的粒度很小,可能两个不同的操作各锁住一部分行等待对方释放形成死锁,不过这个是有办法解决的,把上锁的操作封装成原子操作就行,不过并发量会受些影响。

InnoDB行锁的实现分析相关推荐

  1. MySQL · 引擎分析 · InnoDB行锁分析

    前言 理解InnoDB行锁,分析一条SQL语句会加什么样的行锁,会锁住哪些数据范围对业务SQL设计和分析线上死锁问题都会有很大帮助.对于InnoDB的行锁,已经有多篇月报进行了介绍,这里笔者借鉴前面月 ...

  2. MySQL高级 - 锁 - InnoDB行锁 - 争用情况查看

    InnoDB 行锁争用情况 show status like 'innodb_row_lock%'; Innodb_row_lock_current_waits: 当前正在等待锁定的数量Innodb_ ...

  3. InnoDB 事务/锁/多版本分析?你了解多少?

    目录 • InnoDB事务 – 事务结构/功能 – XA事务/Group Commit – mini-transaction• InnoDB锁 – 锁结构/类型/功能 – 锁等待/死锁检测 – 自增序 ...

  4. innodb行锁理解

    innodb行锁的一些认识 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的. InnoDB这种行锁实现特点意味着:只有通过索 ...

  5. 9、 InnoDB行锁

    在 MySQL 中,InnoDB 行锁通过给索引上的索引项加锁来实现,如果没有索引,InnoDB 将通过隐藏的聚簇索引来对记录加锁. InnoDB 支持 3 种行锁定方式: 行锁(Record Loc ...

  6. MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

    MySQL中的锁概念 Mysql中不同的存储引擎支持不同的锁机制.比如MyISAM和MEMORY存储引擎采用的表级锁,BDB采用的是页面锁,也支持表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁 ...

  7. mysql InnoDB 行锁分析

    我们知道 mysql innodb 在插入更新数据时是锁行的,但这里所指的行并不是直面上说的单行,而是相对的范围的行! 引起我关注这个问题的是在做天气预报查询15天(http://tqybw.net) ...

  8. mysql隐式锁定辅助索引_当Mysql - InnoDB行锁遇到复合主键和多列索引-Go语言中文社区...

    背景 今天在配合其他项目组做系统压测,过程中出现了偶发的死锁问题.分析代码后发现有复合主键的update情况,更新复合主键表时只使用了一个字段更新,同时在事务内又有对该表的insert操作,结果出现了 ...

  9. MySQL探秘(七):InnoDB行锁算法

     在上一篇<InnoDB一致性非锁定读>中,我们了解到InnoDB使用一致性非锁定读来避免在一般的查询操作(SELECT FOR UPDATE等除外)时使用锁.然而锁这个事情是无法避免的, ...

最新文章

  1. MySQL_update同一张表
  2. 让语音助手听懂方言,这个数据集能搞定
  3. Android依赖注入:Google Guice on Android的使用及相关资源
  4. 利用CSS定位背景图片
  5. PyQt5 技术篇-鼠标移动控件显示提示,Qt Designer控件提示设置方法。
  6. java 加减乘除 工具类_Java数学工具类MathUtil详解
  7. ionic上拉加载-下拉刷新
  8. tomcat:sessionId生成机制导致tomcat启动过慢问题
  9. 介绍几个flash游戏框架
  10. arraylist扩容是创建新数组吗 java_手撕ArrayList底层,透彻分析源码
  11. use MSAgent in C#
  12. win7便签的cheat sheet
  13. js基于后台数据实现table行列合并
  14. Android开发开发时语言对照表
  15. Two‘s Complement(二进制补码)
  16. 写给在写毕业论文的你们免安装深度学习线上GPU环境准备
  17. JSP智能小区物业管理系统
  18. Java开发笔记(二)Java工程的帝国区划
  19. 切片器可以设置日期格式?_excel神器——切片器
  20. 注入修改代码,白嫖按键精灵ios手机版

热门文章

  1. 整理了一些t-sql技巧
  2. 上海交通大学c语言章节作业,上海交通大学级C语言测试题.doc
  3. 以下用于数据存储领域的python第三方库是-『爬虫四步走』手把手教你使用Python抓取并存储网页数据!...
  4. 中国最大的python社区-一个将会是国内最高品质的 Python 社区,大家一起来见证...
  5. python学习官网-Python学习(一)—— 初识python
  6. python画图-Python基础-画图:matplotlib
  7. python学起来难吗-Python入门学习难吗,新手如何学习
  8. python自学用什么书好-适合python基础学习的好书籍
  9. 如何看电脑安装了python-Python教程第1篇:查看电脑是否安装python
  10. python 数据分析学什么-学好python和数据分析有什么关系?