- 浏览: 7901826 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
mysql这玩意,其实还真不少东西值得学习的,这不遇到了一个之前忽视的新概念:
double buffer write,经过查看,小结如下,
原文参考
http://www.mysqlperformanceblog.com/2006/08/04/innodb-double-write/
翻译如下;
为什么要用doublewrite?
目的是为了保证出现部分写失效(partial page write)--即数据页写到一半时就出现故障--时的数据安全性。Innodb并不在日志中记录整个数据页,而是使用一种称之为“生理”日志的技术,即日志项中只包含页号、对数据进行的操作(如更新一行记录)和日志序列号等信息。这一日志结构的优点是能够减少写入到日志的数据量,但这也要求要保持页内部的一致性。页的版本号是没关系的,数据页可以是当前版本(这时Innodb(故障恢复时)会跳过对页的更新操作)若是早期版本(这时Innodb将执行更新操作)。但如果页内部数据不一致,恢复将不能进行。
部分写失效
什么是部分写失效,为什么会出现这一现象呢?部分写失效指的是提交给操作系统的写数据页操作只完成了一部分。例如一个16K的Innodb数据页中只有4K被更新了,其余部分数据还是旧的。大部分的部分写失效都在断电时产生,在操作系统崩溃时也可能出现,这是由于操作系统可能将一个写16K数据的操作分割成多个写操作(这可能由文件碎片导致),而在执行这多个写操作的过程中发出的故障。当使用软件RAID技术时,数据页可能恰好跨越分片(stripe)的边界,这时也需要执行多个IO操作,因此也可能导致部分写失效。当使用硬件RAID又没有使用带电池的缓存时,断电时出现部分写失效也是可能的。当发送到磁盘本身只有一个写操作时,理论上硬件可以保证写操作即使在断电时也可以完成,因为驱动器内部应该积累有足够的电量来完成这一操作。但实话说我并不知道事实是不是这样,这很难检测,而且这也不是部分写失效的唯一原因。我所知道的只是部分写失效可能会出现,当Innodb实现 doublewrite功能前,我遇到过很多由于这一原因而导致数据被破坏。
doublewrite如何工作?
你可以将doublewrite看作是在Innodb表空间内部分配的一个短期的日志文件,这一日志文件包含100个数据页。Innodb在写出缓冲区中的数据页时采用的是一次写多个页的方式,这样多个页就可以先顺序写入到doublewrite缓冲区并调用fsync()保证这些数据被写出到磁盘,然后数据页才被定出到它们实际的存储位置并再次调用fsync()。故障恢复时Innodb检查doublewrite缓冲区与数据页原存储位置的内容,若数据页在doublewrite缓冲区中处于不一致状态将被简单的丢弃,若在原存储位置中不一致则从doublewrite缓冲区中还原。
doublewrite缓冲区对MySQL有何影响?
虽然doublewrite要求每个数据页都要被写二次,其性能开销远远小于二倍。写出到doublewrite缓冲区时是顺序写,因此开销很小。 doublewrite同时还可以降低Innodb执行的fsync()操作,即不需要写每个页时都调用一下fsync(),而可以提交多个写操作最后再调用一次fsync()操作,这使得操作系统可以优化写操作的执行顺序及并行使用多个存储设备。但在不使用doublewrite技术时也可以用这些优化,事实上这些优化是与doublewrite同时实现的。因此总体来说,我预计使用doublewrite技术带来的性能开销不会超过5%到10%。
能否禁用doublewrite?
如果你不关心数据一致性(比如使用了RAID0)或文件系统可以保证不会出现部分写失效,你可以通过将innodb_doublewrite参数设置为0还禁用doublewrite。但通常这可能带来更大的麻烦。
查看是否打开了double write
show variables like "%double%";
查看使用情况
show status like "%innodb_dblwr%";
其中
innodb_dblwr_pages_written 为从buffer pool中flush
了多少个页到double write buffer中,
Innodb_dblwr_writes 为多少次真正写到文件中去
double buffer write,经过查看,小结如下,
原文参考
http://www.mysqlperformanceblog.com/2006/08/04/innodb-double-write/
翻译如下;
为什么要用doublewrite?
目的是为了保证出现部分写失效(partial page write)--即数据页写到一半时就出现故障--时的数据安全性。Innodb并不在日志中记录整个数据页,而是使用一种称之为“生理”日志的技术,即日志项中只包含页号、对数据进行的操作(如更新一行记录)和日志序列号等信息。这一日志结构的优点是能够减少写入到日志的数据量,但这也要求要保持页内部的一致性。页的版本号是没关系的,数据页可以是当前版本(这时Innodb(故障恢复时)会跳过对页的更新操作)若是早期版本(这时Innodb将执行更新操作)。但如果页内部数据不一致,恢复将不能进行。
部分写失效
什么是部分写失效,为什么会出现这一现象呢?部分写失效指的是提交给操作系统的写数据页操作只完成了一部分。例如一个16K的Innodb数据页中只有4K被更新了,其余部分数据还是旧的。大部分的部分写失效都在断电时产生,在操作系统崩溃时也可能出现,这是由于操作系统可能将一个写16K数据的操作分割成多个写操作(这可能由文件碎片导致),而在执行这多个写操作的过程中发出的故障。当使用软件RAID技术时,数据页可能恰好跨越分片(stripe)的边界,这时也需要执行多个IO操作,因此也可能导致部分写失效。当使用硬件RAID又没有使用带电池的缓存时,断电时出现部分写失效也是可能的。当发送到磁盘本身只有一个写操作时,理论上硬件可以保证写操作即使在断电时也可以完成,因为驱动器内部应该积累有足够的电量来完成这一操作。但实话说我并不知道事实是不是这样,这很难检测,而且这也不是部分写失效的唯一原因。我所知道的只是部分写失效可能会出现,当Innodb实现 doublewrite功能前,我遇到过很多由于这一原因而导致数据被破坏。
doublewrite如何工作?
你可以将doublewrite看作是在Innodb表空间内部分配的一个短期的日志文件,这一日志文件包含100个数据页。Innodb在写出缓冲区中的数据页时采用的是一次写多个页的方式,这样多个页就可以先顺序写入到doublewrite缓冲区并调用fsync()保证这些数据被写出到磁盘,然后数据页才被定出到它们实际的存储位置并再次调用fsync()。故障恢复时Innodb检查doublewrite缓冲区与数据页原存储位置的内容,若数据页在doublewrite缓冲区中处于不一致状态将被简单的丢弃,若在原存储位置中不一致则从doublewrite缓冲区中还原。
doublewrite缓冲区对MySQL有何影响?
虽然doublewrite要求每个数据页都要被写二次,其性能开销远远小于二倍。写出到doublewrite缓冲区时是顺序写,因此开销很小。 doublewrite同时还可以降低Innodb执行的fsync()操作,即不需要写每个页时都调用一下fsync(),而可以提交多个写操作最后再调用一次fsync()操作,这使得操作系统可以优化写操作的执行顺序及并行使用多个存储设备。但在不使用doublewrite技术时也可以用这些优化,事实上这些优化是与doublewrite同时实现的。因此总体来说,我预计使用doublewrite技术带来的性能开销不会超过5%到10%。
能否禁用doublewrite?
如果你不关心数据一致性(比如使用了RAID0)或文件系统可以保证不会出现部分写失效,你可以通过将innodb_doublewrite参数设置为0还禁用doublewrite。但通常这可能带来更大的麻烦。
查看是否打开了double write
show variables like "%double%";
查看使用情况
show status like "%innodb_dblwr%";
其中
innodb_dblwr_pages_written 为从buffer pool中flush
了多少个页到double write buffer中,
Innodb_dblwr_writes 为多少次真正写到文件中去
发表评论
-
mybatis generator中的字段大小写生成问题
2017-10-22 19:35 11333mybatis generator插件中,如果 mysql数据 ... -
MySQL统计一个列中不同值的数量
2017-07-11 14:04 16267https://yiqiwuliao.com/post/mys ... -
mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
2017-03-02 09:44 1771权限问题,授权 给 root 所有sql 权限 mysql ... -
几个不错的MYSQL 优化TIPS
2016-11-19 12:30 794图片来自http://imysql.com/的PDF分享 [ ... -
powerdesign 逆向ORACLE的坑
2016-09-27 17:08 549要注意的是,在WIN 64中,如果要用powerdesin 来 ... -
( 转)mysql中删除两条重复记录中的一条
2015-10-19 20:19 1320| id | createTime | labId | pub ... -
mysql中sql语句=,>的时候的索引设置
2015-05-02 12:27 1303在 https://www.percona.com/blog/ ... -
mysql中profile的使用
2015-04-30 11:11 2222mysql 的 sql 性能分析器主要用途是显示 sql 执行 ... -
mysql中的sql mode
2015-04-13 11:29 1141mysql sql mode小结 1 sql mode可以 ... -
PROCEDURE ANALYSE()为mysql提高性能提供建议
2015-04-02 16:37 1444procedure analyse();语法如下 select ... -
mongodb中意外退出的问题
2015-02-11 14:32 1334mongodb启动的时候,意外退出: Unclean shut ... -
mysql 5.5中保留字查询
2014-06-05 23:16 1477mysql 5.5中保留字查询 http://www.5is ... -
(转)oracle 临时表空间的增删改查
2014-03-18 12:44 1126oracle 临时表空间的增删改查 1、查看临时表空间 (d ... -
pl-sql developer安装
2014-02-07 09:16 1119一直都是机器本机上有oracle,所以装pl sql deve ... -
oracle中的nvl,nvl2等参数
2013-12-26 11:18 22711.nul函数将一个null值转换为一个实际的值。 数据类型可 ... -
Oracle中的ROWNUM rowid 以及MySQL中实现rownum功能类似的语句
2013-12-26 11:08 2352http://gong-10140.iteye.com/blo ... -
ORACLE XE版本的限制
2013-12-07 08:11 364710g中用户数据最大为4G, 11G中最大为11G,如果超出大 ... -
oracle中监控索引是否可用
2013-11-04 07:22 1065在oracle中,可以使用如下的方法监控索引是否可用: a ... -
mysql 5.6中的时间类型的新精度介绍
2013-10-28 09:33 8401留意到mysql 5.6中,可以使用select now(6) ... -
<<oracle索引技术》读书笔记1
2013-08-25 16:23 1315expert indexing in oracle datab ...
相关推荐
1.double write官方介绍 InnoDB uses a novel file flush technique called doublewrite.... Only after the write and the flush to the doublewrite buffer have completed, does InnoDB write the page
2. 二次写(Double Write):InnoDB 引擎会将数据写入两次,以确保数据安全。 3. 自适应哈希索引(Adaptive Hash Index):InnoDB 引擎会根据实际情况自动创建哈希索引以提高性能。 4. 预读(Read Ahead):InnoDB ...
例如,InnoDB的双倍读取缓冲区(double write buffer)大小可以提高写入性能,而JSON数据类型则允许存储非结构化数据,适应NoSQL的趋势。 在Linux环境下安装MySQL 5.7.29,你需要首先解压缩文件“mysql-5.7.29-...
它引入了自适应哈希索引(Adaptive Hash Index)和双读缓冲区(Double Write Buffer),提高了数据一致性和可靠性。 2. **查询性能提升**:MySQL 5.7引入了Query Optimizer改进,如Cascading Ref优化器和更智能的...
- **半写入数据页恢复**:“Restoring possible half-written data pages from the doublewrite buffer...”,MySQL正尝试从双写缓冲区中恢复可能存在问题的数据页。 - **日志恢复进度**:“Doing recovery: ...
另外,InnoDB的缓冲池(Buffer Pool)管理、自适应哈希索引(Adaptive Hash Index)、双写缓冲(Double Write Buffer)和redo log等机制也会有详尽的解释,这些都是理解InnoDB性能的关键。 此外,书中会讨论InnoDB...
它将每个事务的日志先写入共享内存的Double Write Buffer,然后再写入Redo Log,从而在系统崩溃时可以恢复数据。 4. **innodb_flush_log_at_trx_commit**参数:这个参数控制InnoDB在事务提交时如何处理Redo Log。...
- **双写缓冲(Double Write Buffer)优化**:增强了数据安全性,降低了因硬件故障导致的数据丢失风险。 3. **JSON支持**: MySQL5.7开始支持内置的JSON数据类型,允许直接存储和查询JSON格式的数据,无需进行...
### 网易技术部MySQL中文... - 可能是指`innodb_doublewrite`参数,解释了该参数如何影响双写缓冲区的使用。 以上知识点涵盖了从数据库开发到优化的各个环节,对于想要深入了解MySQL的开发者来说是非常宝贵的资源。
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联...插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为
同时使用一种 -- next-key locking 的锁策略来避免幻读现象的产生,还提供了插入缓冲(insert buffer) 二次写(double write) 自适应哈希索引,预读(read ahead)等高性能和高可用的功能。对于表中的数据innodb...
文档中提到的一些术语和概念包括Buffer Pool、LRU、Doublewrite Buffer、Undo Log、Data Dictionary等。还有一些未涉及的概念如Binary Log,它是用于复制和备份的,与InnoDB的事务日志是两个不同的概念。 8. 关于...
- **磁盘结构**:包括表空间(Tablespaces)、数据字典(Data Dictionary)、双写缓冲区(Doublewrite Buffer)、重做日志(Redo Log)和撤销日志(Undo Logs)等部分。 - **特点描述**: - **支持事务**:确保一组SQL操作...
2. **二次写(Double Write)**:用于提高崩溃恢复能力,在写入数据之前先写入到缓冲池中的二次写缓冲区,再批量写入到磁盘。 3. **自适应哈希索引(Adaptive Hash Index, AHI)**:自动创建基于热点数据的哈希索引...
* 二次写(Double Write):InnoDB引擎使用二次写来确保数据的一致性。 * 自适应哈希索引(Adaptive Hash Index):InnoDB引擎使用自适应哈希索引来提高查询性能。 * 预读(Read Ahead):InnoDB引擎使用预读来提高...
- 两次写(Doublewrite):确保在发生部分写失败的情况下,数据页可以被正确地写入磁盘,提高了数据的可靠性。 - 自适应哈希索引(Adaptive Hash Index):InnoDB可以监视表索引的使用情况,并在适当的条件下自动...
2. Double Write Buffer:确保数据页写入的完整性,减少因写入失败造成的恢复工作,同时减少fsync调用,提高性能。 3. Adaptive Hash Index:根据查询模式动态创建哈希索引,提升查询效率。但在高并发查询时,可能...