zoukankan      html  css  js  c++  java
  • Mysql 各种锁摘要

    各种锁

    全局锁 FTWRL

    mysql 通过flush table with read lock 来加全局读锁。使用了FTWRL后整个库只能读,不能个更新和执行DDL,有更新的事务等

    用处:

    1. 逻辑备份。如果数据库中有一张表不是事务引擎,使用mysqldump就无法使用--single-transaction来开启一致性视图来备份,这个时候FTWRL就有用了。

    FTWRL在客户端断开时,就会释放

    表级锁 表锁和MDL

    表锁 lock tables ... read / write

    加表锁的语句为lock tables t1 read, t2 write;
    作用对象是其他mysql线程和加表锁的线程。

    影响情况如下表格所示

    读写状态 t1 t2
    本线程 读写
    其他线程 NA

    MDL metadata lock

    访问一个表会自动加上mdl读锁,mdl读锁和写锁之间的存在互斥关系,mdl读锁之间不互斥。

    是否互斥 读锁 写锁
    读锁 NO YES
    写锁 YES YES

    对表进行CRUD,mysql就会加mdl读锁,对表结构进行变更,mysql就会加mdl写锁

    行级锁

    Intention locks 意向锁

    原文好多,这里就举两个例子:

    1. intention shared lock 意向共享锁(IS) select * from t lock in share mode
    2. intention exclusive lock 意向排它锁(IX) select * from t for update

    记录锁

    记录锁用来锁住索引记录的行。比如select c1 from where c1 = 10 for update。换种说法,就是加载有索引的行上的锁,按照mysql官方文档,即使该行没有索引,mysql也会为该行创造一个隐藏的索引。

    间隙锁 gap locks

    间隙锁用来锁住记录之间的空隙,防止插入记录,比如(a,b),(a, supermum), (infimum, a), supermum和infimum可以认为是记录的上限和下限。间隙锁和间隙锁之间不互斥。

    临键锁 next-key locks

    next-key locks 等于 行锁 + gap locks, 可以理解为一个左开右闭区间。RR事务级别和next-key locks 可以用来防止幻读。

    InnoDB locking

  • 相关阅读:
    二十一.组合模式
    二十四.桥接模式
    二十六.职责链模式
    二十五.命令模式
    将小写转化成大写
    备份JOB SCHEDULE ENTRY的简单方法
    如何确定哪一个作业锁定QDLS下的一个目标
    WRKACTJOB命令一些有用功能介绍
    如何使用CA/400批处理的方式传输数据
    用前缀给字段命名
  • 原文地址:https://www.cnblogs.com/linyihai/p/15097018.html
Copyright © 2011-2022 走看看