(十)为什么sql会抖动?

问题思考:

      一SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。

      好像就是数据库抖动了一下!

为什么?

      分析:InnoDB在处理更新语句的时候,只做了写日志这个磁盘操作。这个日志 叫作redo log(重做日志),也就是《孔乙己》里咸亨酒店掌柜用来记账的粉板,在更新内存写 redo log后,就返回给客户端,本次更新成功。

      类比分析:掌柜记账的账本是数据文件,记账用的粉板是日志文件(redo log),掌柜的记忆就是内存掌柜的要更新账本,就是把内存写入写入磁盘的过程,术语就是flush,在flush之前,孔乙己的赊账总额与掌柜的手里的账本是不一致的,现在此时:掌柜的的内存与粉板的数据是不一致的,我们称这个内存页“脏页”;

抖动的原因出来啦:

MySQL 偶尔“ 下的那个瞬间,可能就是在 刷脏页(flush)
继续分析,为什么会出现刷脏页?
     (1)第一种,粉板满了,挤不下了,有人再来赊账,,,,,,需要重新擦掉一些;
              innoDB的redo log满了,系统停止更新,把checkpoint往前推进,redo留出空间继续写;
     (2)第二种,生意太好,要记住的事态多,掌柜的记不住了,赶紧找账本把孔乙己的帐额加进去;
              系统内存不足,需要新的内存页,但是不够用,就要淘汰一些数据页;
     (3)mysql空闲时,有机会就刷一下,这个不影响性能;
     (4)msyql关闭的时候,myslq会把脏页的都flush到磁盘,下次启动,直接读取;也不影响性能;
分析:
      InnoDB 的策略是尽量使用内存,因此对于 个长时间运行的库来说,未被使用的页面很少。
      要避免第一种和第二种;
InnoDB刷脏页的控制策略
InnoDB的刷脏页的控制策略分两步:
(1)设置数innodb_io_capacity提高脏页比例上限;
(2)设置参数innodb_max_dirty_pages_pct,提高脏页比例上限刷脏页速度;
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值