13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

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. 当 Query 无法利用索引的时候,InnoDB 会放弃使用 行级锁定 而改用 表级锁定 ,造成并发性能降低;
  2. 当 Query 使用的索引并不包含所有过滤条件时,数据检索使用到的索引键中的数据可能有部分不属于 Query 的结果集行列,但是也会被锁定,因为间隙锁锁定的是一个范围,而不是具体的索引键。
  3. 当 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 表?

创建该表就是告诉InnoDB 我们要开始监控他的详细信息,然后InnoDB就会将比较详细的事务级锁定信息记录到MySQL的 error log 中,以便后面做进一步分析。


网站题目:MySQL数据库锁定机制?这篇文章告诉你
本文链接:http://cdbrznjsb.com/article/cohigcc.html

其他资讯

让你的专属顾问为你服务