MySQL锁(锁升级)


  锁升级(Lock Escalation)是指将当前锁的粒度降低。举个例子:数据库可以把一个表的1000个行锁升级为一个页锁,或者将页锁升级为表锁。

  如果在数据库的设计中认为锁是一种稀有资源,而且想避免锁的开销,那数据库中会频繁出现锁升级现象。

  SQL Server 数据库的设计认为锁是一种稀有的资源,在适合的时候会自动地将行、键或分页锁升级为更粗粒度地表级锁,这种升级保护了系统资源,防止系统使用太多地内存来维护锁,在一定程度上提高了效率。

  即使在SQL Server 2005版本后,SQL Server数据库支持了行锁,但是其设计和InnoDB存储引擎完全不同,在以下情况下依然可能发生锁升级:

    由一句单独的SQL语句在一个对象上持有的锁的数量超过了阀值,默认这个阀值为5000。值得注意的是,如果是不同对象,则不会发生锁升级;

    锁资源占用的内存超过了激活内存的40%时就会发生锁升级;

  InnoDB存储引擎不存在锁升级的问题。因为其不是根据每个记录来产生行锁的,相反,其根据每个事务访问的每个页对锁进行管理,采用的是位图的方式。因此不管一个事务锁住页中一个记录还是多个记录,其开销通常都是一致的。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM