易语言mysql锁表_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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值