使用并發(fā) I/O 改進(jìn) DB2 數(shù)據(jù)庫(kù)性能
來(lái)源:塔塔 更新時(shí)間:2013-07-26
概述
并發(fā) I/O 和緩存 I/O 是兩個(gè)與文件系統(tǒng)相關(guān)聯(lián)的功能。出于此原因,大部分 DB2 DBA 認(rèn)為這兩種技術(shù)的使用取決于存儲(chǔ)和系統(tǒng)管理員的見(jiàn)識(shí)。然而,在 DB2 數(shù)據(jù)庫(kù)環(huán)境中利用此技術(shù)是 DBA 的職責(zé)。事實(shí)上,IBM 的 DB2 專家推薦在數(shù)據(jù)庫(kù)級(jí)別實(shí)現(xiàn)此技術(shù),因?yàn)檫@使 DB2 Database Manager 能夠控制,應(yīng)該使用 O_CIO 標(biāo)志打開(kāi)哪些文件和不應(yīng)該打開(kāi)哪些文件。
本文將介紹并發(fā)和緩存 I/O 的概念,重點(diǎn)介紹二者之間的重要區(qū)別。更重要的是,它將介紹如何在 DB2 數(shù)據(jù)庫(kù)環(huán)境中利用并發(fā) I/O 技術(shù)改善 CPU 和內(nèi)存利用率。
本文將介紹的主要主題如下:
-
緩存 I/O 以及它對(duì) DB2 的影響:緩存 I/O 在應(yīng)用程序向操作系統(tǒng)發(fā)出請(qǐng)求時(shí)如何工作,以及這對(duì) DB2 等關(guān)系型 DBMS 有何影響。
-
并發(fā) I/O (CIO) 以及它與 DB2 的關(guān)系:并發(fā) I/O 的工作原理、直接 I/O 與并發(fā) I/O 之間的區(qū)別、CIO 和原始設(shè)備之間的性能類似性,以及這些性能對(duì) DB2 有何益處。
-
如何實(shí)現(xiàn) CIO:與 DB2 相關(guān)的實(shí)現(xiàn)方面、該實(shí)現(xiàn)的簡(jiǎn)單性,以及使用它的適合時(shí)機(jī)。
-
使用 CIO(限制與局限):無(wú)法或不應(yīng)使用 CIO 的場(chǎng)景。
-
各種能從 CIO 獲益的應(yīng)用程序,以及真實(shí)世界中的使用示例。
什么是緩存 I/O?
當(dāng)應(yīng)用程序發(fā)出一個(gè)訪問(wèn)磁盤中的數(shù)據(jù)的請(qǐng)求時(shí),操作系統(tǒng)可通過(guò)兩種方式處理該請(qǐng)求:一種是直接從磁盤檢索該數(shù)據(jù),另一種是利用一個(gè)緩存區(qū)域,以便保留經(jīng)常訪問(wèn)的數(shù)據(jù)以供快速訪問(wèn)。對(duì)每個(gè)請(qǐng)求執(zhí)行物理 I/O 會(huì)影響性能,而在內(nèi)存中擁有一個(gè)緩存經(jīng)常訪問(wèn)的數(shù)據(jù)的緩沖區(qū)可改進(jìn)數(shù)據(jù)檢索過(guò)程。
文件緩沖區(qū)緩存的用途是通過(guò)將經(jīng)常訪問(wèn)的數(shù)據(jù)放在主要內(nèi)存中,最小化物理磁盤 I/O 的頻率。結(jié)果是,在緩存命中比率很高時(shí),文件緩沖區(qū)緩存的使用可非常有效地減少磁盤 I/O。這種數(shù)據(jù)檢索方法常常稱為緩存 I/O。當(dāng)應(yīng)用程序向操作系統(tǒng)發(fā)出一個(gè)讀取請(qǐng)求時(shí),操作系統(tǒng)首先在文件緩沖區(qū)緩存中查找需要的數(shù)據(jù)。如果在這里找到該數(shù)據(jù),就會(huì)從緩存獲取并寫(xiě)入應(yīng)用程序緩沖區(qū),無(wú)需進(jìn)入磁盤。然而,如果請(qǐng)求的數(shù)據(jù)未在文件系統(tǒng)緩存中,操作系統(tǒng)必須從磁盤獲取數(shù)據(jù),并將它存儲(chǔ)在文件系統(tǒng)緩存中,之后再將它傳輸?shù)綉?yīng)用程序緩沖區(qū)。
圖 1 顯示了將 I/O 緩存用于數(shù)據(jù)讀取操作的步驟。
-
應(yīng)用程序發(fā)出一個(gè)讀取請(qǐng)求。
-
操作系統(tǒng)在文件緩沖區(qū)中查找請(qǐng)求的數(shù)據(jù)。
-
請(qǐng)求的數(shù)據(jù)未在文件緩沖區(qū)緩存中。
-
操作系統(tǒng)從磁盤讀取數(shù)據(jù)。
-
讀取的數(shù)據(jù)緩存在文件緩沖區(qū)緩存中。
-
讀取的數(shù)據(jù)從文件緩沖區(qū)緩存復(fù)制到應(yīng)用程序緩存。
圖 1. 如何將 I/O 緩存用于數(shù)據(jù)讀取操作
緩存 I/O 的另一個(gè)優(yōu)勢(shì)是,操作系統(tǒng)可利用異步文件寫(xiě)入。換句話說(shuō),應(yīng)用程序不需要等待一個(gè)寫(xiě)入操作完成,即可繼續(xù)執(zhí)行。與讀取一樣,緩存 I/O 嘗試將要寫(xiě)入的數(shù)據(jù)緩存在文件系統(tǒng)緩沖區(qū)中,以改進(jìn)未來(lái)的數(shù)據(jù)讀取和最大程度地減少向磁盤寫(xiě)入的操作。因此,對(duì)于讀取和寫(xiě)入請(qǐng)求,緩存 I/O 支持先讀取,后寫(xiě)入,這在緩存命中率很高時(shí)有助于改善性能。
圖 2 顯示了將 I/O 緩存用于數(shù)據(jù)寫(xiě)入操作的以下步驟。
-
應(yīng)用程序發(fā)出一個(gè)寫(xiě)入請(qǐng)求。
-
操作系統(tǒng)將數(shù)據(jù)從應(yīng)用程序緩沖區(qū)復(fù)制到文件緩沖區(qū)緩存。
-
應(yīng)用程序繼續(xù)執(zhí)行,無(wú)需等待磁盤寫(xiě)入。
-
同步守護(hù)進(jìn)程發(fā)起對(duì)臟文件緩沖區(qū)緩存頁(yè)面的定期刷新。
-
將臟頁(yè)面寫(xiě)入磁盤。
圖 2. I/O 緩存如何用于數(shù)據(jù)寫(xiě)入操作
盡管數(shù)據(jù)緩存很適合大部分應(yīng)用程序,但它是冗余的,對(duì)大部分 DB2 數(shù)據(jù)庫(kù)部署常常沒(méi)有必要。這是因?yàn)?DB2 擁有自己的緩存區(qū)域(表現(xiàn)為一個(gè)或多個(gè)緩沖池的形式),并且對(duì)于它的大部分操作,DB2 使用此緩存區(qū)域來(lái)存儲(chǔ)被訪問(wèn)的數(shù)據(jù)。所以除了 DB2 緩沖池,文件系統(tǒng)緩存的使用實(shí)際增加了 CPU 和內(nèi)存開(kāi)銷。系統(tǒng)內(nèi)存的很大一部分常常被用于文件緩沖區(qū)緩存,將數(shù)據(jù)復(fù)制到文件系統(tǒng)緩存和從文件系統(tǒng)緩存復(fù)制到緩沖池會(huì)消耗更多的 CPU 資源。
對(duì)于具有緩存 I/O 的寫(xiě)入請(qǐng)求,操作系統(tǒng)會(huì)使用所謂的 Inode 鎖定機(jī)制來(lái)執(zhí)行寫(xiě)入序列化,以始終保持?jǐn)?shù)據(jù)的完整性。結(jié)果是,當(dāng)將緩存 I/O 用于 DB2 時(shí),會(huì)引入另一種形式的開(kāi)銷,因?yàn)?DB2 依靠它自己的鎖定機(jī)制來(lái)維護(hù)數(shù)據(jù)一致性和完整性。
什么是并發(fā) I/O?
AIX 平臺(tái)上的 JFS2 文件系統(tǒng)中引入的兩項(xiàng)功能:直接 I/O (DIO) 和并發(fā) I/O (CIO)。x86、x64 和 POWER 架構(gòu)上的 Linux 發(fā)行版 SLES 9 及更高版本和 RHEL 4 及更高版本同時(shí)提供了對(duì) DIO 和 CIO 的支持。直接 I/O 通過(guò)直接將數(shù)據(jù)從磁盤復(fù)制到合適的應(yīng)用程序緩沖區(qū),消除了與緩存 I/O 關(guān)聯(lián)的雙重緩沖。但是,直接 I/O 執(zhí)行了寫(xiě)入序列化和 Inode 鎖定來(lái)維護(hù)數(shù)據(jù)完整性。
另一方面,并發(fā) I/O 提供了對(duì)數(shù)據(jù)的直接訪問(wèn)能力,無(wú)需這種額外的緩沖和鎖定。這進(jìn)而允許文件系統(tǒng)提供通常與原始設(shè)備關(guān)聯(lián)的優(yōu)勢(shì)和性能益處。順便說(shuō)一下,通過(guò)消除緩沖和鎖定獲得性能提升,這是為什么這些設(shè)備難以管理,卻常常用在文件系統(tǒng)上作為數(shù)據(jù)存儲(chǔ)的首選原始設(shè)備的主要原因之一。隨著并發(fā) I/O 的引入,文件系統(tǒng)有可能會(huì)在原始設(shè)備中實(shí)現(xiàn)更快的性能和更加簡(jiǎn)便的管理。
正如前面所提及的,Inode 鎖支持在文件級(jí)別執(zhí)行寫(xiě)入序列化,以在使用緩存 I/O 和直接 I/O 的情況下維護(hù)數(shù)據(jù)的一致性。并發(fā) I/O 繞過(guò)了這種 Inode 鎖,允許多個(gè)線程同時(shí)對(duì)同一個(gè)文件執(zhí)行讀取和寫(xiě)入操作。
圖 3 顯示了使用并發(fā) I/O 工作原理,步驟如下。
-
應(yīng)用程序發(fā)出數(shù)據(jù)請(qǐng)求。
-
操作系統(tǒng)發(fā)起磁盤讀取操作。
-
將請(qǐng)求的數(shù)從磁盤據(jù)傳輸?shù)綉?yīng)用程序緩存。
圖 3. 并發(fā) I/O 的工作原理
對(duì)于沒(méi)有執(zhí)行數(shù)據(jù)一致性和數(shù)據(jù)完整性的應(yīng)用程序,并發(fā) I/O 的使用可能導(dǎo)致數(shù)據(jù)損壞,因此應(yīng)該避免。大部分關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)都使用了它們自己的應(yīng)用程序緩存,并整合了復(fù)雜的鎖定機(jī)制來(lái)管理數(shù)據(jù)訪問(wèn)和一致性。因此,對(duì)數(shù)據(jù)庫(kù)應(yīng)用程序使用并發(fā) I/O 技術(shù)常常會(huì)改善性能,而不會(huì)帶來(lái)數(shù)據(jù)損壞風(fēng)險(xiǎn)。而且在 DB2 數(shù)據(jù)庫(kù)用例中,CIO 的實(shí)現(xiàn)允許 DB2 在進(jìn)行內(nèi)存與磁盤之間的數(shù)據(jù)移動(dòng)時(shí)避開(kāi)與讀取/寫(xiě)入操作關(guān)聯(lián)的 CPU 和內(nèi)存額外開(kāi)銷。
如何為 DB2 實(shí)現(xiàn) CIO 的最佳實(shí)踐
通過(guò)使用指定的 -o cio 選項(xiàng)來(lái)裝載文件系統(tǒng),可以在磁盤級(jí)別上實(shí)現(xiàn) CIO,也可通過(guò)使用 O-CIO 作為 Oflag 參數(shù)發(fā)出 open() 調(diào)用的方法在應(yīng)用程序級(jí)別上實(shí)現(xiàn) CIO。
借助 DB2,也可以通過(guò) CREATE TABLESPACE 和 ALTER TABLESPACE SQL 語(yǔ)句的 NO FILESYSTEM CACHING 選項(xiàng)在數(shù)據(jù)庫(kù)級(jí)別上實(shí)現(xiàn) CIO 。當(dāng)使用這些選項(xiàng)時(shí),DB2 Database Manager 為識(shí)別的表空間發(fā)出適當(dāng)?shù)?O-CIO 調(diào)用。
在 DB2 9.1 中引入此選項(xiàng)之前,啟用 CIO 的惟一方式是使用 CIO 選項(xiàng)裝載文件系統(tǒng)。而且當(dāng)以這種方式在基本文件系統(tǒng)級(jí)別上實(shí)現(xiàn) CIO 時(shí),該文件系統(tǒng)上的每個(gè)文件將得使用 CIO 打開(kāi)。
但是,使用 CREATE TABLESPACE 和 ALTER TABLESPACE 語(yǔ)句的 NO FILESYSTEM CACHING 選項(xiàng)允許 DB2 Database Manager 確定哪些文件要使用 CIO 打開(kāi)。這很重要,因?yàn)橐恍?DB2 文件可能會(huì)從文件系統(tǒng)緩存中獲益,但在某些情形下,在全文件系統(tǒng)范圍實(shí)現(xiàn) CIO 可能不利。
要?jiǎng)?chuàng)建啟用了 CIO 的表空間,您需要執(zhí)行一個(gè)類似于清單 1 中所示的 CREATE TABLESPACE 語(yǔ)句。
清單 1. 創(chuàng)建啟用了 CIO 的表空間
CREATE TABLESPACE mytspace
MANAGED BY DATABASE PAGESIZE 4K
USING (FILE ‘….’)
EXTENTSIZE 16K
PREFETCH SIZE AUTOMATIC
BUFFERPOOL MYBP
NO FILESYSTEM CACHING;
要更改現(xiàn)有表空間以使用 CIO,可執(zhí)行類似于清單 2 中所示的 ALTER TABLESPACE 命令
清單 2. 修改表空間以啟用 CIO
ALTER TABLESPACE mytspace
NO FILESYSTEM CACHING;
如果使用 ALTER TABLESPACE 語(yǔ)句,更改將在數(shù)據(jù)庫(kù)失效并重新激活之后才生效。
對(duì)于 DB2 v9.1,新表空間的默認(rèn)設(shè)置為 FILE SYSTEM CACHING。對(duì)于 DB2 v9.5,默認(rèn)在 AIX 上的 JFS、Linux System z,Solaris 上的所有非 VxFS 文件系統(tǒng)、HP-UX、所有平臺(tái)上的 SMS 臨時(shí)表空間文件,以及所有 LOB 與大數(shù)據(jù)中使用 FILESYSTEM CACHING。對(duì)于所有其他平臺(tái)和表空間,默認(rèn)使用 NO FILE SYSTEM CACHING。對(duì)于 DB2 9.7,新表空間默認(rèn)使用 NO FILE SYSTEM CACHING 子句。已遷移到 V9.5 或 V9.7 的數(shù)據(jù)庫(kù)仍然采用舊的默認(rèn)設(shè)置。所以在 DB2 環(huán)境中,驗(yàn)證和實(shí)現(xiàn) CIO 技術(shù)確實(shí)是 DBA 的職責(zé)。
使用 CIO(限制與局限)
在一些情形下,DB2 可從文件系統(tǒng)緩存的使用中獲益,特別是在要頻繁查詢包含未以內(nèi)聯(lián)方式存儲(chǔ)的 LOB 數(shù)據(jù)表的情形中。因?yàn)檫@些 LOB 數(shù)據(jù)從不會(huì)寫(xiě)入 DB2 緩沖池,所以如果允許文件系統(tǒng)緩存 LOB 數(shù)據(jù)讀取和寫(xiě)入操作,性能會(huì)更好。相反,對(duì)于內(nèi)聯(lián) LOB(與其他表數(shù)據(jù)存儲(chǔ)在一起的 LOB),應(yīng)用并發(fā) I/O 將有助于減少雙重緩存的開(kāi)銷;因?yàn)閮?nèi)聯(lián) LOB 的數(shù)據(jù)寫(xiě)入到了 DB2 緩沖池中,所以不需要文件系統(tǒng)緩存。
使用 SMS 存儲(chǔ)的臨時(shí)表空間(目錄容器)也需要文件系統(tǒng)緩存。但對(duì)于所有其他表空間,推薦使用并發(fā) I/O。
并發(fā) I/O 的好處:一個(gè)真實(shí)示例
因?yàn)?CIO 消除了雙重緩沖和不必要的文件鎖定,所以具有 I/O 限制和 CPU 限制的應(yīng)用程序都會(huì)從 CIO 的使用中獲益。而且在 DB2 環(huán)境中實(shí)現(xiàn) CIO 可釋放 DB2 服務(wù)器上的內(nèi)存和 CPU 資源(可用于其他應(yīng)用程序的資源)。
例如,一位 DB2 客戶在從較大型的服務(wù)器遷移到 CPU 數(shù)量有限的較小型 LPAR 時(shí),遇到了嚴(yán)重的應(yīng)用程序性能問(wèn)題。應(yīng)用程序在某種程度上變得非常緩慢,以至于無(wú)法處理任何事務(wù)。在大多數(shù)時(shí)間,CPU 利用率都高于 90%,這還影響了位于服務(wù)器上的其他應(yīng)用程序。對(duì)正運(yùn)行查詢的 Explain 數(shù)據(jù)進(jìn)行分析,結(jié)果顯示,在遷移前后,源和目標(biāo)之間沒(méi)有任何重要區(qū)別,而且沒(méi)有對(duì)應(yīng)用程序代碼或正在訪問(wèn)的數(shù)據(jù)卷執(zhí)行任何其他更改。
起初,客戶決定向 LPAR 添加更多 CPU,因?yàn)檫@似乎是源和目標(biāo)之間惟一存在的區(qū)別。但是,在分析了問(wèn)題的實(shí)際來(lái)源之后,發(fā)現(xiàn)數(shù)據(jù)庫(kù)的所有數(shù)據(jù)表空間都未啟用 CIO。換句話說(shuō),每個(gè)表空間都是在啟用 FILESYSTEM CACHING 的情況下創(chuàng)建的。所以是使用以前提供的 ALTER TABLESPACE 命令向所有的數(shù)據(jù)表空間實(shí)現(xiàn) CIO。
結(jié)果立竿見(jiàn)影。應(yīng)用程序的性能得到了顯著改善,事務(wù)處理速率比源服務(wù)器更快。服務(wù)器上的 CPU 利用率降到了 30%,在服務(wù)器上運(yùn)行的其他應(yīng)用程序能夠恢復(fù)它們的正常功能。下表總結(jié)了之前之后的場(chǎng)景。
表 1. 在啟用 CIO 之前和之后的客戶 DB2 環(huán)境
深圳塔塔咨詢服務(wù)有限公司(簡(jiǎn)稱塔塔IT)專注于IT前沿技術(shù)的傳播與應(yīng)用。公司與微軟、Cisco、Oracle、IBM、Vmware、Citrix、EMC、HP、SAP等全球著名IT廠商建立長(zhǎng)期合作伙伴關(guān)系,提供思科CCNA\CCNP\CCIE培訓(xùn),微軟MCSE\MCITP培訓(xùn),Office培訓(xùn),Oracle培訓(xùn),JAVA培訓(xùn),ITIL培訓(xùn),PMP培訓(xùn)、CompTIA培訓(xùn)等多種IT認(rèn)證培訓(xùn)以及IT服務(wù)、企業(yè)內(nèi)訓(xùn)業(yè)務(wù),是一家以IT高端培訓(xùn)、咨詢服務(wù)、技術(shù)支持以及國(guó)際IT認(rèn)證考試為核心業(yè)務(wù)的專業(yè)服務(wù)商。聯(lián)系方式:深圳0755-29152000