美文网首页数据库
为什么mysql会偶尔抖动一下

为什么mysql会偶尔抖动一下

作者: 牛牛_735d | 来源:发表于2019-05-13 11:24 被阅读0次

基本概念

脏页: 内存页跟磁盘数据页内容不一致的时候、称这个内存页为 脏页
干净页: 内存数据写入磁盘后、内存和磁盘上的数据页的内容一致、称为 干净页

干净页和脏页都在内存

不难想象、平时操作很快的sql、其实就是在写内存和日志、而mysql抖动的那一瞬间、可能就是在刷脏页

什么场景下会引发数据库的flush过程呢 ?

1. innodb的redo log满了: 此时系统会停止所有更新、把checkpoint推进、redo log留出空间
   此时需要把原write pos和checkpoint之间的所有脏页都flush到磁盘上
2. 系统内存不足: 当需要新的内存页、而内存不够用的时候、就需要淘汰一些数据页、空出内存给别的数据页使用
   若淘汰的是脏页、则需要先将内容flush到磁盘
   为什么不直接淘汰内存页 ? 
   若刷脏页、一定会写磁盘、就保证了每个数据页有两种状态
   1) 在内存里存在、内存肯定是正确的结果、直接返回
   2) 在内存里无数据、在磁盘数据文件上肯定是正确的结果、直接读入内存后返回、这样的效率最高 
3. mysql系统空闲的时候
4. mysql正常关闭的时候、mysql会把内存的脏页全部flush到磁盘、下次启动的时候、直接从磁盘读取、启动很快

其中:1、2会影响性能
   1. 会停止所有更新、性能会跌为0、应该尽可能的避免
   2. 是内存不够用、需要将脏页写到磁盘、其实是常态、innodb使用buffer pool来管理内存、缓存池中的内存页有3种状态
      1) 暂未使用的 2) 已用&干净页 3)已用&脏页
   innodb的策略是尽量使用内存、对一个长时间运行的db来说、未被使用的页面很少
   当需要读入的数据页不在内存的时候、就必须到缓存池申请一个数据页、只能把最久不使用的数据页从内存淘汰
   若淘汰的是干净页、直接释放出来复用、若淘汰的是脏页、需要先flush到磁盘
   

innodb刷脏页的控制策略

innodb_io_capacity 告诉innodb所在主机的io能力、innodb才知道全力刷脏页时、可以刷多块、
    建议设置为磁盘的iops、测试:  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并不是一直全力脏页、毕竟还要服务用户请求、那么是如何控制的呢 ?
1. 脏页比例(innodb_max_dirty_pages_pct)  2.redo log写盘速度
要合理设置io能力、关注脏页比例、当前脏页比例是通过 .._dirty/.._total 计算的
innodb_buffer_pool_pages_dirty 当前脏页数量
innodb_buffer_pool_pages_total 总的页数量
 
innodb刷页策略: innodb_flush_neighbors 为1: 代表若刷脏页时、临近页也是脏页、则一并刷到磁盘
为0、则只刷本页、
1的策略在机械硬盘时期比较有用、可以减少很多随机io、现在iops都不是问题、设置0即可、减少sql响应时间
mysql8.0 默认为0

Q: 访问某条记录时、mysql是如何知道记录是否在内存中 ?
A:

每个数据页都是有编号的、到内存中查看对应页的编号、若不在内存、去磁盘查找即可

相关文章

  • 为什么mysql会偶尔抖动一下

    基本概念 脏页: 内存页跟磁盘数据页内容不一致的时候、称这个内存页为 脏页干净页: 内存数据写入磁盘后、内存和磁盘...

  • mysql之抖动

    flush: 就是把内存里的数据写入磁盘的过程。脏页:当内存数据页跟磁盘数据页内容不一致的时候。干净页:内存数据写...

  • Mysql 5.6迁移至PostgreSQL 9.6的实践小结

    一、背景 实际生产中,发现mysql查询性能存在抖动,同样的sql,正常执行时间是秒级,但是偶尔会有执行上百秒的情...

  • 内存优化——内存抖动

    内存抖动是指内存频繁地分配和回收,而频繁的gc会导致卡顿,严重时和内存泄漏一样会导致OOM。内存抖动为什么会造成O...

  • 偶尔放纵一下会怎样?

    这个题目让我想起了明明知道熬夜伤身体,却还是偶尔熬夜到后半夜;孕期明明知道不可以吃辣条之类的垃圾食品,却还是会偶尔...

  • 【MySQL】12|为什么我的MySQL会“抖”一下

    有时会遇到这样的场景,一条SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得很慢,并且这样的场...

  • 汽车方向盘为什么会抖动?

    汽车方向盘抖动,是我们日常行车过程中最为常见的车辆毛病之一,那么造成这种情况的原因是什么呢?今天,就来跟大家聊聊方...

  • 偶尔会…

    偶尔会坐在长椅上 感受一下万物 不过如此 连绵不断的情感 不过如此 树枝随风晃动的角度 很深奥啊 总是向左,树叶从...

  • 偶尔的放松一下会很好

    今天今天星闪闪……,歌词忘了。 我这个周末来到了另一座城市,和舍友她们组织了一场说走就走的短途旅行,其实,这...

  • 万达4D观影体验

    #观影 哥斯拉2:怪兽之王# 万达4D厅 又名鬼屋过山车蹦迪厅 一会脑后生风 一会天上下雨 偶尔伴随座椅剧烈抖动 ...

网友评论

    本文标题:为什么mysql会偶尔抖动一下

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