返回顶部
首页 > 资讯 > 操作系统 >如何进行Linux设备IO研究与数据库性能调优
  • 158
分享到

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

2023-06-16 21:06:12 158人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关如何进行linux设备io研究与数据库性能调优,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何在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打开文件:

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

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

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

和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。

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

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_DIRECT Fsync()

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研究与数据库性能调优,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网操作系统频道。

--结束END--

本文标题: 如何进行Linux设备IO研究与数据库性能调优

本文链接: https://lsjlt.com/news/285071.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何进行Linux设备IO研究与数据库性能调优
    本篇文章给大家分享的是有关如何进行Linux设备IO研究与数据库性能调优,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何在Linux系统里对数据库及设备IO库进行调优?数据库...
    99+
    2023-06-16
  • 如何进行数据库性能调优
    如何进行数据库性能调优,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言微软工程师的一个工程师曾经对性能调优有一个非常形象的比喻:剥洋葱 ...
    99+
    2024-04-02
  • Oracle数据库ODBC连接与数据备份性能调优
    Oracle数据库ODBC连接和数据备份性能的调优可以通过以下几种方法来实现: 使用合适的ODBC驱动程序:选择适合Oracle数据库版本的ODBC驱动程序,确保驱动程序与数据库版本兼容,并且能够提供最佳性能。 调整ODBC连接参数...
    99+
    2024-07-16
    oracle
  • PL/SQL与Oracle数据库的性能如何调优
    PL/SQL是Oracle数据库的一种编程语言,可以用来创建存储过程、触发器、函数等数据库对象。在进行性能调优时,可以采取以下一些方...
    99+
    2024-05-07
    PL/SQL Oracle
  • 如何在Oracle数据库中进行性能调优和故障排除
    在Oracle数据库中进行性能调优和故障排除可以采取以下一些方法: 使用性能调优工具:Oracle提供了一些性能调优工具,如SQ...
    99+
    2024-03-02
    Oracle
  • 如何调优Aurora数据库的性能
    Aurora数据库是一种高性能、高可靠性的关系型数据库解决方案。要调优Aurora数据库的性能,可以采取以下几种方法: 使用合适的...
    99+
    2024-04-02
  • 如何进行对PDM产品数据管理方法的探索与研究
    这期内容当中小编将会给大家带来有关如何进行对PDM产品数据管理方法的探索与研究,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。产品数据管理其实是一项非常复杂的工作,在产品设计中可以通过产品数据管理将产品信息...
    99+
    2023-06-05
  • 如何进行生产数据库性能优化的分析
    这期内容当中小编将会给大家带来有关如何进行生产数据库性能优化的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。需求:在钉钉群个人简介页面需要显示钉钉群名称和简介,每个群...
    99+
    2024-04-02
  • web性能优化中如何进行no-cache与must-revalidate深入探究
    这期内容当中小编将会给大家带来有关web性能优化中如何进行no-cache与must-revalidate深入探究,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。引言稍微了...
    99+
    2024-04-02
  • 如何监控和调优Cassandra数据库的性能
    要监控和调优Cassandra数据库的性能,可以使用以下方法: 使用监控工具:使用监控工具如DataStax OpsCenter...
    99+
    2024-04-09
    Cassandra
  • 如何在Oracle中进行数据库优化和调整
    在Oracle中进行数据库优化和调整可以通过以下方法: 使用SQL语句调整:优化查询语句,尽量避免全表扫描和使用索引等方式来提高...
    99+
    2024-04-09
    Oracle
  • 怎样通过NoSQL内存数据库来进行Linux性能优化
    这期内容当中小编将会给大家带来有关怎样通过NoSQL内存数据库来进行Linux性能优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  我们不仅要选择适合自己口味的NoS...
    99+
    2024-04-02
  • MySQL数据库备份与恢复性能调优的项目经验解析
    MySQL数据库备份与恢复性能调优的项目经验解析在日常运维中,MySQL数据库备份与恢复的工作是不可或缺的。然而,面对数TB甚至PB级别的数据规模,备份恢复所需的时间和资源消耗往往成为制约数据库性能的关键因素。本文将通过一个大型互联网企业备...
    99+
    2023-11-04
    性能调优 数据库恢复 MySQL备份
  • 教你如何在Linux SysOps中使用SSH进行系统监控与性能调优
    使用SSH进行系统监控和性能调优是Linux系统运维工作的重要部分。下面是一些使用SSH进行系统监控和性能调优的步骤:1. 连接到远...
    99+
    2023-10-09
    Linux
  • 数据库性能调优的艺术:如何通过微调实现最佳性能
    一、索引优化 索引是数据库中用于快速查找数据的一种数据结构,通过创建适当的索引可以大大提高查询性能。在创建索引时,需要考虑以下几点: 选择合适的索引列:索引列应该具有较高的选择性,即不同的值较多。 避免创建过多的索引:索引过多会增加数...
    99+
    2024-02-10
    数据库性能调优 索引优化 查询优化 缓存优化 事务优化
  • Linux系统如何对mongo数据库进行定时备份
    Linux系统如何对mongo数据库进行定时备份,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用方法通过命令nohup python -u mongod_ba...
    99+
    2023-06-28
  • 如何使用Oracle命令进行数据库备份与还原
    这篇文章主要介绍如何使用Oracle命令进行数据库备份与还原,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据导出:将数据库orcl完全导出,用户名system 密码manager 导出到D:\daochu.dmp中...
    99+
    2023-06-21
  • 如何在MySQL中进行数据库性能监控和诊断
    在MySQL中进行数据库性能监控和诊断可以通过以下几种方式: 使用MySQL自带的性能监控工具:MySQL自带了一些性能监控工具...
    99+
    2024-03-06
    MySQL
  • 如何在AmazonAurora上配置数据库参数和调整性能设置
    在Amazon Aurora上配置数据库参数和调整性能设置需要通过Amazon RDS控制台或者AWS命令行工具来进行操作。以下是在...
    99+
    2024-04-02
  • 如何在Teradata中进行数据分区和压缩以优化性能
    在Teradata中,数据分区和数据压缩是两种常见的优化性能技术。数据分区可以帮助提高查询性能,减少查询数据量,而数据压缩可以减少磁...
    99+
    2024-04-09
    Teradata
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作