MySQL有两个日志文件:redolog\binlog
基于MYSQL有这两个日志,那么什么时候可能查询慢呢?
1.REDOLOG写满了,在和BINLOG同步的时候
这时系统所有的更新都会被堵住,系统不再接受更新操作
2.系统内存不足,需要REDO LOG分内存给别的内存使用(那么这个淘汰的过程就是REDO LOG 写入BINLOG的过程)
INNODB用缓冲池来管理内存(分为以下三种状态):
1.未使用 2.使用了但是是干净的 3.使用了但是是脏页
3.系统空闲的时候会刷脏页(写盘的过程)
4.关闭数据库的时候也会刷脏页
MYSQL的策略是尽量使用内存的,那么根据这一策略,对于一个长时间运行的mysql而言的话,未被使用的内存是很少的,那么存在的也就是以上三种状态的状态2以及状态3(那么要是是状态3的话,就要把脏页的数据刷到硬盘中才能继续使用)--要是是脏页的话,LRU淘汰策略来淘汰脏页????
如果脏页的数据没有同步到硬盘,这时我们就要先同步到硬盘,数据库就会在这时变的很慢,这时我们就会有以下策略来优化它:
1.innodb_io_capacity这个参数来设置磁盘的读写能力(用以下代码来查看)
fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest
2. innodb_max_dirty_pages_pct 是脏页比例上限,默认值是 75%