|
我举一个最简单的例子为什么加了读锁之后还会更新ibdata
innodb是实现了MVCC的,所有的读请求是不会被阻塞的,这是因为每次在所有请求之前都会创建一个当时时间的的副本(也就是undo),所以即使你加了读锁,读一下某个表也会创建undo,对应的也就更新了ibdata,
这里涉及到几点:
1. undo在5.6以前是无法与ibdata分开的,默认是放在系统表空间
2. 5.6以前没有对只读事务做优化,默认每一个select都会创建相应的undo,show engine innodb status的最后部分可以看到 xx view in innodb,这个就是每个查询之前创建的undo视图 |
|