视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL的3种锁定机制_MySQL
2020-11-09 18:38:08 责编:小采
文档


bitsCN.com

MySQL的3种锁定机制

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

MySQL各存储引擎使用了3种类型的锁定机制:

1. 行级锁定(row-level) --- MyISAM、Memory、CSV

*锁定对象颗粒度最小,发生资源争用的概率最小,在并发处理能力上有较大优势。

*缺点是每次获取锁和释放锁需要做的事情很多,带来消耗大,也最容易发生死锁。

2. 表级锁定(table-level)--- Innodb、NDB Cluster

*锁定对象颗粒度最大,实现逻辑简单,获取锁和释放锁的速度很快,一次会将整个表锁定,可以很好避免死锁。

*缺点是出现资源争用的概率最高,致使并发度大打折扣。

*主要分为2种类型:读锁定和写锁定

*通过4个锁定队列来维护这2种锁定:

Current read-lock queue (lock->read) --- 存放持有读锁的所有线程,按获取到锁的时间顺序存放

Pending read-lock queue (lock->read_wait) --- 存放正在等待锁定资源的线程

Current write-lock queue (lock->write) --- 存放持有写锁的所有线程,按获取到锁的时间顺序存放

Pending write-lock queue (lock->write_wait) --- 存放正在等待锁定资源的线程

*MySQL内部实现表锁定多达11种类型,由系统中的一个枚举量(thr_lock_type)定义,各值描述如下:

IGNORE --- 当发生锁请求的时候内部交互使用,在锁定结构和队列中并不会有任何信息存储

UNLOCK --- 释放锁定请求的交互用锁类型

READ --- 普通读锁定

WRITE --- 普通写锁定

READ_WITH_SHARED_LOCKS --- 在Innodb中使用到,由如下方式产生:SELECT ... LOCK IN SHARE MODE

READ_HIGH_PRIORITY --- 高优先级读锁定

READ_NO_INSERT --- 不允许Concurrent Insert的锁定

WRITE_ALLOW_WRITE --- 当由存储引擎自行处理锁定的时候,mysqld允许其他的线程再获取读或写锁定,因为即使资源冲突,存储引擎自己也会知道怎么处理

WRITE_ALLOW_READ --- 这种锁定发生在对表做DDL(ALTER TABLE ...)的时候,MySQL可以允许其他线程获取读锁定,因为MySQL是通过重建整个表然后再RENAME而实现的该功能,所以整个过程原表仍然可以提供读服务

WRITE_CONCURRENT_INSERT --- 正在进行Concurrent Insert 时候所使用的锁定方式,该锁定进行的时候,除了READ_NO_INSERT之外的其他任何读锁定请求都不会被阻塞

WRITE_DELAYED --- 在使用INSERT DELAYED时候的锁定类型

WRITE_LOW_PRIORITY --- 显示声明的低级别锁定方式,通过设置LOW_PRIORITY_UPDAT = 1 而产生

WRITE_ONLY --- 当在操作过程中某个锁定异常中断之后系统内部需要进行CLOSE TABLE操作,在这个过程中出现的锁定类型就是WRITE_ONLY

3. 页级锁定(page-level) --- BerkeleyDB

锁定颗粒度介于行级锁定和表级锁定之间,所需资源开销以及所能提供的并发能力也介于两者之间,与行级锁定一样会发生死锁。

bitsCN.com

下载本文
显示全文
专题