其他分享
首页 > 其他分享> > 全局锁和表锁 :给表加个字段怎么有这么多阻碍?

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

作者:互联网

1)数据库为什么要设计锁?

2)根据加锁的范围,mysql里面的锁有哪几种?

3)全局锁

what?

why?

how?

应用场景?

3.1)全局读锁存在哪些问题?

3.2)既然我们全局读锁备份时业务停摆,那有没有什么解决方案,让业务不停摆又能让备份的逻辑一致?

3.3)既然mysqldump做备份这么好用,那干嘛还要FTWRL命令?

3.4)既然备份过程中要全库只读,那为什么不可以用set global readonly=true命令呢?

4)表级锁

what?

why?

how?

4.1)为什么对表内容增删改查加读锁而对表结构变更时加MDL写锁?

4.2)InnoDB引擎为什么不用表锁Lock tables来控制并发?

4.3)因为MDL锁机制我们修改一个小表而导致整个库挂了的教训?

 

 

 

AB是更新表内容,所以会自动加上MDL读锁,他们可以并发执行的。而我们的C是改变表结构,需要加上MDL写锁,但是此时MDL正在忙AB的事,没空理C,C就阻塞了,然后D是读表内容,申请MDL读锁,但是要在C基础上。也跟着遭罪被阻塞,后面一直遭罪堵着,就是因为C。

也就是说我们现在t这张小表因为C这个害群之马不能读了,假如我几万个用户要来读这张表,这个库的线程很快就爆满挂掉。

4.4)事务中的MDL锁有什么特点?

4.5)如何安全地给小表加字段?

4.6)假如一个小表频繁被用户用着,那我怎么加一个必须加的字段?

4.7)在mysql中4.6的操作是怎样实现的?

4.8)假如你发现你的应用程序里有 lock tables 这样的语句,有哪些可能的情况?

4.8.1)为什么把lock tables 和 unlock tables 改成 begin 和 commit问题就解决了?

标签:表加个,事务,MDL,tables,备份,读锁,全局,表锁
来源: https://www.cnblogs.com/YXBLOGXYY/p/15940538.html