MySQL各存储引擎使用了3种类型的锁定机制:

1. 行级锁定(row-level) --- MyISAM、Memory、CSV

*锁定对象颗粒度最小,发生资源争用的概率最小,在并发处理能力上有较大优势。

*缺点是每次获取锁和释放锁需要做的事情很多,带来消耗大,也最容易发生死锁。

2. 表级锁定(table-level)--- Innodb、NDB Cluster

*锁定对象颗粒度最大,实现逻辑简单,获取锁和释放锁的速度很快,一次会将整个表锁定,可以很好避免死锁。

*缺点是出现资源争用的概率最高,致使并发度大打折扣。

*主要分为2种类型:读锁定和写锁定

*通过4个锁定队列来维护这2种锁定:

Current read-lock queue (lock->read) --- 存放持有读锁的所有线程,按获取到锁的时间顺序存放

Pending read-lock queue (lock->read_wait) --- 存放正在等待锁定资源的线程

Current write-lock queue (lock->write) --- 存放持有写锁的所有线程,按获取到锁的时间顺序存放

Pending write-lock queue (lock->write_wait) --- 存放正在等待锁定资源的线程

*MySQL内部实现表锁定多达11种类型,由系统中的一个枚举量(thr_lock_type)定义,各值描述如下:

IGNORE --- 当发生锁请求的时候内部交互使用,在锁定结构和队列中并不会有任何信息存储

UNLOCK --- 释放锁定请求的交互用锁类型

READ --- 普通读锁定

WRITE --- 普通写锁定

READ_WITH_SHARED_LOCKS --- 在Innodb中使用到,由如下方式产生:SELECT ... LOCK IN SHARE MODE

READ_HIGH_PRIORITY --- 高优先级读锁定

READ_NO_INSERT --- 不允许Concurrent Insert的锁定

WRITE_ALLOW_WRITE --- 当由存储引擎自行处理锁定的时候,mysqld允许其他的线程再获取读或写锁定,因为即使资源冲突,存储引擎自己也会知道怎么处理

WRITE_ALLOW_READ --- 这种锁定发生在对表做DDL(ALTER TABLE ...)的时候,MySQL可以允许其他线程获取读锁定,因为MySQL是通过重建整个表然后再RENAME而实现的该功能,所以整个过程原表仍然可以提供读服务

WRITE_CONCURRENT_INSERT --- 正在进行Concurrent Insert 时候所使用的锁定方式,该锁定进行的时候,除了READ_NO_INSERT之外的其他任何读锁定请求都不会被阻塞

WRITE_DELAYED --- 在使用INSERT DELAYED时候的锁定类型

WRITE_LOW_PRIORITY --- 显示声明的低级别锁定方式,通过设置LOW_PRIORITY_UPDAT = 1 而产生

WRITE_ONLY --- 当在操作过程中某个锁定异常中断之后系统内部需要进行CLOSE TABLE操作,在这个过程中出现的锁定类型就是WRITE_ONLY

3. 页级锁定(page-level) --- BerkeleyDB

锁定颗粒度介于行级锁定和表级锁定之间,所需资源开销以及所能提供的并发能力也介于两者之间,与行级锁定一样会发生死锁。

易语言mysql锁表_MySQL的3种锁定机制相关推荐

  1. mysql锁表_MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...

  2. mysql锁表_MySQL中Alter table 你不知道的性能问题

    前言: MySQL 的大表运维总是令人头疼的一件事,特别是大表表结构的修改尤为困难. 首先,alter table 的process不可被kill , 一旦执行就不可回退. 其次,大多数的alter ...

  3. mysql空表_MySQL中两种快速创建空表的方式

    在MySQL中有两种方法 1.create table t_name select ... 2.create table t_name like ... 第一种会取消掉原来表的有些定义,且引擎是系统默 ...

  4. mysql 锁表详解

    为了给高并发情况下的MySQL进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级. MyISAM和MEMORY存储引擎采用的是表级锁( ...

  5. mysql锁表问题的解决方法_MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...

  6. mysql数据库什么情况下会锁表_mysql数据库锁的产生原因及解决办法

    数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性 ...

  7. mysql锁表查询_mysql锁表查询(mysql查询锁表语句)

    mysql锁表查询(mysql查询锁表语句) 2020-07-24 11:44:55 共10个回答 怎么查找mysql中的锁表语句showprocesslist;SHOWPROCESSLIST显示哪些 ...

  8. mysql db模块下载_易语言MySql数据库操作类V1.0模块源码

    易语言MySql数据库操作类V1.0模块源码 易语言MySql数据库操作类V1.0模块源码 系统结构:MySql数据库连接类_测试子程序,置连接选项,连接,关闭,是否已连接,取连接句柄,置连接句柄,执 ...

  9. 易语言 mysql_易语言MySql注册登录

    易语言MySql注册登录 用到的主要易语言命令: 连接MySql (, , , , ) 执行SQL语句 (, ) 取记录集 () 读字段值 (, , ) 释放记录集 () 断开MySql () 命令介 ...

最新文章

  1. 根据数组中对象的属性值排序倒叙
  2. XenApp / XenDesktop 7.6 初体验五 KEYWORDS
  3. python标准输入输出用来干什么_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...
  4. 文件系统一些概念【更新完毕】
  5. 关于.Net Application Server对象访问方式的设计(2.上)
  6. android 朋友圈弹出框,Android popupwidown 实现朋友圈评论弹窗显示在软键盘上面
  7. [翻译] FBLikeLayout
  8. poj 1113 graham模板(水平序)
  9. java生成四位数字验证码_简单的随机生成4个数字验证码的实现
  10. 如何调试 fastlane 源码
  11. Trie树【p2264】情书
  12. 线性回归-----标准方程法实现线性回归方程
  13. 测试必会Linux命令
  14. PLC控制系统的软件设计
  15. document.getElementById(“id”)与$(#id)的区别
  16. 第七天你知道TLE是什么了吗(特别感谢英雄哥友情出演
  17. .NET操作Excel高效低内存的开源框架 - MiniExcel
  18. C练题笔记之:牛客-HJ029.字符串加密
  19. 邮箱扒头像来告诉你怎么写简单的脚本扒图
  20. 使用springer nature模板页眉显示标题太长超出页面解决

热门文章

  1. LeetCode 63. 不同路径 II(DP)
  2. oracle追踪触发器语句,Oracle中怎样通过触发器来追踪用户的活动?
  3. python concat_python-pd.concat()不合并在同一索引上
  4. 【Python基础知识-pycharm版】第九节_面向对象的三大特征
  5. Python中查找包含它的列表元素的索引,index报错!!!
  6. sklearn分类器算法:决策树与随机森林及案例分析
  7. python写程序注意事项(很重要)
  8. kakfa怎么看消息是否堆积_纯种哈士奇多少钱一只,怎么看是否是纯种哈士奇
  9. python各种岗位薪资_python编程语言岗位薪资真不是盖的
  10. 为什么回归问题用MSE?