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。

MySQL Doublewrite Buffer及业务评估的更多相关文章

  1. mysql 优化之 doublewrite buffer 机制

    是什么? doublewrite buffer是mysql 系统表空间的一块存储区域. 有什么用? 在Innodb将数据页写到数据存储文件之前,存储从Innodb缓存池刷过来的数据页.且只有将数写入d ...

  2. InnoDB On-Disk Structures(四)--Doublewrite Buffer (转载)

    转载.节选于 https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html The doublewrite buffer ...

  3. 一文了解MySQL的Buffer Pool

    摘要:Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能. 本文分享自华为云社区<MySQL 的 Buffer Pool,终于被我搞懂了>,作者:小林 ...

  4. MySQL准入规范及容量评估

    一.数据库设计 1.表结构设计 -表中的自增列(auto_increment属性)推荐使用bigint类型 -首选使用非空的唯一键, 其次选择自增列或发号器 不使用更新频繁的列,尽量不选择字符串列,不 ...

  5. MySql 缓冲池(buffer pool) 和 写缓存(change buffer) 转

    应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库. 操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问. M ...

  6. [转]MySQL innodb buffer pool

    最近在对公司的 MySQL 服务器做性能优化, 一直对 innodb 的内存使用方式不是很清楚, 乘这机会做点总结. 在配置 MySQL 的时候, 一般都会需要设置 innodb_buffer_poo ...

  7. MySQL join buffer使用

      原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://huanghualiang.blog.51cto.com/6782683/12 ...

  8. MySQL 日常运维业务账号权限的控制

    在MySQL数据库日常运维中,对业务子账号的权限的统一控制十分必要. 业务上基本分为读账号和写账号两种账号,所以可以整理为固定的存储过程,让数据库自动生成对应的库的账号,随机密码.以及统一的读权限,写 ...

  9. MySQL Index--Change Buffer

    Change Buffer功能 当执行INSERT/DELETE/UPDATE三类DML操作需要修改二级索引上数据时,如果需要修改的二级索引页未存在于当前Buffer Pool中,可以先将该" ...

随机推荐

  1. grunt 单独压缩多个js和css文件【转】

    原文地址:http://xiaomiya.iteye.com/blog/2177877 使用grunt来压缩前端js,css文件 因为最近做的客户端本地项目有用到十几个js,js提交之前都需要压缩.用 ...

  2. jQuery图片滚动插件

    //该组件目前仅适用于一次移动一张图片的情况 (function ($) { $.fn.extend({ "scroll": function (options) { option ...

  3. Python模块之常用模块,反射以及正则表达式

    常用模块  1. OS模块 用于提供系统级别的操作,系统目录,文件,路径,环境变量等 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("di ...

  4. Java学习【1】

    一.Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称. 2005年6月,SUN公司公开Java SE 6.Java ...

  5. Odoo 二次开发教程(四)-只读、唯一性验证和ORM方法介绍

    一.只读和唯一性验证 只读的设置有两种方法,一种是实在字段定义时设置为只读,第二种是在页面视图中进行设置. 接前例,我们将学生(tech.student)的名字name字段设置成只读. 方法一:字段定 ...

  6. Eclipse 安装 Maven 插件(图文解说)

    Help  --> 选择Eclipse Marketplace -->  在 Find 中输入 Maven integration for Eclipse  --> 回车搜索

  7. Python基本数据类型——str

    字符串常用操作 移除空白 分割 长度 索引 切片 class str(basestring): """ str(object='') -> string Retur ...

  8. Ajax请求

    <!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...

  9. Sort简单排序

    List<T> 类型排序: public List<ProductionMaterialModel> OrderBybom(List<ProductionMaterial ...

  10. WPF之命令浅谈

    一.认识命令 1.1命令的特点 提到“命令”,我们应该想到命令的发出者,命令的接受者,命令的内容,准备工作,完成任务,回报工作...与事件中的发送者,接受者,消息,处理,处理,处理一一对应,如果是单纯 ...