千家信息网

如何进行Linux设备IO研究与数据库性能调优

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇文章给大家分享的是有关如何进行Linux设备IO研究与数据库性能调优,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何在Linux系
千家信息网最后更新 2025年01月31日如何进行Linux设备IO研究与数据库性能调优

本篇文章给大家分享的是有关如何进行Linux设备IO研究与数据库性能调优,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

如何在Linux系统里对数据库及设备IO库进行调优?

数据库系统是基于文件系统的,其性能和设备读写的机制有密切的关系。和数据库性能密切相关的文件I/O操作的三个操作:

open 打开文件

write 写文件

fdatasync flush操作(将文件缓存刷到磁盘上)。

一、Open操作

open("test.file",O_WRONLY|O_APPDENT|O_SYNC))

系统调用Open会为该进程一个文件描述符fd。这里使用了O_WRONLY|O_APPDENT|O_SYNC打开文件:

1. O_WRONLY表示我们以"写"的方式打开,告诉内核我们需要向文件中写入数据;

2. O_APPDENT告诉内核以"追加"的方式写文件;

3. O_DSYNC告诉内核,当向文件写入数据的时候,只有当数据写到了磁盘时,写入操作才算完成(write才返回成功)。

4. 和O_DSYNC同类的文件标志,还有O_SYNC,O_RSYNC,O_DIRECT。

(1) O_SYNC比O_DSYNC更严格,不仅要求数据已经写到了磁盘,而且对应的数据文件的属性(例如文件长度等)也需要更新完成才算write操作成功。可见O_SYNC较之O_DSYNC要多做一些操作。

(2) O_RSYNC表示文件读取时,该文件的OS cache必须已经全部flush到磁盘了;

(3) 如果使用O_DIRECT打开文件,则读/写操作都会跳过OS cache,直接在device(disk)上读/写。因为没有了OS cache,所以会O_DIRECT降低文件的顺序读写的效率。

二、Write操作

write(fd,buf,6)

在使用open打开文件获得文件描述符之后,我们就可以调用write函数来写入数据了,write会根据前面的open参数不同,而表现不同。

三、Flush阶段

fdatasync(fd) == -1

write操作后,我们还调用了fdatasync来确保文件数据flush到了disk上。fdatasync返回成功后,那么可以认为数据已经写到了磁盘上。像这样的flush的函数还有fsync、sync。

1. Fsync和fdatasync的区别等同于O_SYNC和O_DSYNC的区别。

2. Sync函数表示将文件在OS cache中的数据排入写队列,并不确认是否真的写磁盘了,所以sync并不可以靠。

忽略文件打开的过程,通常我们会说"写文件"有两个阶段,一个是调用write我们称为写数据阶段(其实是受open的参数影响),调用fsync(或者fdatasync)我们称为flush阶段。Linux上的块设备的操作可以分为两类:

***类是使用C标准库中的fopen/fread/fwrite 系列的函数,我们可以称其为 buffered I/O。

具体的I/O path如下:

Application<->Library Buffer<->Operation System Cache<->File System/Volume Manager<->Device

library buffer是标准库提供的用户空间的buffer,可以通过setvbuf改变其大小。

第二类是使用Linux的系统调用的open/read/write 系列的函数,我们可以称其为 non-buffered I/O。

Application<-> Operation System Cache <->File System/Volume Manager<->Device

此外,我们可以通过设置open的O_DIRECT 标志来实现Direct I/O (或者叫Raw I/O ),即绕过OS Cache,直接读取Device ( that's what we want^o^ ), 等于将OS cache换成自己管理的cache。不过,Linus在邮件列表中建议不这么做,而是使用posix_fadvice, madvice。中表明Direct I/O比buffered I/O的性能高很多。

在MySQL中,参数Innodb_flush_method(Linux)可以设定为:Fdatasync、O_DSYNC、O_DIRECT。我们看看这个三个参数是如何影响程序MySQL对日志和数据文件的操作:


Open logFlush logOpen datafileFlush data
Fdatasync
fsync()
fsync()
O_DSYNCO_SYNC

fsync()
O_DIRECT
fsync()O_DIRECTFsync()

fdatasync被认为是安全的,因为在MySQL总会调用fsync来flush数据。使用O_DSYNC是有些风险的,有些OS会忽略该参数O_SYNC 。

我们看到O_DIRECT和fdatasync和很类似,但是它会使用O_DIRECT 来打开数据文件。有数据表明,如果是大量随机写入操作,O_DIRECT 会提升效率。但是顺序写入和读取效率都会降低。所以使用O_DIRECT需要谨慎。

mysql innodb 对应相关参数:

innodb_flush_method有三个值,分别是fdatasync,O_DSYNC和O_DIRECT,其中fdatasync是默认值。

它们控制了InnoDB刷新日志和数据的模式。

fdatasync:InnoDB使用fsync()函数去更新日志和数据文件。

O_DSYNC:InnoDB使用O_SYNC模式打开并更新日志文件,用fsync()函数去更新数据文件。

O_DIRECT:InnoDB使用O_DIRECT模式打开数据文件,用fsync()函数去更新日志和数据文件。

我们看到O_DIRECT和fdatasync和很类似,但是它会使用O_DIRECT 来打开数据文件。有数据表明,如果是大量随机写入操作,O_DIRECT 会提升效率。但是顺序写入和读取效率都会降低。所以使用O_DIRECT需要谨慎。

以上就是如何进行Linux设备IO研究与数据库性能调优,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

文件 数据 函数 参数 磁盘 性能 数据库 设备 效率 日志 系统 更新 阶段 成功 三个 内核 模式 顺序 研究 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京市飞鲨软件开发有限公司 期货跨期套利软件开发 报纸属于万方数据库资源吗 江苏惠赢天下网络技术有限公司 物品图像识别数据库 奉贤区网络技术服务维护方法 软件开发 技术攻坚 网络安全手抄报闪容 vcu软件开发策略制定 中国象棋棋谱数据库 软件开发的基本流程概述 网络安全 国家网站 无尽对决服务器查询 java软件开发思维架构 公安部数据库是否安全 怎么查询服务器托管商是谁 数据库中dw是什么意思 苹果安全服务器全部在中国吗 买个服务器做网站 服务器上的硬盘支持热插拔吗 艾尔登法环无法登录服务器闪退 aupp免费同人数据库 服务器中存储文件怎么处理 怎么看服务器有多少人登录 智慧旅游软件开发商 明日之后有狼袭的服务器在哪里 网络安全的外文参考文献 济南纽航互联网科技有限公司 天津市网络安全知识竞赛系统 关于网络安全和云的问题
0