这两天查了好多资料,但始终看不出InnoDB设计一个意向锁的机制到底有什么用?去掉这个意向锁的机制只用行级的S和X锁貌似也能实现目前的功能吧?引入这个意向锁的机制,到底能带来什么好处呢?

解决方案 »

  1.   

     意向锁的存在价值在于在定位到特定的行所持有的锁之前,提供一种更粗粒度的锁,可以大大节约引擎对于锁的定位和处理的性能,因为在存储引擎内部,锁是由一块独立的数据结构维护的,锁的数量直接决定了内存的消耗和并发性能。例如,事务A对表t的某些行修改(DML通常会产生X锁),需要对t加上意向排它锁,在A事务完成之前,B事务来一个全表操作(alter table等),此时直接在表级别的意向排它锁就能告诉B需要等待(因为t上有意向锁),而不需要再去行级别判断。