什么是锁升级?(Lock Escalation)
指将当前锁的粒度降低。比如:
- 把行锁升级为页锁。
- 将页锁升级为表锁。
InnoDB存储引擎
InnoDB存储引擎不存在
锁升级的问题。
因为其不是根据每个记录(行)
来产生行锁的,相反,其根据每个事务访问的每个页
对锁进行管理的,采用的是位图的方式。
因此不管一个事务锁住页
中一个记录
还是多个记录
,其开销通常都是一致的。
举例
假设一张表有300,0000个数据页,每个页大约有100条记录,那么总共有30000,0000条记录。若有一个事务执行全表更新的SQL语句,则需要对所有记录加X锁。若根据每行记录产生锁对象进行加锁,并且每个锁占用10字节,则仅对锁管理就需要差不多需要3GB的内存。而InnoDB存储引擎根据页进行加锁,并采用位图方式,假设每个页存储的锁信息占用30个字节,则锁对象仅需90MB的内存。由此可见两者对于锁资源开销的差距之大。
网友评论