美文网首页
丁奇-MySQL实战读书笔记12

丁奇-MySQL实战读书笔记12

作者: 布朗XD | 来源:发表于2021-02-08 10:57 被阅读0次

    你的 SQL 语句为什么变“慢”了

    当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。
    MySQL 偶尔“抖”一下的那个瞬间,可能就是在刷脏页(flush)。

    • 第一种场景,redo log 写满了。这时候系统会停止所有更新操作,把 checkpoint 往前推进,对应的所有脏页都 flush 到磁盘上。
    • 第二种场景,系统内存不足。当需要新的内存页,而内存不够用的时候,就要淘汰一些数据页,空出内存给别的数据页使用。如果淘汰的是“脏页”,就要先将脏页写到磁盘。
    • 第三种场景,认为系统“空闲”的时候,只要有机会就刷一点“脏页”。
    • 第四种场景, MySQL 正常关闭的情况,把内存的脏页都 flush 到磁盘上。

    你要正确地告诉 InnoDB 所在主机的 IO 能力,这样 InnoDB 才能知道需要全力刷脏页的时候,可以刷多快。

     fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest 
    

    然后设置 innodb_io_capacity的值。
    平时要多关注脏页比例,不要让它经常接近 75%。

    mysql> select VARIABLE_VALUE into @a from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_dirty';
    select VARIABLE_VALUE into @b from global_status where VARIABLE_NAME = 'Innodb_buffer_pool_pages_total';
    select @a/@b;
    

    相关文章

      网友评论

          本文标题:丁奇-MySQL实战读书笔记12

          本文链接:https://www.haomeiwen.com/subject/uaxgtltx.html