久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行Linux設備IO研究與數據庫性能調優

207次閱讀
沒有評論

共計 2573 個字符,預計需要花費 7 分鐘才能閱讀完成。

本篇文章給大家分享的是有關如何進行 Linux 設備 IO 研究與數據庫性能調優,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

如何在 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 dataFdatasync
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 研究與數據庫性能調優,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計2573字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 苏州市| 河津市| 陆河县| 南陵县| 九江县| 日土县| 安塞县| 丰县| 张家界市| 南丰县| 东乡族自治县| 安平县| 龙胜| 乌鲁木齐市| 德令哈市| 循化| 石楼县| 汽车| 梁平县| 澜沧| 囊谦县| 容城县| 车致| 宝鸡市| 亚东县| 高碑店市| 海安县| 临武县| 枣强县| 遵义县| 铜陵市| 贵港市| 玉屏| 日喀则市| 疏勒县| 婺源县| 厦门市| 易门县| 舟山市| 南木林县| 嘉祥县|