内容简介:MySQL之4--Innodb锁分析
现在 MySQL 的默认存储引擎是InnoDB,其提供了一个很强大的功能就是行级锁。可以通过 show status like 'innodb_row_lock%'; 来查看当前系统的行锁争用情况。如果 Innodb_row_lock_waits 和 Innodb_row_lock_time_avg 两个值比较高,则说明锁争用比较严重。
概述
InnoDB提供了两种类型的行锁:
- 共享锁:对于一行已经加了共享锁的记录,可以允许其他共享锁的存在,却不允许其他排他锁的存在。这个可以对比读锁来理解。
SELECT * FROM table WHERE id=1 LOCK IN SHARE MODE。 - 排他锁:对于一行已经加了排他锁的记录。既不允许其他的共享锁存在,也不允许其他排他锁的存在。这个可以对比写锁来理解。
SELECT * FROM table WHERE id=1 FOR UPDATE。
InnoDB行锁是通过对索引进行加锁来执行的,如果没有索引,InnoDB将通过隐藏的聚族索引来对记录进行加锁。InnoDB的行锁分为三种情况: - Record Lock : 对唯一索引进行加锁。
- Gap Lock :
- Next Key Lock :是
Record Lock和Gap Lock的合集。注意:如果对表的某一行没有任务索引的列进行加锁,那么并不会只对这一行加锁。而是对全表加锁
加锁分析
create table lock_test(
id int primary key not null auto_increment ,
name varchar(32) not null ,
age int not null default 0 ,
key `idx_name`(`name`)
);
insert into lock_test(name,age)values('gcl',26);
insert into lock_test(name,age)values('lisi',54);
insert into lock_test(name,age)values('ww',12);
insert into lock_test(name,age)values('zl',9);
insert into lock_test(name,age)values('sq',20);
insert into lock_test(name,age)values('hh',18);
insert into lock_test(name,age)values('zh',15);
insert into lock_test(name,age)values('mm',23);
其中 id 字段加唯一索引。 name 字段加非唯一索引。age字段无索引。
共享锁与排它锁
建表语句如下:
| session1 | session2 | session3 |
|---|---|---|
| set autocommit=0; | set autocommit=0; | |
| 对id=1的事物加共享锁 select * from lock_test where id = 1 lock in share mode; |
||
| 其他事物仍然可以对id=1的记录加共享锁 select * from lock_test where id = 1 lock in share mode; |
||
| 其他事物对id=1的记录加排它锁,则报错 select * from lock_test where id = 1 for update; |
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用动态分析技术分析 Java
- 使用动态分析技术分析 Java
- 案例分析:如何进行需求分析?
- 深度分析ConcurrentHashMap原理分析
- 如何分析“数据分析师”的岗位?
- EOS源码分析(3)案例分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
500 Lines or Less
Amy Brown、Michael DiBernardo / 2016-6-28 / USD 35.00
This book provides you with the chance to study how 26 experienced programmers think when they are building something new. The programs you will read about in this book were all written from scratch t......一起来看看 《500 Lines or Less》 这本书的介绍吧!