InnoDBXtraDB使用称为doublewrite缓冲区的特殊功能来提供数据损坏的强大保证。想法是在写入数据文件之前将数据写入主表空间中的顺序日志。如果发生部分页面写入(换句话说,写入损坏),InnoDBXtraDB将使用缓冲区来恢复数据。即使数据写入两次,性能影响通常很小,但在一些繁重的工作负载中,双写缓冲区成为瓶颈。现在我们可以选择将缓冲区放在专用磁盘上,以便并行化缓冲区和表空间上的I / O活动。

此功能允许您将doublewrite缓冲区从主表空间移动到单独的位置。

此选项仅适用于高级用户。请参阅下面的讨论,以充分了解您是否真的需要使用它。

详细资料

以下讨论将阐明此功能可能带来的改进。

DOUBLEWRITE缓冲区的目标

InnoDBXtraDB使用许多结构,一些在磁盘上,另一些在内存中,以尽可能高效地管理数据。要概述不同的组件,请参阅此文章。现在让我们关注doublewrite缓冲区。

InnoDB / XtraDB在其主表空间中使用一个称为doublewrite缓冲区的保留区域,以防止部分页面写入时可能发生的数据损坏。当缓冲池中的数据刷新到磁盘时,InnoDB / XtraDB将一次刷新整个页面(默认为16KB页面),而不仅仅是页面内已更改的记录。这意味着,如果在写入期间发生任何意外情况,页面可能会被部分写入,从而导致数据损坏。

使用双写缓冲区功能,InnoDB / XtraDB首先将页面写入双写缓冲区,然后写入数据文件。

如果在数据文件中发生部分页面写入,InnoDB / XtraDB将检查恢复是否数据文件中页面的校验和与doublewrite缓冲区中页面的校验和不同,因此将知道页面是否已损坏或不。如果它已损坏,恢复过程将使用存储在doublewrite缓冲区中的页面来恢复正确的数据。

如果在doublewrite缓冲区中发生部分写入,则原始页面不受影响,可以与重做日志一起使用以恢复数据。

DOUBLEWRITE缓冲区的性能影响

在通常的工作负载中,性能影响低至5%左右。因此,您应该始终启用doublewrite缓冲区,因为对数据损坏的强有力保证值得小的性能下降。

但是,如果您遇到繁重的工作负载,特别是如果您的数据不适合缓冲池,则doublewrite缓冲区中的写入将与随机读取竞争以访问磁盘。在这种情况下,与没有双写缓冲区的相同工作负载相比,您可以看到性能急剧下降 - 30%的性能下降并不罕见。

另一种可以看到性能影响很大的情况是doublewrite缓冲区已满。然后,新写入必须等到释放doublewrite缓冲区中的条目。

这个功能有什么新功能

在标准的InnoDB / XtraDB安装中,doublewrite缓冲区位于主表空间中(无论是否激活innodb_file_per_table),您无法控制任何相关内容。

该功能添加了一个option(innodb_doublewrite_file),以便为doublewrite缓冲区提供专用位置。

如何为DOUBLEWRITE BUFFER选择一个好的位置

基本上,如果要改进I / O活动,则将doublewrite缓冲区放在不同的磁盘上。但是在SSD或更传统的硬盘上它更好吗?首先,您应该注意页面是在双写缓冲区中以循环方式编写的,只能在恢复时读取。因此,doublewrite缓冲区主要执行顺序写入和一些顺序读取。如果启用写入缓存,则第二个HDD非常擅长顺序写入,这不是SSD的情况。因此,如果您希望从此选项中看到性能优势,则应选择快速HDD。例如,您可以将重做日志(也以顺序方式写入)和doublewrite缓冲区放在同一磁盘上。

版本特定信息

系统变量

引入了以下系统变量。

变量 innodb_doublewrite_file
命令行:
配置文件:
范围: 全球
动态: 没有
变量类型: STR
防守力: 空值

使用此选项可为doublewrite缓冲区创建专用表空间。

此选项需要一个可以使用绝对路径或相对路径指定的文件名。相对路径相对于数据目录。

Double write Buffer的配置的更多相关文章

  1. innodb double write buffer

    两次写是innodb的一个重要特性,目的是为了保证在异常down机或者没电的情况下,保证数据的安全可靠.一次是往内存的double write buffer中写,一次是在刷共享表空间的连续128个页. ...

  2. Google protocol buffer的配置和使用(Linux&&Windows)

    最近自己的服务器做到序列化这一步了,在网上看了下,序列化的工具有boost 和google的protocol buffer, protocol buffer的效率和使用程度更高效一些,就自己琢磨下把他 ...

  3. insert buffer/change buffer double write buffer,双写 adaptive hash index(AHI) innodb的crash recovery innodb重要参数 innodb监控

    https://yq.aliyun.com/articles/41000 http://blog.itpub.net/22664653/viewspace-1163838/ http://www.cn ...

  4. [Reactive Programming] Using an event stream of double clicks -- buffer()

    See a practical example of reactive programming in JavaScript and the DOM. Learn how to detect doubl ...

  5. 020:Buffer Pool 、压缩页、CheckPoint、Double Write、Change Buffer

    一. 缓冲池(Buffer Pool) 1.1 缓冲池介绍 每次读写数据都是通过 Buffer Pool : 当Buffer Pool 中没有用户所需要的数据时,才去硬盘中获取: 通过 innodb_ ...

  6. 【MySQL】mysql buffer pool结构分析

    转自:http://blog.csdn.net/wyzxg/article/details/7700394 MySQL官网配置说明地址:http://dev.mysql.com/doc/refman/ ...

  7. MySQL · 引擎特性 · InnoDB Buffer Pool

    前言 用户对数据库的最基本要求就是能高效的读取和存储数据,但是读写数据都涉及到与低速的设备交互,为了弥补两者之间的速度差异,所有数据库都有缓存池,用来管理相应的数据页,提高数据库的效率,当然也因为引入 ...

  8. Elasticsearch 学习总结 - 相关配置补充说明

    一.   Elasticsearch的基本概念 term索引词,在elasticsearch中索引词(term)是一个能够被索引的精确值.foo,Foo Foo几个单词是不相同的索引词.索引词(ter ...

  9. Mysql数据库配置参数详解大全

    名称 是否需要重启 值 允许值 描述 auto_increment_increment 否 1 1-65,535 auto_increment_increment和auto_increment_off ...

随机推荐

  1. 5分钟记住列表的使用功能-Python基础前传(7)

    学习任何一门技术,最重要的是逻辑而不是内容,仅会内容,我们仅仅是技术的使用者,但如果我们懂得了技术背后的逻辑,我们就是技术的创造者,所以同样领域的工作,有人月入5千,有人月入5万,就是这个差别: 学技 ...

  2. Linux之基础命令

    常用命令 查看ip地址的两种方式 ifconfig ip addr show Linux的两种ip地址: 127.0.0.1 本机回环地址 0.0.0.0 全网地址/绑定所有网卡/所有地址 Linux ...

  3. 一个list<Map>里map其中的一个字段的值相同,如何判断这个字段相同,就把这个map的其他字段存入另一个map中

    //不建议使用Map保存这些,使用实体bean更好 package com.rxlamo.zhidao;   import java.util.*;   public class Main {     ...

  4. FOFA 批量采集url 图形化界面编写

    这是脚本 # coding:utf- import requests,re import time import sys import getopt import base64 guizhe='' s ...

  5. Jmeter Web 性能测试入门 (一):环境配置 (免安装版)

    去官网下载并安装java jdk8 去官网下载jmeter binaries最新的zip,并解压到某路径下.(注:由于jmeter-server的限制,放置的路径不要太长,路径不要带空格,例如:D:\ ...

  6. java课后实验性问题1

    一.一个java类文件中只能有一个公有类吗? 测试代码 public class Test{ public static void main(String[] args){ } public clas ...

  7. RabbitMQ交换器的类型

    RabbitMQ常用的交换器类型有:fanout,direct,topic,headers fanout它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中. direct它会把消息路由到哪 ...

  8. SpringMVC之ajax与表单 Post 数据提交差异小结

    最近在写一个富文本框的后台数据服务的时候遇到一些关于 ajax 提交与 表单提交的比较特殊的案例,这里拿来跟大家分享,希望能让大家有所启发. 1. 首先是常见表单提交在SpringMVC的控制器中的代 ...

  9. 解决jenkins日志爆满 DNS查询错误

    一.故障 公司的jenkins因为日志量太大把磁盘占满,进而影响了其他程序,仔细一看日志文件"/var/log/jenkins/jenkins.log"几分钟产生了30G的日志 日 ...

  10. postman+jmeter接口实例

    接口基础 一.为什么要单独测试接口? 1. 程序是分开开发的,前端还没有开发,后端已经开发完了,可以提前进入测试2. 接口直接返回的数据------越底层发现bug,修复成本是越低的3. 接口测试能模 ...