- 浏览: 188712 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
grzrt:
zkf55915 写道哥们怎么用啊
好久不用了,就是看帮助资 ...
淘宝MetaQ开源消息队列安装 -
zkf55915:
哥们怎么用啊
淘宝MetaQ开源消息队列安装 -
grzrt:
jinnianshilongnian 写道整这个了?
没有 看 ...
linux内核中链表的实现 -
jinnianshilongnian:
整这个了?
linux内核中链表的实现
对于提供事务支持的数据库,在事务提交时,都要确保事务日志(包含该事务所有的修改操作以及一个提交记录)完全写到硬盘上,才认定事务提交成功并返回给应用层。
一个简单的问题:在*nix操作系统上,怎样保证对文件的更新内容成功持久化到硬盘?
1. write不够,需要fsync
1 #include <unistd.h>
2 int fsync(int fd);
1 #incude <sys/mman.h>
2 int msync(void *addr, size_t length, int flags)
msync需要指定同步的地址区间,如此细粒度的控制似乎比fsync更加高效(因为应用程序通常知道自己的脏页位置),但实际上(Linux)kernel中有着十分高效的数据结构,能够很快地找出文件的脏页,使得fsync只会同步文件的修改内容。
2. fsync的性能问题,与fdatasync
"Unfortunately fsync() will always initialize two write operations : one for the newly written data and another one in order to update the modification time stored in the inode. If the modification time is not a part of the transaction concept fdatasync() can be used to avoid unnecessary inode disk write operations."
多余的一次IO操作,有多么昂贵呢?根据Wikipedia的数据,当前硬盘驱动的平均寻道时间(Average seek time)大约是3~15ms,7200RPM硬盘的平均旋转延迟(Average rotational latency)大约为4ms,因此一次IO操作的耗时大约为10ms左右。这个数字意味着什么?下文还会提到。
Posix同样定义了fdatasync,放宽了同步的语义以提高性能:
1 #include <unistd.h>
2 int fdatasync(int fd);
"fdatasync does not flush modified metadata unless that metadata is needed in order to allow a subsequent data retrieval to be corretly handled."
3. 使用fdatasync优化日志同步
在Berkeley DB下,如果开启了AUTO_COMMIT(所有独立的写操作自动具有事务语义)并使用默认的同步级别(日志完全同步到硬盘才返回),写一条记录的耗时大约为5~10ms级别,基本和一次IO操作(10ms)的耗时相同。
1.每个log文件固定为10MB大小,从1开始编号,名称格式为“log.%010d"2.每次log文件创建时,先写文件的最后1个page,将log文件扩展为10MB大小3.向log文件中追加记录时,由于文件的尺寸不发生变化,使用fdatasync可以大大优化写log的效率4.如果一个log文件写满了,则新建一个log文件,也只有一次同步metadata的开销
发表评论
-
使用pidstat查看进程资源使用情况
2013-03-12 11:06 4591在查看系统资源使用情况时,很多工具为我们提供了从设备角度查 ... -
MySQL中关于查询条件中的字符串空格问题
2013-02-20 19:17 7694假设当前mysql数据库中有个表:sysuser 有个字段 ... -
动态添加MYSQL从库,导出主库
2013-01-15 17:57 1015http://dev.mysql.com/doc/refman ... -
MySQL主从失败 错误Got fatal error 1236解决方法
2013-01-09 16:45 1063由于主服务器异外重启, ... -
mysql 语句的调度优先级及改变
2012-12-07 16:47 1265MySQL的默认的调度策略可用总结如下: · 写入操作优 ... -
redis主从的配置和使用
2012-11-23 14:24 1037redis主从的配置和使 ... -
MySQL水平分区表初体验总结
2012-09-21 15:22 1209本文总结个这段时间研究MySQL水平分区表总结,列举分区 ... -
Linux修改MySql默认存储引擎为InnoDB
2012-09-13 18:25 1580一、关闭相关应用 二、停止mysql bin/m ... -
MySQL数据库的初始化mysql_install_db
2012-09-13 14:13 4684一、mysql_install_db说明 当MySQL的 ... -
四层和七层负载均衡的区别介绍
2012-09-12 11:46 876简单理解四层和七层负载均衡:①所谓四层就是基于IP+端口 ... -
Linux下高并发Tcp需要突破的限制
2012-09-06 13:47 7821、修改用户进程可打开文件数限制 在Linux平台上, ... -
Linux tcpdump命令详解
2012-09-06 10:00 1091简介 用简单的话来定义tcpdump,就是:dum ... -
socket中accept()函数的理解
2012-09-01 22:41 6847如果客户端有连接请 ... -
Linux sar 分析网卡流量
2012-08-23 11:39 1331yum install sysstatsar -n { DEV ... -
[mysql]不要再执着于thread_concurrency
2012-08-20 10:51 3368结论: thread_concurrency 在GNU ... -
【转】对mysql日志进行操作的总结包括 启用,过期自动删除 等
2012-08-19 17:25 9031. 以前我错误的认为mysql的日志可以恢复到任何时 ... -
mysql 主从复制1201错误
2012-08-19 15:59 948工作日志之-MySQL slave Replication E ... -
Redis学习手册(主从复制)
2012-08-19 11:39 822一、Redis的Replication: 这里首先需要说 ... -
Redis学习手册(持久化)
2012-08-19 11:39 782一、Redis提供了哪些持久化机制: 1). RDB持久 ... -
Redis学习手册(虚拟内存)
2012-08-19 11:38 729一、简介: 和大多NoS ...
相关推荐
小议EC加IO联合模型及应用.doc
高职药学论文:小议高职药学创新与实践.doc
在嵌入式Linux系统中,ELF(Executable and Linkable Format)文件格式是广泛使用的可执行文件、共享库和目标文件的标准格式。本文将深入探讨ELF文件的结构和组成,帮助你理解如何在嵌入式环境中处理这些关键的二...
小议网络工程的设计与建设.pdf
小议传统插花的历史与特征.doc
小议疾控中心的管控与构建.docx
小议电视新闻的开拓与优化.doc
小议中华文化之精髓与糟粕——读《三字经》有感.docx
小议中华文化之精髓与糟粕——读《三字经》有感_1.docx
这篇文档主要讨论的是关于河南居民消费行为的调查与分析,主要涵盖了三个方面:农村居民的消费行为特征、个人消费城市化趋势以及消费决策的集体化特点。 首先,农村居民的消费行为特征体现在“糊口化”倾向,即...
小议量化宽松策略与影响.doc
2. **地图数据的集成**:为了提高导航的准确性,车辆GPS系统与电子地图紧密结合,电子地图构置技术确保了定位导航系统的操作精度,提供更精确的导航数据。 3. **捷联惯化空间导航定位系统**:利用激光陀螺测定仪...
小议信息数据库管理与会计管理的结合.docx
小议税制公平与收入分配.docx
小议传统演变与制度创新.pdf
小议知识经济与经济增长.doc
小议期货投资与市场发展.doc
波兰教育论文:小议波兰农村教育的改进.doc
小议科学发展观与伦理思想的契合.doc
小议初中语文教师素质要求与培养研究.docx