并發 I/O 是 UNIX 和 Linux 平臺中引入的一項功能,主要用在關系數據庫系統中。本文將介紹 UNIX/Linux 文件系統中可使用的 I/O 機制之間的區別,以及如何在 IBM DB2 環境中利用并發 I/O 技術來改進數據庫性能。
并發 i/o 和緩存 i/o 是兩個與文件系統相關聯的功能。出于此原因,大部分 db2 dba 認為這兩種技術的使用取決于存儲和系統管理員的見識。然而,在 db2 環境中利用此技術是 dba 的職責。事實上,ibm 的 db2 專家推薦在級別實現此技術,因為這使 db2 database manager 能夠控制,應該使用 o_cio 標志打開哪些文件和不應該打開哪些文件。
本文將介紹并發和緩存 I/O 的概念,重點介紹二者之間的重要區別。更重要的是,它將介紹如何在 DB2 數據庫環境中利用并發 I/O 技術改善 CPU 和內存利用率。
本文將介紹的主要主題如下:
- 緩存 I/O 以及它對 DB2 的影響:緩存 I/O 在應用程序向操作系統發出請求時如何工作,以及這對 DB2 等關系型 DBMS 有何影響。
- 并發 I/O (CIO) 以及它與 DB2 的關系:并發 I/O 的工作原理、直接 I/O 與并發 I/O 之間的區別、CIO 和原始設備之間的性能類似性,以及這些性能對 DB2 有何益處。
- 如何實現 CIO:與 DB2 相關的實現方面、該實現的簡單性,以及使用它的適合時機。
- 使用 CIO(限制與局限):無法或不應使用 CIO 的場景。
- 各種能從 CIO 獲益的應用程序,以及真實世界中的使用示例。
什么是緩存 I/O?
當應用程序發出一個訪問磁盤中的數據的請求時,操作系統可通過兩種方式處理該請求:一種是直接從磁盤檢索該數據,另一種是利用一個緩存區域,以便保留經常訪問的數據以供快速訪問。對每個請求執行物理 I/O 會影響性能,而在內存中擁有一個緩存經常訪問的數據的緩沖區可改進數據檢索過程。
文件緩沖區緩存的用途是通過將經常訪問的數據放在主要內存中,最小化物理磁盤 I/O 的頻率。結果是,在緩存命中比率很高時,文件緩沖區緩存的使用可非常有效地減少磁盤 I/O。這種數據檢索方法常常稱為緩存 I/O。當應用程序向操作系統發出一個讀取請求時,操作系統首先在文件緩沖區緩存中查找需要的數據。如果在這里找到該數據,就會從緩存獲取并寫入應用程序緩沖區,無需進入磁盤。然而,如果請求的數據未在文件系統緩存中,操作系統必須從磁盤獲取數據,并將它存儲在文件系統緩存中,之后再將它傳輸到應用程序緩沖區。
圖 1 顯示了將 I/O 緩存用于數據讀取操作的步驟。
- 應用程序發出一個讀取請求。
- 操作系統在文件緩沖區中查找請求的數據。
- 請求的數據未在文件緩沖區緩存中。
- 操作系統從磁盤讀取數據。
- 讀取的數據緩存在文件緩沖區緩存中。
- 讀取的數據從文件緩沖區緩存復制到應用程序緩存。
圖 1. 如何將 I/O 緩存用于數據讀取操作
緩存 I/O 的另一個優勢是,操作系統可利用異步文件寫入。換句話說,應用程序不需要等待一個寫入操作完成,即可繼續執行。與讀取一樣,緩存 I/O 嘗試將要寫入的數據緩存在文件系統緩沖區中,以改進未來的數據讀取和最大程度地減少向磁盤寫入的操作。因此,對于讀取和寫入請求,緩存 I/O 支持先讀取,后寫入,這在緩存命中率很高時有助于改善性能。
圖 2 顯示了將 I/O 緩存用于數據寫入操作的以下步驟。
- 應用程序發出一個寫入請求。
- 操作系統將數據從應用程序緩沖區復制到文件緩沖區緩存。
- 應用程序繼續執行,無需等待磁盤寫入。
- 同步守護進程發起對臟文件緩沖區緩存頁面的定期刷新。
- 將臟頁面寫入磁盤。
圖 2. I/O 緩存如何用于數據寫入操作
盡管數據緩存很適合大部分應用程序,但它是冗余的,對大部分 DB2 數據庫部署常常沒有必要。這是因為 DB2 擁有自己的緩存區域(表現為一個或多個緩沖池的形式),并且對于它的大部分操作,DB2 使用此緩存區域來存儲被訪問的數據。所以除了 DB2 緩沖池,文件系統緩存的使用實際增加了 CPU 和內存開銷。系統內存的很大一部分常常被用于文件緩沖區緩存,將數據復制到文件系統緩存和從文件系統緩存復制到緩沖池會消耗更多的 CPU 資源。
對于具有緩存 I/O 的寫入請求,操作系統會使用所謂的 Inode 鎖定機制來執行寫入序列化,以始終保持數據的完整性。結果是,當將緩存 I/O 用于 DB2 時,會引入另一種形式的開銷,因為 DB2 依靠它自己的鎖定機制來維護數據一致性和完整性。