Innodb存储引擎的缓冲池Buffer Pool会保存经常访问的数据到内存中,对MySQL的性能有很大的提升。在做性能测试的时候,由于缓冲池的存在,同一个SQL多次执行的运行时间可能不一样。测试SQL的时候可能需要Innodb Buffer Pool清空,以消除缓冲池对性能的影响。
方法很简单:重启MySQL。
下面是验证过程,可以不用再往下看。
重启之前查看buffer pool中的页数:
1 | show engine innodb status; |
主要输出如下:
1 | ...... |
从输出可以看到,Buffer Pool Size显示一共有8192个页,Free buffers是0,说明已经没有空闲的页了。
Innodb Buffer Pool默认大小是128MB,每个页16KB,所以一共8192个页。
重启数据库后再查看:
1 | ...... |
从输出可以看到,空闲页Free buffers
有5000多个,说明已经使用了大约3000个页。并没有完全清空。
这是因为Innodb Buffer Pool中不止是数据页和索引页,还包括系统页、事务数据页、Insert Buffer、Insert Buffer位图、Undo Log页等等。
这些数据页在MySQL启动的时候就会用到/分配。