MySQL Doublewrite Buffer及业务评估
2016-03-20 21:33
357 查看
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。
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。
相关文章推荐
- Professor John(DP)
- JavaScript学习之路
- 模拟,找次品硬币,Counterfeit Dollar(POJ 1013)
- nodejs
- jquery data attr val 用法
- No.4小白的HTML+CSS心得篇
- css实现垂直水平居中
- 关于前端HTML/CSS几个问题
- CSS垂直居中和水平居中
- jsp笔记,包括编译指令和动作指令,九大对象等
- DOM操作样式
- CSS垂直居中和水平居中
- js设计模式-工厂模式(XHR工厂)
- JQuery MultiSelect(左右选择框)
- HTML基础2 表单和框架
- MEAN Stack入门-1: Node.js-to-AngularJS组件介绍
- JavaScript学习笔记(一)
- previously initiated loading for a different type with name "javax/servlet/ServletContext"
- js设计模式-工厂模式(抽象工厂)
- AngularJS中的指令实践开发指南(二)