五. 全局锁和表锁

全局锁

  • 全局锁就是对整个数据库加锁,MySQL提供的有一种加锁的方法,命令是 Flush tables with read lock (FTWRL),加锁后,DML,DDL操作都将被阻塞
  • 全局锁的使用场景?
    • 若是在进行数据库备份的时候没有加全局锁,会导致备份系统备份得到的库不是一个逻辑时间点,这个视图就是逻辑不一致的
  • InnoDB更好的全局加锁的方式是怎样的?
    • 由于InnoDB支持可重复读,因此可以使用mysql的逻辑备份工具,加上参数 -single-transaction,达到导数据之前就先开启一个事务,来确保拿到的是一致性的视图。

表级锁

  • 表级锁的分类? 表锁分为两种,一种是表锁,一种是元数据锁(meta data lock , MDL)
  • 表锁的语法是 lock tables … read/write。与 FTWRL 类似,可以用 unlock tables 主动释放锁,也可以在客户端断开的时候自动释放。需要注意,lock tables 语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象。
  • 另一类表级的锁是 MDL(metadata lock)。MDL 不需要显式使用,在访问一个表的时候会被自动加上。MDL 的作用是,保证读写的正确性。
  • MDL锁是如何自动添加的?
    • 当对一个表做增删改查操作(DML)的时候,自动加上元数据读锁
    • 当对一个表结构进行更改的时候,自动加上元数据写锁
  • MDL读写锁之间的关系?
    • 读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。
    • 读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。因此,如果有两个线程要同时给一个表加字段,其中一个要等另一个执行完才能开始执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值