知识储备:

  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%这么恐怖!

转载于:https://www.cnblogs.com/JiangLe/p/5624951.html

mysql innodb_double_write特性相关推荐

  1. MySQL引擎特性GIS-R-TREE

    MySQL引擎特性GIS-R-TREE Geohash用于代表位置的经纬度编码成一个字符串,支持WGS 84 Coordinate System MySQL支持的空间数据类型包括GEOMETRY,PO ...

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

    涂抹mysql笔记-mysql复制特性 mysql复制特性:既可以实现整个服务(all databases)级别的复制,也可以只复制某个数据库或某个数据库中的某个指定的表对象.即可以实现A复制到B(主 ...

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

    在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程. 本文代码分析基于 MySQL 5.7.7-RC ...

  4. mysql索引_mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结)

    原标题:mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结) mysql为什么使用B+ Tree索引,不使用B- Tree索引? 索引顺序如何生效? 什么是覆盖索引? orde ...

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

    前言 在前面几期关于InnoDB Redo和Undo实现的铺垫后,本节我们从上层的角度来阐述InnoDB的事务子系统是如何实现的,涉及的内容包括:InnoDB的事务相关模块,如何实现MVCC及ACID ...

  6. MySQL - InnoDB特性 - Buffer Pool漫谈

    转载自  MySQL - InnoDB特性 - Buffer Pool漫谈 缓存管理是DBMS的核心系统,用于管理数据页的访问.刷脏和驱逐:虽然操作系统本身有page cache,但那不是专门为数据库 ...

  7. 下面不是mysql特性_下面( )不是MySQL的特性。_学小易找答案

    [单选题]如何检测 2型糖尿病 [填空题]<5>以下do-while语句中循环体的执行次数是( ). a=10; b=0; do { b+=2; a-=2+b; } while (a> ...

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

    本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:GaussDB 数据库. 相信很多用户在实际业务中都会碰到用户会话被中断这样的痛点,这时候其应 ...

  9. MySQL · 引擎特性 · InnoDB 事务系统

    MySQL · 引擎特性 · InnoDB 事务系统 前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍Inn ...

最新文章

  1. C++中的类属(泛型)机制——模板
  2. PHP-Curl模拟HTTP请求
  3. CodeForces - 1058A. In Search of an Easy Problem
  4. 论文浅尝 | Zero-Shot Transfer Learning for Event Extraction
  5. Android官方开发文档Training系列课程中文版:与其它APP交互之将用户带到其它的APP
  6. 【C++基础学习】二维数组的动态分配及参数传递
  7. Java 集成freeotp_Java Token.setImage方法代碼示例
  8. mysql创建用户navicat_14MYSQL创建用户和授权、15Navicat的使用、16-pymysql模块的使用、17-索引...
  9. RPC理论以及Dubbo的使用介绍
  10. 16.PHP脚本的执行
  11. opencv-python版本问题
  12. Mac 终端命令自动补齐的办法
  13. 神经动力学模型的建立
  14. 华硕飞行堡垒7在BIOS中开启AMD-V
  15. 未來用工新趨勢_2019年社会化用工成新趋势
  16. C语言课设实验设备管理系统(大作业)
  17. MySQL Workbench建表时的PK,NN,UQ,B,UN,ZF,AI,G
  18. cocos creator微信小游戏,使用微信云开发实现“世界排行榜”
  19. 实验一 验证删除快照时VMware会改变父快照或基础磁盘
  20. 花式打印菱形图案!!

热门文章

  1. 使用c 对mysql数据库_c对mysql数据库的操作
  2. ios 倒数器_如何使用倒数计时器来停止游戏 – iOS [SWIFT] –
  3. jQuery的getter和setter
  4. 中煤 php面试,中煤总部笔试面试经验
  5. 支付宝花呗接口接入php,支付宝小程序开通花呗接口,这是正式向微信小程序正式宣战?...
  6. mediacodec延时_FFmpeg优化点播延时方案
  7. qjsonarray 合并_QJsonObject和QJsonArray的巨坑
  8. 20200612:力扣192周周赛上
  9. 20190913:(leetcode习题)罗马数字转整数
  10. mysql某个表被行锁了_一文搞懂MySQL行锁、表锁、间隙锁详解