内容简介: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)案例分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深度学习
[美] 伊恩·古德费洛、[加] 约书亚·本吉奥、[加] 亚伦·库维尔 / 赵申剑、黎彧君、符天凡、李凯 / 人民邮电出版社 / 2017-7-1 / 168
《深度学习》由全球知名的三位专家Ian Goodfellow、Yoshua Bengio 和Aaron Courville撰写,是深度学习领域奠基性的经典教材。全书的内容包括3个部分:第1部分介绍基本的数学工具和机器学习的概念,它们是深度学习的预备知识;第2部分系统深入地讲解现今已成熟的深度学习方法和技术;第3部分讨论某些具有前瞻性的方向和想法,它们被公认为是深度学习未来的研究重点。 《深度......一起来看看 《深度学习》 这本书的介绍吧!