mysql innodb_double_write特性
知识储备:
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特性的更多相关文章
- mysql笔记04 MySQL高级特性
MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...
- MySQL · 引擎特性 · InnoDB 崩溃恢复过程
MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主 ...
- MySQL · 引擎特性 · InnoDB 事务子系统介绍
http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...
- 涂抹mysql笔记-mysql复制特性
<>mysql复制特性:既可以实现整个服务(all databases)级别的复制,也可以只复制某个数据库或某个数据库中的某个指定的表对象.即可以实现A复制到B(主从单向复制),B再复制到 ...
- MySQL · 引擎特性 · InnoDB index lock前世今生
http://mysql.taobao.org/monthly/2015/07/05/ MySQL · 引擎特性 · InnoDB index lock前世今生 前言 InnoDB并发过程中使用两类锁 ...
- 干货:鲜为人用的MySQL高级特性与玩法!
上一篇文章<万字总结:学习MySQL优化原理,这一篇就够了!>文末给大家留有两个开放的问题: 有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护, ...
- Mysql 三大特性详解
Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的.所以我们通过ps查找mysqld进程是只有一个. 体系架构 InnoDB存储引擎的架构如下 ...
- 不想业务被中断?快来解锁华为云RDS for MySQL新特性
摘要:新特性上线!华为云RDS for MySQL又添新技能,实力保障业务连续性. 本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:Gauss ...
- MySQL高级特性
MySQL管理 用户管理 CREATE USER username IDENTIFIED BY 'password'; 新建用户 CREATE USER@'%' IDENTIFIED BY 'pass ...
随机推荐
- 使用Hexo搭建GitPage
资料: hexo官方文档:https://hexo.io/zh-cn/docs/ jekyll官方文档:http://jekyll.com.cn/docs/home/ 简介: 使用hexo和jekyl ...
- 单片机(MCU)使用常用名字解释
总线:指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信. 地址总线(AB):地址总线是单向的,用于传送地址信息.地址总线的宽度为16位,因此基外部存储器直接寻址64K,16位地址总 ...
- obiz
ofbiz 安装 1. 由 binary 安装: 由 binary 安装非常简单, 以下是安装方法: 下载ofbiz-2.0-beta1-complete.tar.gz, 注意不是ofbiz-2.0- ...
- linux group
groups 查看当前登录用户的组内成员 groups gliethttp 查看gliethttp用户所在的组,以及组内成员 whoami 查看当前登录用户名 /etc/group文件包含所有组 ...
- aop动态代理学习
学习,顺便做个demo,方便理解. A接口有c方法,类B实现A接口,原本应该是执行B类中的c方法,可现在不这样做: 我声明产生B类的代理类B',由它来冒充B类的“兄弟”并“实现”A接口, 对外界来说B ...
- WinForm 控件不闪烁
1: [DllImport("user32")] 2: public static extern int SendMessage(IntPtr hwnd, int wMsg, in ...
- InnoDB和MyISAM存储引擎的区别
在MySQL数据库的使用过程中我们经常会听到存储引擎这个名词.MySQL的存储引擎有好多种如InnoDB.MyISAM.Memory.NDB等等,多存储引擎也是MySQL数据库的特色. InnoDB和 ...
- class、interface、struct的差别
1 struct和class有什么差别 1.1默认的继承訪问权限 Struct是public的,class是private的. 你能够写例如以下的代码: struct A { char a; }; s ...
- ios打包应用程序,生成ipa文件
假设我的程序调试好了,怎么才干发给别人用呢?正常情况下IPA文件是从Xcode的Organizer中输出的,可是我们没有证书,这样输出会产生错误. 以下教你怎样生成ipa文件: 1.到你当前proje ...
- 一道movfuscator混淆过的简单逆向
月赛中出了道经过movfuscator混淆的逆向题目,记录一下过程.跑起来发现需要用户输入长度为20的字符串,我尝试着输入了几次都是直接退出了,没有任何提示.用IDA打开,题目里面几乎全是mo ...