06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?

本文深入探讨了数据库锁的概念,包括全局锁、表级锁和行级锁。全局锁在MySQL中通过FTWRL实现,用于整个数据库实例。表级锁分为读写两种,适用于简单查询和更新操作,而行级锁则提供更高的并发性,但加锁成本更高。元数据锁(MDL)在MySQL 5.5后引入,用于保证读写正确性,事务中的MDL在事务结束时才释放。理解这些锁机制对于优化并发性能和避免死锁至关重要。
摘要由CSDN通过智能技术生成

概念

  数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则,而锁就是用来实现这些访问规则的重要数据结构。

全局锁

  全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。

表级锁

表锁

  表锁的语法是 lock tables … read/write。

表级锁与行级锁的比较

  表级锁是Mysql中锁定粒度最大的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁。其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM和 InnoDB引擎都支持表级锁。
  行级锁是Mysql中锁定粒度最小的一种锁,只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。

元数据锁

  MDL锁不需要显式使用,在访问一个表的时候会被自动加上。MDL的作用是,保证读写的正确性。
  在MySQL 5.5版本中引入了MDL,当对一个表做增删改查操作的时候,加MDL读锁;当要对表做结构变更操作的时候,加MDL写锁。
  事务中的MDL锁,在语句执行开始时申请,但是语句结束后并不会马上释放,而会等到整个事务提交后再释放。

小结

  备份一般都会在备库上执行,你在用–single-transaction方法做逻辑备份的过程中,如果主库上的一个小表做了一个DDL,比如给一个表上加了一列。这时候,从备库上会看到什么现象呢?
答:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值