mysql更新数据的原理和流程-草稿
本文介绍mysql更新数据的原理和流程
为什么mysql更新的效率很高?
- WAL机制:即更新内存中数据页,同时写redolog+binglog然后返回。后台慢慢将数据页刷到磁盘中。(随机写改为顺序写)
- mysql的chagenbuffer。
为什么mysql偶尔会抖一下
刷新脏页
什么叫脏页?
什么时候触发脏页的flush。
- redolog写满;(尽量避免,因为这时候所有更新都被block主)
- 内存不足:需要加载新的数据页但是内存不够,将数据页淘汰,如果是脏页,就flush到磁盘;(至于为什么不直接淘汰,下次读的时候从redologmerge是出于性能考虑,每次加载的都是干净的数据页)
- 正常的时候,定时刷新
- 正常关闭mysql时候
2是抖一下的原因
buf1fpool数据页三种状态(未使用,使用了但是干净页,使用了但是脏页)。
当数据页没在内存中时候,申请一个页面,如果没有未使用页面就需要淘汰页面,俩种情况,如果淘汰的页面过多,会影响性能
- 干净页直接淘汰
脏页flush,淘汰
fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest