知识储备:

  1、mysql 的crasy recovery 是通过redo log 和undo log 来完成的;

  2、redo log 和undo log的记录的是对页面的物理操作;如在1024号page偏移为100的位置写入‘hello world';也就是说redo log 和nudo log 是否可以正确

     的完成是依赖于page 的;如果这个page本身不对的话redo log 和undo log 将无法进行!

  3、为什么说是无法进行而不是mysql 根据redo log ,undo log 在page 个做出一个错误的结果?这个是因为每个都有一个lsn号,这个lsn号表示的是最后一个操作这个

     页面内容的事务id 、这个lsn 如果和redo log ,unod log 中的对应不上那么就不修复。

innodb_double_write:

  既然redo log 和nudo log 已经有了,为了保证结果的正确性,我们只要保证page的正确性就行了;把内存中的page 刷新到table space 这个操作不可能是原子的,

  也就是说有可能这个page 16 k事实上只写了3,4 k那么我们怎么能在不确定的环境中得到一个确定的结果呢?这个就是innodb_double_write的关键所在了、

  innodb在刷新内存时分两步走

  第一步:把page 刷新到system table space 中。

  第二步:在第一步已经成功完成的基础上,把第一步刷新的页面刷新到page 真正所在的table space 当中去。

  

  完成了以上两步后的积极意义:可以成功的排除page的内容只部分写入对redo log unod log 在做crash recovery 的影响;对page 的也入也就两种情况吧

  1、部分写入,这种情况下innodb 还是可以从system table space 中找到一个正确的page 来完成crash recovery。

  2、如果page 写入完成了,那么innodb 就直接可以用这个page 了,这样crash recovery 也能正确完成。

思考:

  如同double write 这个名字一样,写入数据的量从之前的1份变成了2份;这样是不意味着mysql的性能下降了50%呢?

对innodb_double_write 的优化:

  mysql 对innodb_double_write 也是走了先写memory,顺序写,随机写的老路子。

  1、先写memory:mysql 内存中专门开了2MB用于innodb_double_write的空间叫double_write_buffer 所有要刷新的innodb_buffer_pool

   中的page 先写入这个buffer。

  2、每次从double_write_buffer 中刷新1M到system table space 中。

  1,2这两步与第3步的开销相比要小的多,所以开户innodb_double_write 的情况下mysql 的并没有下降50%这么恐怖!

mysql innodb_double_write特性的更多相关文章

  1. mysql笔记04 MySQL高级特性

    MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...

  2. MySQL · 引擎特性 · InnoDB 崩溃恢复过程

    MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主 ...

  3. MySQL · 引擎特性 · InnoDB 事务子系统介绍

    http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...

  4. 涂抹mysql笔记-mysql复制特性

    <>mysql复制特性:既可以实现整个服务(all databases)级别的复制,也可以只复制某个数据库或某个数据库中的某个指定的表对象.即可以实现A复制到B(主从单向复制),B再复制到 ...

  5. MySQL · 引擎特性 · InnoDB index lock前世今生

    http://mysql.taobao.org/monthly/2015/07/05/ MySQL · 引擎特性 · InnoDB index lock前世今生 前言 InnoDB并发过程中使用两类锁 ...

  6. 干货:鲜为人用的MySQL高级特性与玩法!

    上一篇文章<万字总结:学习MySQL优化原理,这一篇就够了!>文末给大家留有两个开放的问题: 有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护, ...

  7. Mysql 三大特性详解

    Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的.所以我们通过ps查找mysqld进程是只有一个. 体系架构 InnoDB存储引擎的架构如下 ...

  8. 不想业务被中断?快来解锁华为云RDS for MySQL新特性

    摘要:新特性上线!华为云RDS for MySQL又添新技能,实力保障业务连续性. 本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:Gauss ...

  9. MySQL高级特性

    MySQL管理 用户管理 CREATE USER username IDENTIFIED BY 'password'; 新建用户 CREATE USER@'%' IDENTIFIED BY 'pass ...

随机推荐

  1. LoadRunner利用ODBC编写MySql脚本

    最近做了几周的LoadRunner测试,有一些心得,记录下来,以便以后查找. LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持).LoadRunner本身 ...

  2. [TYVJ] P1001 第K极值

    第K极值   背景 Background 成成第一次模拟赛 第一道    描述 Description 给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字a[i]是小于 ...

  3. Unix,windows和Mac中的换行

    Unix 系统里,每行结尾只有“<换行>”,即“\n”:Windows系统里面,每行结尾是“<换行><回车 >”,即“\r\n”:Mac系统里,每行结尾是“< ...

  4. linux中UUID和LABLE

     一.UUID 第一次看到UUID这个东西,是在Ubuntu系统中看到/boot/grub/grub.cfg中对kernel的配置:linux   /boot/vmlinuz-2.6.31-14-ge ...

  5. 3Sum Closest 解答

    Question Given an array S of n integers, find three integers in S such that the sum is closest to a ...

  6. OpenWrt openssl library

    Please install the openssl library (with development headers) sudo apt-get install libssl; rite fail ...

  7. Android应用开发学习之Toast消息提示框

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 本文我们来看Toast消息提示框的用法.使用Toast消息提示框一般有三个步骤: 1.  创建一个Toast对象.可 ...

  8. SPRING+JNDI+C3P0 in tomcat6

    Tomcat 中Jndi是使用Tomcat自带的连接池,由于客户要求,抛弃Tomcat自带的连接池.使用c3p0 .经过几个小时调试,解决方案如下: 环境:Tomcat 6 下面来看Jndi 与 c3 ...

  9. 打造自己个性的notepad ++

    对coder来说,notepad ++ 是一个很不错的文本编辑器.平时用来看看代码.xml文件,都比系统自带的记事本舒服得多.不过,对于像我这种每天用notepad ++写代码的人,一个原装的note ...

  10. 表单验证插件jquery.validate的使用方法演示

    jQueryValidate表单验证效果 jquery.validate验证错误信息的样式控制 <!--validate验证插件的基础样式--> input.error{border: 1 ...