TreeMind树图在线AI思维导图
当前位置:树图思维导图模板IT互联网互联网干货锁机制思维导图

锁机制思维导图

  收藏
  分享
免费下载
免费使用文件
大灰 浏览量:02022-11-19 22:28:25
已被使用0次
查看详情锁机制思维导图

MYSQL初级知识点——锁机制

树图思维导图提供 锁机制 在线思维导图免费制作,点击“编辑”按钮,可对 锁机制  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:56cc353b0fed5ceb1cd8f2868d70fa5f

思维导图大纲

锁机制思维导图模板大纲

锁是计算机协调多个进程或线程并发访问某一资源的机制。

数据库锁机制简单说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。

锁定分类

对数据操作的类型分类

读锁(共享锁)

写锁(排他锁)

对数据操作的粒度分类

表级锁

行级锁

页面锁

适用:从锁的角度来说,表锁适合已查询为主,只有少量按索引条件更新数据的应用。行锁适合有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用。

MyISAM表锁

表锁两种模式

表共享读锁

表独占写锁

MyISAM表的读操作与写操作之间,以及写操作之间是串行的。

默认情况下,写锁比读锁具有更高的优先级:当一个锁释放时,这个锁会优先给写锁队列中等候的获取锁请求,然后再给读锁队列的获取锁请求。

InnoDB行锁

InnoDB实现了2种行锁类型

共享锁(S)

排他锁(X)

为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(都是表锁)

意向共享锁(IS)

意向排它锁(IX)

索引失效hi导致行锁变表锁。比如:varchar 查询不写单引号的情况。

加锁机制

乐观锁与悲观锁

乐观锁

悲观锁

InnoDB的三种行锁

记录锁(Record Locks)

SELECT * FROM table WHERE id = 1 FOR UPDATE;

UPDATE SET age = 50 WHERE id = 1; -- id 列为主键或唯一索引列

间隙锁(Gap Locks)

间隙锁基于非唯一索引,使用间隙锁锁住的是一个区间,而不仅仅是这个区间中的每一条数据。

SELECT * FROM table WHERE id BETWEN 1 AND 10 FOR UPDATE;

Gap锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。

临键锁(Next-key Locks)

可以理解为一种特殊的间隙锁,通过临键锁可以解决幻读的问题。每个数据行上的非唯一索引列上都会存在一把临键锁,当某个事务持有该数据的临键锁时,会锁住一段左开右闭区间的数据。InnoDB中行级锁是基于索引实现的,临键锁只与非唯一索引列有关,在唯一索引列(包括主键列)上不存在临键锁。

死锁

死锁产生

死锁是指两个或多个事务在同一资源上互相占用,并请求锁定占用的资源,从而导致恶性循环。

当事务试图以不同的顺序锁定资源时,就可能产生死锁。多个事务同时锁定同一个资源时也可能回发生死锁。

锁的行为和顺序和存储引擎相关。以同样的顺序执行语句,有些存储引擎会产生死锁,有些不会。

死锁有两个原因:真正数据冲突;存储引擎的实现方式;

检测死锁

数据库系统实现了各种死锁检测和死锁超时的机制,InnoDB存储引擎能检测到死锁的循环依赖并立即返回一个错误。

死锁恢复

死锁发生后,只有部分或完全回滚其中一个事务,才能打破死锁。InnoDB目前处理死锁的方法是:将持有最少行级排它锁的事务进行回滚。

外部锁的死锁检测

发生死锁后,InnoDB一般都能自动检测到,并使一个事务释放锁并回退,另一个事务获得锁,继续完成事务。但在涉及外部锁或涉及表锁的情况下,InnoDB并不能完全自动检测到死锁,这需要通过设置锁等待超时参数innodb_lock_wait_timeout来解决。

死锁影响性能

死锁会影响性能而不是产生严重错误,因为InnoDB会自动检测并处理死锁。在高并发系统上,当许多线程等待同一个锁时,死锁检测可能导致速度变慢。有时当发生死锁时,禁用死锁检测(innodb_deadlock_detect配置选项)可能会更有效,这时可以依赖 innodb_lock_wait_timeout 设置进行事务回滚。

MyISAM避免死锁

在自动加锁的情况下,MyISAM总是一次获得SQL语句所需要的全部锁,所以MyISAM表不会出现死锁。

InnoDB避免死锁

使用 select ... for update 语句获取必要的锁;

直接申请足够级别的锁;

约定多个表的访问顺序;

改变事务隔离级别

相关思维导图模板

GB/T19001-2016/ISO9001:2015思维导图结构思维导图

树图思维导图提供 GB/T19001-2016/ISO9001:2015思维导图结构 在线思维导图免费制作,点击“编辑”按钮,可对 GB/T19001-2016/ISO9001:2015思维导图结构  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:05b6fb33547623a34a768fe8f408a354

语言思维导图

树图思维导图提供 语言 在线思维导图免费制作,点击“编辑”按钮,可对 语言  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:e3c34a2dbcdf6d55274c15d7305358f9