• 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 不兼容 不兼容 不兼容 不兼容
  • 相关阅读:
    通过点击切换文本框内容的脚本示例
    使用脚本改变树控件的行为
    javascript动态创建radio button元素支持IE/Firefox
    轻量级的向导控件MultiView
    客户端脚本简单实现Repeater的无刷新分页
    在非web site项目中引用Membership
    逐步认识C#四种判断相等的方法
    C#获取csv文件内容对逗号和引号分隔的处理
    JavaScript之 值类型 和 引用类型 Better
    JS call apply bind 方法的区别 Better
  • 原文地址:https://www.cnblogs.com/wutongblog/p/10937561.html
Copyright © 2020-2023  润新知