脏页
当修改数据时,如果数据在内存中,就会直接在内存中修改,并且将操作记录在redolog中,这时就可以直接返回了。这时这个内存中的数据页与磁盘中的数据是不同的,称为脏页。
flush
Mysql将内存中的脏页刷新到磁盘称为flush
flush时机
1.当redolog 空间不足时,系统会停止所有更新操作,再把redolog的操作日志写入磁盘
2.当内存空间不足,触发了缓存淘汰机制,而被淘汰的刚好是脏页,就必须先把脏页数据对应的redolog写入磁盘
3.后台线程抽出空闲时间来刷新
4.mysql关闭的时候
1和2对性能影响较大
对于flush时机,两种明显影响性能的情况
1.当一个查询涉及太多数据,导致内存不足,需要淘汰大量脏页,由于会先将脏页刷盘,所以十分影响性能
2.redo log写满了,堵住所有更新。
缓存淘汰脏页,为什么不直接删除脏页,在访问到脏页中的数据时再从磁盘读取并执行redo log的操作?
如果这样的话,每次读取数据到内存中时