mysql_全局锁表锁

全局锁、表级锁、行级锁

全局锁

对整个数据库实例加锁,MySQL提供加全局读锁的方法:Flush tables with read lock(FTWRL)  会使整个库处理只读状态
使用场景 :全库逻辑备份
风险:主库备份期间业务停摆
         从库备份备份期间不能执行主库同步的binlog,导致主从延迟
常用命令 当mysqldump使用参数--single-transaction的时候,会启动一个事务

表级锁

表锁的语法 lock tables ... read/write    unlock tables  主动释放锁而innodb这种支持行锁的引擎一般不使用表锁影响面大
MDL(metadata lock) 不需要显式使用,在访问一个表的时候会被自动加上
MDL的作用:保证读写的正确性
对表做增删改查操作的时候,加MDL读锁,对表做结构变更操作的时候,加MDL写锁
读锁之间不互斥,写锁之间是互斥的MDL 会直到事务提交才会释放,
在做表结构变更的时候,一定要小心不要导致锁住线上查询和更新

 我们可以看到 session A 先启动,这时候会对表 t 加一个 MDL 读锁。
由于 session B 需要的也是 MDL 读锁,因此可以正常执行。
之后 session C 会被 blocked,是因为 session A 的 MDL 读锁还没有释放,而 session C 需要 MDL 写锁,因此只能被阻塞。
如果只有 session C 自己被阻塞还没什么关系,但是之后所有要在表 t 上新申请 MDL 读锁的请求也会被 session C 阻塞
前面我们说了,所有对表的增删改查操作都需要先申请 MDL 读锁,就都被锁住,等于这个表现在完全不可读写了。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值