zoukankan      html  css  js  c++  java
  • Mysql中InnoDB引擎的锁

                         Mysql中InnoDB引擎的锁

      锁这种机制的作用:对共享资源并发访问的管理,保证数据的完整性和一致性。

         lock与latch

      在数据库中,lock与latch都可以被称为”锁“,但是两者的含义是完全不同的。

      lock针对的对象是事务,它用来锁定数据库中的对象,如表、页、行。一般lock的对象仅在事务commit或者rollback后进行释放,并且lock是有死锁机制的。

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

        锁的类型

      InnoDB存储引擎实现了如下两种标准的行级锁:共享锁(S Lock)和排他锁(X Lock)。

      共享锁:事务要想读取一行数据,需要获取共享锁。

      排他锁:允许事务删除或者更新一行数据。

      共享锁与排他锁的兼容性如下表:

                                                                       X                                                S                   
     X 不兼容 不兼容
    S 不兼容 兼容

      InnoDB存储引擎支持多粒度(granular)锁定,这种锁定允许事务在行级上的锁和表级上的锁同时存在。为了支持在不同粒度上进行加锁操作,InnoDB存储引擎支持一种额外的锁方式,称之为意向锁(Intention Lock)。

      InnoDB存储引擎的意向锁设计比较简练,其意向锁即为表级别的锁。设计目的主要是为了在一个事务中揭示下一行将被请求的锁类型。支持的意向锁有两种:意向共享锁(IS Lock)和意向排他锁(IX Lock):

        IS Lock:事务想要获取一张表中某几行的共享锁;

        IX Lock:事务想要获取一张表中某几行的排他锁。

      意向锁是将锁定的对象分为多个层次,如果需要对页上的记录进行上X锁,那么分别需要对数据库、表、页上意向锁IX,最后对记录上X锁。若其中任何一个部分导致等待,那么该操作需要等待粗粒度锁的完成。

      由于InnoDB存储引擎支持的是行级别的锁,因此意向锁其实不会阻塞除全表扫以外的任何请求。表级意向锁与行级锁的兼容性如下表:

                                          IS                           IX                         S                           X             
    IS 兼容 兼容 兼容 不兼容
    IX 兼容 兼容 不兼容 不兼容
    S 兼容 不兼容 兼容 不兼容
    X 不兼容 不兼容 不兼容 不兼容
  • 相关阅读:
    SCRUM站立会议
    燃尽图
    第一次作业----词频统计
    构建之法读感
    final 评论 II
    final 评论 I
    第十一周PSP
    学期回顾
    第十周PSP
    Gradle学习笔记
  • 原文地址:https://www.cnblogs.com/wutongblog/p/10937561.html
Copyright © 2011-2022 走看看