zoukankan      html  css  js  c++  java
  • MySQL中lock与latch的区分

    这里要区分锁中容易令人混淆的概念lock与latch。在数据库中,lock与latch都可以成为锁,但两者有截然不同的含义

    latch 一般称为闩锁(轻量级的锁) 因为其要求锁定的时间非常短,若迟勋时间长,则应用性能非常差,在InnoDB存储引擎中,latch有可以分为mutex(互斥锁)和rwlock(读写锁)其目的用来保证并发线程操作临界资源的正确性,并且没有死锁检测的机制

    lock的对象是事务,用来锁定的是数据库中的UI想,如表、页、行。并且一般lock对象仅在事务commit或rollback后进行释放(不同事务隔离级别释放的时间可能不同),此外lock正如大多数数据库中一样,是有死锁机制的。表显示了lock与latch的不同

    在InnoDB存储引擎中的latch,可以通过命令SHOW ENGINE INNODB MUTEX 来进行查看

    mysql> SHOW ENGINE INNODB MUTEX;
    +--------+-------------------+-------------+
    | Type   | Name              | Status      |
    +--------+-------------------+-------------+
    | InnoDB | dict0dict.cc:1057 | os_waits=2  |
    | InnoDB | log0log.cc:844    | os_waits=1  |
    | InnoDB | fil0fil.cc:1690   | os_waits=1  |
    | InnoDB | dict0dict.cc:1066 | os_waits=3  |
    | InnoDB | log0log.cc:907    | os_waits=11 |
    +--------+-------------------+-------------+
    5 rows in set (4.14 sec)

    在DEBUG版本下,通过SHOW ENGINE INNODB MUTEX 可以看到latch的更多信息

    通过上述例子可以看到,type显示的总是InnoDB,列Name显示的是latch的信息及所在的源码位置(行数)。列Status比较复杂,在DEBUG模式下,除了显示os_waits,也会显示count、spin_waits、spin_rounds、 os_yields、os_wait_times等信息。

    相对于latch来看,lock信息就显得直观了。可以通过SHOW ENGINE INNODB STATUS 及information_schema架构下的INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS来观察锁的信息 。

  • 相关阅读:
    EffectiveC++ 第4章 设计与声明
    EffectiveC++ 第3章 资源管理
    EffectiveC++ 第2章 构造/析构/赋值运算
    EffectiveC++ 第1章 让自己习惯C++
    C++实现离散数学的关系类,支持传递闭包运算
    Vi编辑器入门
    如何查看jdk的版本是32位还是64位
    跨域服务调用基本概念及解决方法
    解决MyEclipse不编译的方法
    网上拒绝复制方法解决
  • 原文地址:https://www.cnblogs.com/olinux/p/5174145.html
Copyright © 2011-2022 走看看