转载部分

Mysql锁分析

2017-01-20  本文已影响389人  ericsonyc
本篇文章关于Mysql锁的一些知识点,比较杂乱,后续会整理更新。

背景:

锁概念:

锁是数据库系统区别于文件系统的关键特点。锁机制用于管理对共享资源的并发访问,提供数据的完整性和一致性。

多粒度封锁协议:

数据库是一个共享的资源,可以供多个用户使用,这样会出现在同一时刻会有大量的事务提交数据库,造成严重的问题,因此并发控制是衡量数据库性能的一个重要的标志。
封锁是实现并发控制的一个重要技术。封锁主要有两种类型:排它锁(X锁)和共享锁(S锁)。排它锁和共享锁的兼容矩阵如下所示:

图1

从图中可以看出当一个事务只有共享锁时,另一个事务才可以加共享锁;但排他锁和共享锁是互斥的。

封锁对象的大小称为封锁粒度。封锁对象可以会逻辑单元,也可以是物理单元。逻辑单元可以是属性集合,元组,关系,索引;物理单元可以是物理页,块。
封锁粒度与系统的并发度和并发控制的开销密度密切相关。封锁粒度越大,数据库能封锁的单元越少,并发度越小,系统开销越小;封锁粒度越小,数据库能封锁的单元越大,并发度越大,系统开销越大。

多粒度封锁:

Mysql知识点:

Mysql锁类型:
事务边界:

Mysql默认是自动提交事务的,因此一条sql语句其实就是一个事务。


图4

如果一个事务中包含多个sql语句,则需要用begin和commit显示的指定事务的边界。

Mysql锁粒度:

Mysql有三种逻辑上的锁概念:

语法:

#锁定表
LOCK TABLES
tb_name1 [AS alias] {READ[LOCAL]|[LOW_PRIORITY] WRITE}
tb_name2 [AS alias] {READ[LOCAL]|[LOW_PRIORITY] WRITE}
...
#释放表锁定
UNLOCK TABLES;

select * from table where ... for update;

不常用

InnoDB锁:
上一篇下一篇

猜你喜欢

热点阅读