MySQL数据库锁定机制是什么

发布时间:2021-08-06 10:33:38 作者:Leah
来源:亿速云 阅读:140

本篇文章给大家分享的是有关MySQL数据库锁定机制是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1. MySQL 锁定机制简介

各存储引擎使用三种类型锁定机制

2. MySQL数据库中 

表级锁定主要是 MyISAM、Memory、CSV 等一些非事务性存储引擎,使用行级锁定主要是 InnoDB 存储引擎和 NDB Cluster 存储引擎,页级锁定主要是BerkeleyDB存储引擎

3. MyISAM 表级锁定主要分为两种类型

4.  MySQL中主要分4中队列来维护这两种锁定:

两个存放当前正在锁定的读和写锁定信息,另外两个存放等待中的读写锁定西信息,如下:

5. InnoDB 的行级锁定分为四种类型

6.  InnoDB 间隙锁

InnoDB 的锁定是通过在指向数据记录的***个索引键之前和***一个索引键之后的空域空间标记锁定信息实现的。这种锁定方式被称为 "NEXT-KEY locking"(间隙锁)

间隙锁弱点:锁定一个范围之后,即使某些不存在的键值也会被无辜锁定,造成锁定的时候无法插入键值锁定内的任何数据。

通过索引实现锁定的方式存在其他几个较大的性能隐患:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 当 Query 无法利用索引的时候,InnoDB 会放弃使用 行级锁定 而改用 表级锁定 ,造成并发性能降低;

  3. 当 Query 使用的索引并不包含所有过滤条件时,数据检索使用到的索引键中的数据可能有部分不属于 Query 的结果集行列,但是也会被锁定,因为间隙锁锁定的是一个范围,而不是具体的索引键。

  4. 当 Query 在使用索引定位数据的时候,如果使用的索引键一样但访问的数据行不同 (索引只是过滤条件的一部分), 他们一样会被锁定。

7. MyISAM 表锁优化建议

8.  InnoDB 行锁优化建议

9.  系统锁定争用情况查询

MySQL 内部有两组专用的状态变量记录系统内部资源争用情况。

mysql> show status like 'table%';

           Table_locks_immediate 值大于 Table_locks_waited 5000 是比较合适的,在大就需要分析问题所在。

           两个状态值都是从系统启动后开始记录,每出现一次加1,如果这里 Table_locks_waited 状态值比较高,说明表级锁定争用严重,需进一步分析。

sql> show status like 'innodb_row_lock%';

          5个状态,比较重要的是Innodb_row_lock_time_avg(等待平均时长),Innodb_row_lock_waits(等待总次数)及Innodb_row_lock_time(等待总时长)

10.  InnoDB 

除了提供以上5个系统状态变量外,还提供了更为丰富的即时状态信息,实现方法如下:

mysql > create table innodb_monitor(a int) engine=innodb;

   为什么创建 innodb_monitor 表?

以上就是MySQL数据库锁定机制是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. Joomla默认锁定Table解除锁定
  2. mysql数据库锁机制是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:C++中的异常处理机制介绍

下一篇:如何解决某些HTML字符打不出来的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》