在以前发表公众号基础上继续完善一下mysql的dml和缓存的关系。(5.7)

可以看到这1000w的数据第二次查询就缓存了结果集。这是以前的图。

第二张图也是以前的。一旦发生数据变化则没有缓存了,重新计算。那么翻过来也可以这样说,如果发生了重新计算,说明了数据一定有DML,也就是并发、或者非并发写。总之一定是写了。
今天说点不一样的。上次我这都是在一个会话下进行的。一次偶然想法,那么在其他会话中是不是一样缓存了呢?要知道在Oracle中 A用户执行select * from t(t是A的)和在B用户下执行select * from a.t这个是要硬解析,而且游标也不一样了。

来个实验。先是自己会话(ID号是65) 步骤是:
1读硬盘
2缓存到了
3更新数据
4无法缓存读硬盘
5缓存到了
接下来多会话模式

自己会话(ID号是67) 步骤是
1读硬盘
2缓存到了
3切换会话,而且是新的会话(因为有可能会说老的会话缓存了,看能不能是吧新的会话)
4不同会话缓存到了
再说一下锁。一定是多会话。


第二个会话被第一个阻塞了22秒。

结论是会话67的执行时间不记录,只有会话69记录了被阻塞时间。
如果超时呢?

还是一样。

文章转载自四海内皆兄弟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




