自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux設(shè)備IO研究與數(shù)據(jù)庫性能調(diào)優(yōu)

系統(tǒng) Linux
本篇文章主要是教大家如何在Linux系統(tǒng)里對(duì)數(shù)據(jù)庫及設(shè)備IO庫進(jìn)行調(diào)優(yōu),相信對(duì)于Linux的初學(xué)者來說會(huì)有很大的幫助!

本篇文章主要是教大家如何在Linux系統(tǒng)里對(duì)數(shù)據(jù)庫及設(shè)備IO庫進(jìn)行調(diào)優(yōu),相信對(duì)于Linux的初學(xué)者來說會(huì)有很大的幫助!

數(shù)據(jù)庫系統(tǒng)是基于文件系統(tǒng)的,其性能和設(shè)備讀寫的機(jī)制有密切的關(guān)系。和數(shù)據(jù)庫性能密切相關(guān)的文件I/O操作的三個(gè)操作:

open               打開文件

write                寫文件

fdatasync        flush操作(將文件緩存刷到磁盤上)。

一、Open操作

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

系統(tǒng)調(diào)用Open會(huì)為該進(jìn)程一個(gè)文件描述符fd。這里使用了O_WRONLY|O_APPDENT|O_SYNC打開文件:

1. O_WRONLY表示我們以"寫"的方式打開,告訴內(nèi)核我們需要向文件中寫入數(shù)據(jù);

2. O_APPDENT告訴內(nèi)核以"追加"的方式寫文件;

3. O_DSYNC告訴內(nèi)核,當(dāng)向文件寫入數(shù)據(jù)的時(shí)候,只有當(dāng)數(shù)據(jù)寫到了磁盤時(shí),寫入操作才算完成(write才返回成功)。

4. 和O_DSYNC同類的文件標(biāo)志,還有O_SYNC,O_RSYNC,O_DIRECT。

       (1) O_SYNC比O_DSYNC更嚴(yán)格,不僅要求數(shù)據(jù)已經(jīng)寫到了磁盤,而且對(duì)應(yīng)的數(shù)據(jù)文件的屬性(例如文件長(zhǎng)度等)也需要更新完成才算write操作成功??梢奜_SYNC較之O_DSYNC要多做一些操作。

       (2) O_RSYNC表示文件讀取時(shí),該文件的OS cache必須已經(jīng)全部flush到磁盤了;

       (3) 如果使用O_DIRECT打開文件,則讀/寫操作都會(huì)跳過OS cache,直接在device(disk)上讀/寫。因?yàn)闆]有了OS cache,所以會(huì)O_DIRECT降低文件的順序讀寫的效率。

二、Write操作

write(fd,buf,6)

在使用open打開文件獲得文件描述符之后,我們就可以調(diào)用write函數(shù)來寫入數(shù)據(jù)了,write會(huì)根據(jù)前面的open參數(shù)不同,而表現(xiàn)不同。

三、Flush階段

fdatasync(fd) == -1

write操作后,我們還調(diào)用了fdatasync來確保文件數(shù)據(jù)flush到了disk上。fdatasync返回成功后,那么可以認(rèn)為數(shù)據(jù)已經(jīng)寫到了磁盤上。像這樣的flush的函數(shù)還有fsync、sync。

1. Fsync和fdatasync的區(qū)別等同于O_SYNC和O_DSYNC的區(qū)別。

2. Sync函數(shù)表示將文件在OS cache中的數(shù)據(jù)排入寫隊(duì)列,并不確認(rèn)是否真的寫磁盤了,所以sync并不可以靠。

忽略文件打開的過程,通常我們會(huì)說“寫文件”有兩個(gè)階段,一個(gè)是調(diào)用write我們稱為寫數(shù)據(jù)階段(其實(shí)是受open的參數(shù)影響),調(diào)用fsync(或者fdatasync)我們稱為flush階段。Linux上的塊設(shè)備的操作可以分為兩類:

***類是使用C標(biāo)準(zhǔn)庫中的fopen/fread/fwrite 系列的函數(shù),我們可以稱其為 buffered I/O。

具體的I/O path如下:

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

library buffer是標(biāo)準(zhǔn)庫提供的用戶空間的buffer,可以通過setvbuf改變其大小。

第二類是使用Linux的系統(tǒng)調(diào)用的open/read/write 系列的函數(shù),我們可以稱其為 non-buffered I/O。

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

此外,我們可以通過設(shè)置open的O_DIRECT 標(biāo)志來實(shí)現(xiàn)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中,參數(shù)Innodb_flush_method(Linux)可以設(shè)定為:Fdatasync、O_DSYNC、O_DIRECT。我們看看這個(gè)三個(gè)參數(shù)是如何影響程序MySQL對(duì)日志和數(shù)據(jù)文件的操作:


Open log Flush log Open datafile Flush data
Fdatasync
fsync()
fsync()
O_DSYNC O_SYNC
 

 
fsync()
O_DIRECT
 
fsync() O_DIRECT Fsync()

 fdatasync被認(rèn)為是安全的,因?yàn)樵贛ySQL總會(huì)調(diào)用fsync來flush數(shù)據(jù)。使用O_DSYNC是有些風(fēng)險(xiǎn)的,有些OS會(huì)忽略該參數(shù)O_SYNC 。

我們看到O_DIRECT和fdatasync和很類似,但是它會(huì)使用O_DIRECT 來打開數(shù)據(jù)文件。有數(shù)據(jù)表明,如果是大量隨機(jī)寫入操作,O_DIRECT 會(huì)提升效率。但是順序?qū)懭牒妥x取效率都會(huì)降低。所以使用O_DIRECT需要謹(jǐn)慎。

mysql   innodb 對(duì)應(yīng)相關(guān)參數(shù):

innodb_flush_method有三個(gè)值,分別是fdatasync,O_DSYNC和O_DIRECT,其中fdatasync是默認(rèn)值。

它們控制了InnoDB刷新日志和數(shù)據(jù)的模式。

fdatasync:InnoDB使用fsync()函數(shù)去更新日志和數(shù)據(jù)文件。

O_DSYNC:InnoDB使用O_SYNC模式打開并更新日志文件,用fsync()函數(shù)去更新數(shù)據(jù)文件。

O_DIRECT:InnoDB使用O_DIRECT模式打開數(shù)據(jù)文件,用fsync()函數(shù)去更新日志和數(shù)據(jù)文件。

我們看到O_DIRECT和fdatasync和很類似,但是它會(huì)使用O_DIRECT 來打開數(shù)據(jù)文件。有數(shù)據(jù)表明,如果是大量隨機(jī)寫入操作,O_DIRECT 會(huì)提升效率。但是順序?qū)懭牒妥x取效率都會(huì)降低。所以使用O_DIRECT需要謹(jǐn)慎。

【編輯推薦】

  1. 新Linux內(nèi)核耗電量顯著增加
  2. 四招教你打造輕型Linux桌面環(huán)境
  3. Linux十大妙用:充當(dāng)Windows修復(fù)工具
  4. Ubuntu 11.04 Launcher中顯示Pidgin的未讀信息數(shù)
  5. Ubuntu 11.04將于4月28日發(fā)布 或進(jìn)軍手機(jī)及平板領(lǐng)域
責(zé)任編輯:馮宇 來源: Linux社區(qū)
相關(guān)推薦

2011-07-08 16:02:54

HBase

2023-04-03 10:25:00

數(shù)據(jù)庫性能調(diào)優(yōu)

2010-03-10 11:29:47

MySQL數(shù)據(jù)庫性能調(diào)

2010-05-04 17:08:24

Oracle數(shù)據(jù)庫

2019-08-13 08:32:14

MySQL數(shù)據(jù)庫性能調(diào)優(yōu)

2022-05-10 10:02:51

openGauss性能調(diào)優(yōu)數(shù)據(jù)庫

2010-04-07 13:32:39

Oracle調(diào)優(yōu)

2014-09-22 13:31:46

Linux

2011-04-18 13:46:24

數(shù)據(jù)庫設(shè)計(jì)

2011-08-15 18:09:46

查詢性能調(diào)優(yōu)索引優(yōu)化

2018-01-15 15:35:15

數(shù)據(jù)庫性能調(diào)優(yōu)案例

2017-07-21 08:55:13

TomcatJVM容器

2011-04-18 13:12:01

數(shù)據(jù)庫索引

2011-04-18 13:23:46

數(shù)據(jù)庫查詢

2011-04-18 13:36:32

數(shù)據(jù)庫游標(biāo)

2011-05-24 09:45:41

Oracle數(shù)據(jù)庫系統(tǒng)調(diào)優(yōu)

2013-03-20 17:18:07

Linux系統(tǒng)性能調(diào)優(yōu)

2019-07-08 14:05:53

數(shù)據(jù)庫JVMSQL

2010-11-30 11:26:49

2012-06-20 11:05:47

性能調(diào)優(yōu)攻略
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)