2019-07-28第六讲: 全局锁和表锁

2019-07-28  本文已影响0人  Mr钧

1. 全局锁:  how: 做全库逻辑备份    

    为什么不使用: set global readonly = true; 这种方式呢 ? 

    原因1. readonly参数可能会用来做其他逻辑, 如区分主备库;

    原因2. 全表锁异常,会回滚; readonly 异常会保持, 导致全库只读.

2. 表级锁:  what :  MDL 锁;  表锁.

    表锁:  what : lock tables ... read/ write

    MDL锁: what : 在访问一个表时,就会被自动加上. 

            how: 用于保证DDL操作的正常运行. 

    一个MDL锁的坑: 

    前提: 给一个表加字段, 修改字段, 加索引, 都是要走全表扫描. 

    1.A B都是加MDL读锁,所以不冲突

    2.C要加MDL写锁 , 与A的读锁冲突, blocked

    3.D需要MDL读锁, 会被MDL写锁阻塞(即使MDL写锁没有加成功)

    4.再加上客户端有重试机制, 超时后会重新起一个seesion, 这个库的线程很快会爆满;

3.如何安全的给小表加字段: 

    1.kill 掉长事务

    2.alter table 语句设定等待时间, 确保不会阻塞后面的业务语句. 

疑问1: MDL锁会等到事务提交才释放... 全部锁都是事务提交才释放把?  行锁, 间隙锁? 

根据试验结果 ==>是的. 

上一篇下一篇

猜你喜欢

热点阅读