• MySQL Doublewrite Buffer及业务评估


    1. 关于Doublewrite Buffe的总结

    Doublewrite Buffer:Doublewrite Buffer出现的初衷是防止buffer pool中的脏页刷新到磁盘中,出现部分写的问题,innodb页大小一般为16k,而Linux操作系统的block size一般为4k。这样在刷新的过程中,如果OS发生crash或者停电,会导致16k的页块只有部分block刷新到磁盘中,而其它的没有,这样会导致数据不一致。Doublewrite Buffer放到系统表空间中,有100个页的大小,当innodb将buffer pool中的页刷新到磁盘中时,会首先copy到Doublewrite Buffer中,再刷新到磁盘中。如果在刷新磁盘的过程中出现问题,innodb会利用doublewrite buffer中存储的页来恢复数据。如果在刷新doublewrite buffer的过程中出现问题,则会利用物理磁盘上的原始页和redo log来恢复数据。

    Doublewrite Buffer的启用会对MySQL的整体性能降低5-10%,可通过innodb_doublewrite参数进行设置,默认是开启的。

    Percona有个单独的参数来设置Doublewrite Buffer的存放位置,innodb_doublewrite_file。

    2. 根据以下内容,演算推导出机器相关的指标:

    响应时间     查询和操作请求ms级返回。

    数据总量     1年内数据量大约500G数据量。

    每秒请求量  每秒有3w次请求。

    读写比        读写比是1:1。

    重要程度     核心系统,P1级故障。

    其他说明     数据记录长度约为1KB,数据1周内数据操作频繁

    推导过程:

    Step1:1年内数据大约500G

    结果:每秒产生的数据量大约诶500*1024*1024/(365*24*60*60)=17KB/s

    Step2: 每秒有3w次请求,读写比是1:1

    结果:每秒读请求为3w/2=1.5w/s,每秒写请求为3w/2=1.5w/s

    Step3: 记录长度大约为1KB

    结果:根据Step1得出的结果,每秒insert的速率为17次/s,根据Step2得到的每秒写请求为1.5w/s,可知每秒14983次为delete和update操作。由于MySQL数据读写操作按照页来处理,页大小为16KB,假设每次操作的页都不相同。那么每秒写操作数据量为:16KB*1.5w=234MB/s,每秒读操作数据量为:16KB*1.5w=234MB/s

    Step4:数据1周内数据操作频繁

    结果:热数据量为:(500/365)*7=9.6G

    Step5:操作ms级返回

    操作ms级别返回,那么需要尽可能的将热数据加载到内存。按照内存命中率接近100%计算的话,那么Innodb buffer大约为9.6GB,而其他内存需求大概为1~2GB,因此内存超配大约为12GB。按照超配原则,写带宽(wBPS)限制为300MB/s;读带宽(rBPS)限制为300MB/s。

  • 相关阅读:
    从输入网址到页面呈现的过程
    Git 常用命令合集
    Jquery浅克隆与深克隆
    CSS变量教程
    设计模式
    Servlet和JSP简述
    SQL Server,MySQL,Oracle三者的区别
    mysql事务处理
    计时器
    java中length,length(),size()区别
  • 原文地址:https://www.cnblogs.com/ivictor/p/5299748.html
Copyright © 2020-2023  润新知