zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    常用Linux 服务器命令--各种性能指标命令
    jenkins离线插件安装--笨方法
    Jmeter压力测试简单教程(包括服务器状态监控)
    【JMeter】JMeter使用plugins插件进行服务器性能监控
    Linux查看服务器配置常用
    Linux下内存查看命令
    【linux命令】lscpu、etc/cpuinfo详解
    Jmeter用于接口测试中【接口耦合关联的实现】
    jmeter教程--简单的做压力测试
    将字母拆分
  • 原文地址:https://www.cnblogs.com/ivictor/p/5299748.html
Copyright © 2011-2022 走看看