美文网首页
2019-07-28第六讲: 全局锁和表锁

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

作者: Mr钧 | 来源:发表于2019-07-28 19:45 被阅读0次

    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锁会等到事务提交才释放... 全部锁都是事务提交才释放把?  行锁, 间隙锁? 

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

    相关文章

      网友评论

          本文标题:2019-07-28第六讲: 全局锁和表锁

          本文链接:https://www.haomeiwen.com/subject/kfpprctx.html