簡(jiǎn)介: 隨著存儲(chǔ)的網(wǎng)絡(luò)化和高度虛擬化,對(duì)于 DBA 或系統(tǒng)架構(gòu)師來(lái)說(shuō),數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)似乎是一項(xiàng)極其復(fù)雜的任務(wù)。本文介紹通過(guò)一些易于學(xué)習(xí)的數(shù)據(jù)庫(kù)存儲(chǔ)最佳實(shí)踐獲得健全數(shù)據(jù)庫(kù)服務(wù)器的秘訣,包括以下方面的 一些指南和建議。 發(fā)布日期: 2010 年 6 月 21 日
隨著存儲(chǔ)的網(wǎng)絡(luò)化和高度虛擬化,對(duì)于 DBA 或系統(tǒng)架構(gòu)師來(lái)說(shuō),數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)似乎是一項(xiàng)極其復(fù)雜的任務(wù)。 糟糕的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)對(duì)數(shù)據(jù)庫(kù)服務(wù)器有極大的負(fù)面影響。由于 CPU 比物理磁盤(pán)快得多,所以常常可以發(fā)現(xiàn)性能糟糕的數(shù)據(jù)庫(kù)服務(wù)器,它們面臨非常密集的 I/O ,表現(xiàn)出來(lái)的性能離它們的真正潛能差好多倍。 好消息是,保證數(shù)據(jù)庫(kù)存儲(chǔ)的設(shè)計(jì)不犯錯(cuò)誤,比獲得完美的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)更重要。在如今虛擬化存儲(chǔ)的環(huán)境中,試圖理解數(shù)據(jù)存儲(chǔ)棧的內(nèi)部結(jié)構(gòu),并 手動(dòng)調(diào)優(yōu)數(shù)據(jù)庫(kù)表和索引在物理磁盤(pán)上的存儲(chǔ)位置,這些事情通常既不容易完成,也不易于維護(hù)(對(duì)于一般的 DBA 而言)。 簡(jiǎn)單性是良好數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)的關(guān)鍵。首先,要確保有足夠的物理磁盤(pán),以避免系統(tǒng)成為 I/O 密集型系統(tǒng)。 本文介紹通過(guò)一些易于學(xué)習(xí)的數(shù)據(jù)庫(kù)存儲(chǔ)最佳實(shí)踐獲得健全數(shù)據(jù)庫(kù)服務(wù)器的秘訣,包括以下方面的一些指南和建議:
注意:本文所述最佳實(shí)踐用于在常規(guī) OLTP 環(huán)境中部署 DB2 for Linux, UNIX and Windows 。文中討論的建議不一定適用于數(shù)據(jù)倉(cāng)庫(kù)環(huán)境,也不一定適用于將 DB2 數(shù)據(jù)庫(kù)用作第三方軟件底層數(shù)據(jù)庫(kù)的環(huán)境。 數(shù)據(jù)庫(kù)存儲(chǔ)簡(jiǎn)介 存儲(chǔ)區(qū)域網(wǎng)(Storage Area Networks ,SAN )和網(wǎng)絡(luò)連接存儲(chǔ)(Network Attached Storage ,NAS )從根本上改變了數(shù)據(jù)庫(kù)存儲(chǔ)世界。大約十年前,“磁盤(pán)”一詞指的是具有磁頭和碟片的物理磁盤(pán)。在如今的存儲(chǔ)世界,“磁盤(pán)”是一個(gè)完全虛擬的實(shí)體,它位于存 儲(chǔ)網(wǎng)絡(luò)上,可以是單獨(dú)的物理磁盤(pán)、物理磁盤(pán)的一部分、RAID 陣列或者 RAID 陣列的某種組合。 最近在文件系統(tǒng)方面取得的進(jìn)步,例如直接和并發(fā) I/O ,讓原始設(shè)備較之于文件系統(tǒng)的所有性能優(yōu)勢(shì)幾乎消失殆盡。 雖然摩爾定律對(duì) CPU 處理能力有效,但是并不適用于存儲(chǔ)子系統(tǒng)的速度。盡管 SAN 和 NAS 使存儲(chǔ)通信發(fā)生了變化,但是決定如何存儲(chǔ)比特的底層結(jié)構(gòu)基本不變 — 機(jī)械主軸轉(zhuǎn)動(dòng)多個(gè)磁性材料的碟片,這些碟片上面是對(duì)信息編碼后得到的比特。 雖然主軸速度有所提高,使用 DRAM 和 NVRAM 的存儲(chǔ)控制器上的數(shù)據(jù)緩存亦有所幫助,但是這些進(jìn)步都無(wú)法趕上過(guò)去十年來(lái)處理能力的急劇提升。因此,相對(duì)于 CPU 的處理速度,磁盤(pán)要慢得多。這種速度上的差異使得每個(gè) CPU 核必須配備越來(lái)越多的物理磁盤(pán),以確保系統(tǒng)不成為 I/O 密集型系統(tǒng)。雖然決定每個(gè)物理磁盤(pán)實(shí)際容量的碟片容量有了很大的提高,但是仍然難以達(dá)到適當(dāng)?shù)奈锢泶疟P(pán)數(shù)與 CPU 核的比例。 隨著存儲(chǔ)、文件系統(tǒng)和 CPU 處理速度的變化,數(shù)據(jù)庫(kù)存儲(chǔ)自動(dòng)配置和管理的最佳實(shí)踐也在演變。在過(guò)去,可能會(huì)建議 DBA 將表和索引放到確切的物理磁盤(pán)上,甚至是每個(gè)物理磁盤(pán)的哪一部分上。但是在如今的虛擬化存儲(chǔ)世界,對(duì)于一般 DBA 而言,過(guò)去的最佳實(shí)踐顯得不切實(shí)際。 本文提供的最佳實(shí)踐則是圍繞如今現(xiàn)實(shí)的存儲(chǔ)環(huán)境而開(kāi)發(fā)的。 請(qǐng)參閱“DB2 最佳實(shí)踐: 物理數(shù)據(jù)庫(kù)設(shè)計(jì)最佳實(shí)踐”白皮書(shū),獲得關(guān)于數(shù)據(jù)庫(kù)性能和數(shù)據(jù)庫(kù)操作速度的相關(guān)信息。該白皮書(shū)和其他相關(guān)資料可從 DB2 最佳實(shí)踐專題 獲得。 良好數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)的目標(biāo) 良好的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)必須有以下重要特征:
簡(jiǎn)單的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì) “使一切盡量簡(jiǎn)單,但是不過(guò)于簡(jiǎn)單” 在設(shè)計(jì)數(shù)據(jù)庫(kù)存儲(chǔ)時(shí),需要做出很多的選擇,簡(jiǎn)單化是系統(tǒng)架構(gòu)師和 DBA 的秘密武器。本文提供的最佳實(shí)踐提出了一些簡(jiǎn)單的經(jīng)驗(yàn)法則,它們將有助于實(shí)現(xiàn)良好數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)的所有目標(biāo)。 這種簡(jiǎn)單化有時(shí)候要付出代價(jià),即不能為特定的表或表空間選擇最優(yōu)的 I/O 特征。具有豐富存儲(chǔ)技能的有經(jīng)驗(yàn)的 DBA ,以及時(shí)間充裕的存儲(chǔ)管理員,往往會(huì)從物理磁盤(pán)中為特別重要的表或索引開(kāi)辟一片存儲(chǔ)。這種方法存在的問(wèn)題是,這樣做也許在設(shè)計(jì)時(shí)能取得最佳性能,但是為了 維護(hù)最初的設(shè)計(jì)目標(biāo),最后往往會(huì)得到一個(gè)更難以管理的系統(tǒng)。問(wèn)題診斷幾乎總是很困難——最初認(rèn)為足夠用于特別重要的表或索引的存儲(chǔ)帶寬,隨著時(shí)間的推移和 應(yīng)用程序的增長(zhǎng)變得不夠起來(lái)。 良好數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì)的要點(diǎn)在于,在動(dòng)態(tài)的系統(tǒng)上,所有目標(biāo)在最初的系統(tǒng)設(shè)計(jì)時(shí)能夠得到滿足,且在數(shù)據(jù)庫(kù)投入使用時(shí)仍然如此。本文描述的簡(jiǎn)單的 最佳實(shí)踐可以實(shí)現(xiàn)這些目標(biāo),且?guī)缀醪粫?huì)犧牲任何性能。 考慮實(shí)際的物理磁盤(pán),而不僅僅是存儲(chǔ)空間 物理磁盤(pán)與存儲(chǔ)控制器相連,DB2 數(shù)據(jù)庫(kù)服務(wù)器等主機(jī)系統(tǒng)不能直接訪問(wèn)它們,DBA 也不能直接看到它們。存儲(chǔ)管理員以邏輯單元數(shù) 1 (logical unit numbers ,LUN )的形式提供存儲(chǔ)單元,而主機(jī)系統(tǒng)看到的則是真正的 SCSI 磁盤(pán)。但是,LUN 是由存儲(chǔ)管理員提供的完全虛擬的實(shí)體,可映射物理磁盤(pán)的任何組合。一個(gè) LUN 可以是單一 RAID 陣列、RAID 陣列的一部分、一個(gè)物理磁盤(pán)、磁盤(pán)的一部分或者多個(gè) RAID 陣列的“元設(shè)備(meta )”。 雖然存儲(chǔ)世界變得更加虛擬化,但事實(shí)上數(shù)據(jù)仍然存儲(chǔ)在機(jī)械磁盤(pán)驅(qū)動(dòng)器上。無(wú)論使用哪家供應(yīng)商的存儲(chǔ)子系統(tǒng),最終數(shù)據(jù)仍存儲(chǔ)在機(jī)械磁盤(pán)驅(qū)動(dòng)器 上,也就是旋轉(zhuǎn)的物理磁盤(pán)碟片上。LUN 可提供的存儲(chǔ)帶寬與組成它的實(shí)際物理磁盤(pán)的數(shù)量成正比。 雖然存儲(chǔ)控制器緩存可幫助提高存儲(chǔ)帶寬,但 DB2 數(shù)據(jù)庫(kù)系統(tǒng)已經(jīng)將相關(guān)數(shù)據(jù)緩存到它們的緩沖池中。這限制了存儲(chǔ)控制器充分減少實(shí)際物理磁盤(pán)需求,以支持 DB2 數(shù)據(jù)庫(kù)服務(wù)器等 I/O 密集型系統(tǒng)的能力。在通常為 I/O 密集型的企業(yè)數(shù)據(jù)庫(kù)系統(tǒng)中,最終結(jié)果是完全找不到實(shí)際物理磁盤(pán)的替代品。 除了傳統(tǒng)的 SAN 存儲(chǔ)控制器外,附加的存儲(chǔ)虛擬化層也正在被添加到企業(yè)中,它們進(jìn)一步為 DBA 抽象物理磁盤(pán)。這種虛擬化的例子有 San Volume Controller (SVC) 和 AIX? VIOS 。這些形式的虛擬化可提供稱心的功能增強(qiáng),例如透明地從一組 LUN 向另一組 LUN 遷移的能力,或者多個(gè)主機(jī) LPAR 共享一條光纖通道 Host Bus Adapter (HBA) 的能力。但是,這樣做需要付出一定的代價(jià),通常包括 I/O 路徑中出現(xiàn)更多的子系統(tǒng)。此外,對(duì)于 I/O 密集型系統(tǒng),它們并不能減少對(duì)實(shí)際物理磁盤(pán)的需求。 處理高度虛擬化的存儲(chǔ) 如本文簡(jiǎn)介部分所述,磁盤(pán)存儲(chǔ)越來(lái)越多地被當(dāng)做一種普通用品,可用存儲(chǔ)空間常常被從其所在物理設(shè)備中抽象出來(lái)。 如果您的企業(yè)的 I/O 基礎(chǔ)結(jié)構(gòu)要求使用這樣的存儲(chǔ)系統(tǒng),那么 DBA 需要繼續(xù)確保所提供的虛擬 LUN 真正由專用的物理磁盤(pán)組成。原因是:如果實(shí)際磁盤(pán)太少,跟不上 CPU 的速度,那么企業(yè)系統(tǒng)很快會(huì)變成 I/O 密集型系統(tǒng)。不幸的是,雖然我們這些關(guān)心數(shù)據(jù)庫(kù)性能的人是以實(shí)際磁盤(pán)數(shù)量來(lái)衡量存儲(chǔ)需求的,但存儲(chǔ)管理員卻不同,他們只按空間的概念來(lái)考慮存儲(chǔ)需求。雖然 過(guò)去十來(lái)年碟片大小有了長(zhǎng)足的進(jìn)步,但若要增加每個(gè) CPU 核的物理磁盤(pán)數(shù)而不僅僅是空間,只會(huì)變得越來(lái)越難。 更糟糕的是,數(shù)據(jù)庫(kù)管理員知道需要多少物理磁盤(pán)來(lái)確保良好性能,卻不得不為擁有太多空間而辯護(hù)。例如,假設(shè)有一個(gè) CPU 核和 20 個(gè)物理磁盤(pán)。這樣的磁盤(pán) -CPU 比例應(yīng)該可以產(chǎn)生足夠的 I/O 并行性來(lái)提供很好的性能。如果每個(gè)磁盤(pán)設(shè)備可以存儲(chǔ) 150 GB ,那么每個(gè) CPU 核有大約 3 TB 的空間。如果有多個(gè) CPU 核,每個(gè)核按 1:20 的比例配備物理磁盤(pán),那么存儲(chǔ)的總量將以驚人的速度增長(zhǎng)。 雖然有這么多“空閑”的空間,但重要的是這樣的存儲(chǔ)并不會(huì)過(guò)量。例如,您可能想將一些未使用的存儲(chǔ)分配給其他應(yīng)用程序或進(jìn)程。但是要記住,相 互競(jìng)爭(zhēng)的應(yīng)用程序或進(jìn)程發(fā)出太多的每秒 I/O 操作(I/O-operations-per-second ,IOPS )可能導(dǎo)致所有應(yīng)用程序的性能下降。這意味著存儲(chǔ)管理員應(yīng)該抵制誘惑,不要將未使用的空間作為單獨(dú)的 LUN 分配給 DBA 無(wú)權(quán)控制的其他應(yīng)用程序。 現(xiàn)在,可以在將數(shù)據(jù)庫(kù)備份到長(zhǎng)期存儲(chǔ)之前,將未使用的空間用作數(shù)據(jù)庫(kù)在線備份或歸檔日志的 staging 區(qū)域。這是非常合理的用法,因?yàn)楫?dāng)執(zhí)行備份時(shí),一切都在您的控制之下。換句話說(shuō),當(dāng)使用這些設(shè)備時(shí),完全由您(而不是其他未知的用戶或應(yīng)用程序)控制。您 可以在不需要峰值 I/O 吞吐量的時(shí)候執(zhí)行在線備份。 如果使用這樣的策略來(lái)最大化空間使用率,那么要記住,為數(shù)據(jù)和備份使用相同的磁盤(pán)將不可避免地帶來(lái)一定的風(fēng)險(xiǎn)。應(yīng)該適時(shí)地將備份歸檔到外部備 份目標(biāo),例如 Tivoli? Storage Manager (TSM) 。 由于 CPU 速度有望繼續(xù)增長(zhǎng)(增長(zhǎng)方式是通過(guò)增加 CPU 核提高處理并行性,而不是增加時(shí)鐘頻率),預(yù)期的趨勢(shì)是,為確保數(shù)據(jù)庫(kù)服務(wù)器不成為 I/O 密集型系統(tǒng),每個(gè)系統(tǒng)將需要越來(lái)越多的物理磁盤(pán)。因此,DBA 應(yīng)通過(guò)良好的模式設(shè)計(jì),并利用 DB2 數(shù)據(jù)庫(kù)系統(tǒng)中的高級(jí)功能,例如 MDC 、MQT 和壓縮,盡可能消除 I/O 操作,這一點(diǎn)比以往更重要。 相對(duì)于碟片速度,CPU 處理速度有了更快的增長(zhǎng),因此好的經(jīng)驗(yàn)法則是確保每個(gè) CPU 核有 15 到 20 個(gè)專用物理磁盤(pán)。通過(guò)使用多維集群(Multidimensional Clustering ,MDC )等 I/O 技術(shù),以及良好的模式管理和設(shè)計(jì),這個(gè)數(shù)字有可能減少。 值得注意的是,在撰寫(xiě)本文之際,此處所說(shuō)的物理磁盤(pán)數(shù)量只針對(duì)企業(yè)中的普通處理器和磁盤(pán)技術(shù)。這包括 IBM POWER5 ?、Intel? Xeon? 和 AMD? Opteron ? 處理器。普通的主軸速度是 15000 rpm 。當(dāng)下一代處理器普及時(shí),對(duì)于 I/O 密集型數(shù)據(jù)庫(kù)服務(wù)器,每個(gè)處理器將需要大量的物理磁盤(pán)。 為每個(gè)非 DPF DB2 數(shù)據(jù)庫(kù)服務(wù)器 / 每個(gè) DPF 分區(qū)使用專用 LUN 和文件系統(tǒng) 最好不要在 DB2 服務(wù)器 / 分區(qū)之間共享 LUN 和物理磁盤(pán)。最佳實(shí)踐是為每個(gè)非 DPF DB2 數(shù)據(jù)庫(kù)服務(wù)器和每個(gè) DPF 數(shù)據(jù)庫(kù)分區(qū)使用專用 LUN 。 將 LUN 專用于 DB2 服務(wù)器或分區(qū)確實(shí)會(huì)阻礙將組成該 LUN 的物理磁盤(pán)用于創(chuàng)建單獨(dú)的 LUN ,雖然創(chuàng)建的 LUN 的使用不大可能干擾那些磁盤(pán)的主要用途。但是,如上一節(jié)所述,您應(yīng)該確保這些 LUN 在您的控制之下,并謹(jǐn)慎地加以使用。之前討論的將剩余空間用于備份和歸檔日志的 staging 區(qū)域就屬于這樣的用途。 單個(gè)的文件系統(tǒng)應(yīng)該在每個(gè)這樣的 LUN 上創(chuàng)建,并且應(yīng)該專用于單個(gè) DB2 服務(wù)器或 DPF 數(shù)據(jù)庫(kù)分區(qū)。 專用的 LUN 和每個(gè) LUN 上專用的文件系統(tǒng)可保持存儲(chǔ)布局的簡(jiǎn)單性,并且有助于問(wèn)題診斷。 對(duì)于 DPF 系統(tǒng),建議遵循 IBM Balanced Configuration Warehouse 實(shí)踐。 例如,當(dāng)在一個(gè)表上選擇了不恰當(dāng)?shù)姆謪^(qū)鍵時(shí),查詢便不能獲得應(yīng)有的并行性,如果采用上述做法,這個(gè)問(wèn)題就可輕易診斷出來(lái)。當(dāng) LUN 和文件系統(tǒng)專用于數(shù)據(jù)庫(kù)分區(qū)時(shí),如果看到一組 LUN 的繁忙時(shí)間遠(yuǎn)多于其他 LUN ,那么這個(gè)問(wèn)題就變得很明顯了,因?yàn)橐粋€(gè)分區(qū)上存放了所有需要處理的數(shù)據(jù),而其他分區(qū)上的數(shù)據(jù)則相對(duì)較少。 存儲(chǔ)控制器直接在控制器固件中提供了杰出的 RAID 條帶化。應(yīng)該將企業(yè)系統(tǒng)設(shè)計(jì)為使用存儲(chǔ)控制器提供的條帶功能。這么做的一個(gè)更方便的途徑是讓存儲(chǔ)控制器暴露一個(gè)單獨(dú)的 RAID 陣列,例如,讓 RAID-5 或 RAID-10 作為一個(gè)單獨(dú)的 LUN 。然后,可以將一個(gè)或多個(gè)這樣的 LUN 提供給 DB2 分區(qū)。 當(dāng)把不止一個(gè) LUN 提供給 DB2 數(shù)據(jù)庫(kù)服務(wù)器或 DPF 數(shù)據(jù)庫(kù)分區(qū)時(shí),則使用 DB2 數(shù)據(jù)庫(kù)系統(tǒng)容器更細(xì)的條帶。 由于兩次條帶化對(duì)所有的系統(tǒng)都算足夠了,要避免使用三次條帶化,例如操作系統(tǒng)的邏輯卷管理器。邏輯卷管理器(LVM )條帶化對(duì)于其他中間件有益,但是 DB2 數(shù)據(jù)庫(kù)系統(tǒng)不同,DB2 數(shù)據(jù)庫(kù)系統(tǒng)中沒(méi)有足夠的容量來(lái)進(jìn)行自己的條帶化。 將 DB2 事務(wù)日志與數(shù)據(jù)分開(kāi) 為取得最佳可用性,應(yīng)將事務(wù)日志和 DB2 數(shù)據(jù)或表空間分開(kāi),放到不同的物理磁盤(pán)和不同的 LUN 上。 應(yīng)該為每個(gè) DB2 分區(qū)提供一個(gè)有專用物理磁盤(pán)的 LUN 用于事務(wù)日志,此外,通常還需為表空間容器或數(shù)據(jù)提供多個(gè) LUN 。 雖然日志物理磁盤(pán)相對(duì)于數(shù)據(jù)物理磁盤(pán)的比例很大程度上取決于工作負(fù)載,但較好的調(diào)整準(zhǔn)則是 15% 至 25% 的物理磁盤(pán)用于日志,75% 至 85% 的物理磁盤(pán)用于數(shù)據(jù)。 使用文件系統(tǒng)替代原始設(shè)備 — 為每個(gè) LUN 創(chuàng)建一個(gè)文件系統(tǒng) 由于性能的原因,直接 I/O 和并發(fā) I/O 幾乎已經(jīng)完全消除了使用原始邏輯卷的需要。文件系統(tǒng)比原始設(shè)備提供更好的可管理性,因?yàn)閱蝹€(gè)文件系統(tǒng)可用作多個(gè)表空間的容器。 為一個(gè)數(shù)據(jù)庫(kù)分區(qū)配置的的每個(gè) LUN 都應(yīng)該創(chuàng)建一個(gè)單獨(dú)的文件系統(tǒng),供這個(gè)分區(qū)使用,也就是說(shuō),每個(gè) LUN 一個(gè)文件系統(tǒng)。 每個(gè) DB2 分區(qū)通常有:
事務(wù)日志使用 RAID-10,數(shù)據(jù)使用 RAID-10 或 RAID-5 RAID-10 提供極好的冗余,因?yàn)樗梢越?jīng)受多次物理磁盤(pán)故障。而 RAID-5 只能經(jīng)受一次物理磁盤(pán)故障。但是,RAID-10 增加冗余的代價(jià)是成本比 RAID-5 高很多。 如果將 RAID-10 同時(shí)用于日志和數(shù)據(jù),那么將擁有更大的不懼磁盤(pán)故障的韌性。如果只能將 RAID-10 用于存儲(chǔ)數(shù)據(jù)或日志中的一種,那么將它用于日志,而將 RAID-5 用于數(shù)據(jù)。如果選擇將 RAID-5 同時(shí)用于日志和數(shù)據(jù),那么仍然可以擁有非常有韌性的存儲(chǔ)配置;但是,您會(huì)發(fā)現(xiàn)需要更大程度上依賴于數(shù)據(jù)庫(kù)備份。將表空間 EXTENTSIZE 設(shè)置為 RAID 條帶大?。ㄈ绻霾坏?,則設(shè)為一個(gè)有助于讀取大塊數(shù)據(jù)的大?。?。 RAID 陣列中每個(gè)物理磁盤(pán)上連續(xù)數(shù)據(jù)的總量稱作“條塊(strip )”,橫跨這些全部由條塊組成的陣列的數(shù)據(jù)的總量則稱作“條帶(stripe )”。 典型的 RAID 條塊大小是 32kb 、64kb 、128kb 等。 RAID-5 4+1 陣列上的條帶大小相當(dāng)于條塊大小的 4 倍。 表空間的 EXTENTSIZE 應(yīng)該設(shè)為包括整個(gè) RAID 條帶的頁(yè)數(shù)。 例如,一個(gè)使用 RAID-5 4+1 的系統(tǒng),其條塊大小為 128kb ,那么該系統(tǒng)上的條帶大小為 512kb (128kb x 4 )。如果使用的頁(yè)大小為 8kb ,那么將 EXTENTSIZE 設(shè)為 64 (512kb/8kb )較為合適。 在虛擬化存儲(chǔ)環(huán)境中設(shè)置表空間盤(pán)區(qū)大小 有時(shí)候,無(wú)法知道給定 DB2 表空間容器的文件系統(tǒng)存儲(chǔ)在哪個(gè) RAID 陣列上。如果為數(shù)據(jù)庫(kù)服務(wù)器主機(jī)和存儲(chǔ)控制器配置的 LUN 之間存在其他層或存儲(chǔ)虛擬化,那么就會(huì)出現(xiàn)這種情況。在此情況下,當(dāng)創(chuàng)建表空間時(shí),應(yīng)該將 EXTENTSIZE 設(shè)為一個(gè)有利于預(yù)取程序執(zhí)行有效大塊 I/O 的數(shù)字。較好的經(jīng)驗(yàn)法則是將盤(pán)區(qū)大小設(shè)為 256 KB 。 128 KB 或 512 KB 的盤(pán)區(qū)大小也是不錯(cuò)的選擇。 EXTENTSIZE 的默認(rèn)設(shè)置(32 個(gè)頁(yè)面,由 DFT_EXTENT_SZ 配置參數(shù)指定)大多數(shù)情況下應(yīng)該能提供足夠的性能。例如,如果數(shù)據(jù)庫(kù)使用 8 KB 的頁(yè)面,在不知道 RAID 條塊大小方面的詳細(xì)信息時(shí),使用 32 (8 KB x 32 個(gè)頁(yè)面 = 256 KB )的 EXTENTSIZE 應(yīng)該足夠了。即使對(duì)于 4 KB 或 16 KB 的頁(yè)面,32 的 EXTENTSIZE 仍可以分別得到 128 KB 或 512 KB 的盤(pán)區(qū)大小,這符合建議的范圍。 設(shè)置 DB2_PARALLEL_IO 實(shí)現(xiàn)最佳 I/O 并行性 默認(rèn)情況下,在表掃描期間,DB2 for Linux, UNIX and Windows 的 I/O 服務(wù)器或預(yù)取程序?yàn)槊總€(gè)表空間容器執(zhí)行盤(pán)區(qū)大小的 I/O 。因此,EXTENTSIZE 不僅是 DB2 的條帶化單位,也是預(yù)取程序在連續(xù)預(yù)取期間使用的讀 I/O 大小。 如果按照上一節(jié)中的最佳實(shí)踐設(shè)置 EXTENTSIZE ,那么在包含每個(gè) DB2 容器使用的文件系統(tǒng)的(單個(gè))RAID 陣列中,應(yīng)確保一個(gè)盤(pán)區(qū)的數(shù)據(jù)橫跨所有的驅(qū)動(dòng)器,然后就不需要設(shè)置 DB2_PARALLEL_IO 了,因?yàn)閿?shù)據(jù)庫(kù)管理器將自動(dòng)從容器中的所有物理磁盤(pán)中并行地預(yù)取該盤(pán)區(qū)。 除了本文提供的方式外,還有其他方式可用于設(shè)置 EXTENTSIZE 和設(shè)計(jì) DB2 系統(tǒng)的條帶化。 在某些配置中,另一種方式是將 EXTENTSIZE 設(shè)為使連續(xù)數(shù)據(jù)橫跨每個(gè) RAID 陣列中的一個(gè)物理磁盤(pán)。也就是說(shuō),將 EXTENTSIZE 設(shè)為條塊大小,而不是上一節(jié)推薦的條帶大小。在這樣的配置中,在連續(xù)預(yù)取期間,每個(gè)表空間容器采用單個(gè)盤(pán)區(qū)大小的 I/O 便不適用,因?yàn)樗荒茯?qū)動(dòng)文件系統(tǒng)所基于的 RAID 陣列中的一個(gè)物理磁盤(pán)。對(duì)于這些系統(tǒng),如果想讓數(shù)據(jù)庫(kù)管理器生成多盤(pán)區(qū)大小的預(yù)取請(qǐng)求,并行地驅(qū)動(dòng)用于每個(gè) DB2 表空間容器的物理磁盤(pán),就必須設(shè)置 DB2_PARALLEL_IO 。 DB2_PARALLEL_IO 允許用戶顯式地指定每個(gè)容器下的物理磁盤(pán)數(shù),以便為每個(gè)容器生成適當(dāng)數(shù)量的預(yù)取請(qǐng)求。例如,如果每個(gè)表空間容器存在于一個(gè)由 RAID 5 4+1 陣列支持的文件系統(tǒng)上,那么下面是合適的 DB2_PARALLEL_ IO 設(shè)置:
“* ”表示該設(shè)置適用于所有表空間。5 表示在每個(gè)容器下有 5 (4+1 )個(gè)物理磁盤(pán),每個(gè)物理磁盤(pán)都應(yīng)該由一個(gè)單獨(dú)的預(yù)取程序所發(fā)出的單盤(pán)區(qū)大小的讀請(qǐng)求來(lái)驅(qū)動(dòng)。 以下算法將 DB2_PARALLEL_IO 設(shè)置考慮在內(nèi):
(請(qǐng)參閱“不要手動(dòng)調(diào)優(yōu) NUM_IOCLEANERS 、NUM_IOSERVERS 和 PREFETCHSIZE 配置參數(shù)”小節(jié),獲得相關(guān)建議。) NO FILE SYSTEM CACHING 子句支持直接或并發(fā) I/O ,其中任何一個(gè)都適合 DB2 數(shù)據(jù)庫(kù)系統(tǒng)所在的操作系統(tǒng)平臺(tái)。直接或并發(fā) I/O 有效地使 DB2 I/O 操作在文件系統(tǒng)上獲得接近原始設(shè)備的性能。 在 DB2 Universal Database, Version 8.2 中,對(duì) NO FILE SYSTEM CACHING 子句的支持已經(jīng)被添加到 CREATE TABLESPACE 和 ALTER TABLESPACE 語(yǔ)句中。從 Version 9.5 開(kāi)始,對(duì)于那些支持直接或并發(fā) I/O 的文件系統(tǒng),例如 JFS2 、GPFS? 和 VxFS ,新創(chuàng)建的數(shù)據(jù)庫(kù)已默認(rèn)如此。 使用 DB2 自動(dòng)化存儲(chǔ)讓條帶化無(wú)處不在 DB2 自動(dòng)化存儲(chǔ)(AS )技術(shù)是為數(shù)據(jù)庫(kù)配置存儲(chǔ)的一種簡(jiǎn)單而有效的方式。存儲(chǔ)通過(guò) CREATE DATABASE 命令直接提供給數(shù)據(jù)庫(kù),而非表空間。例如:
這個(gè)例子命令創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),它有 3 個(gè)存儲(chǔ)路徑:data1 、data2 和 data3 。每個(gè)路徑都是一個(gè)單獨(dú)的文件系統(tǒng),每個(gè)文件系統(tǒng)都是通過(guò)專用的 LUN 創(chuàng)建的。(注意:除非另外指定,否則在使用 CREATE DATABASE 命令創(chuàng)建數(shù)據(jù)庫(kù)時(shí)將默認(rèn)使用自動(dòng)化存儲(chǔ)。) CREATE DATABASE 命令上的 DBPATH 參數(shù)被設(shè)為另一個(gè)單獨(dú)的文件系統(tǒng)(/mydbpath ),該文件系統(tǒng)是使用為 DB2 事務(wù)日志提供的 LUN 創(chuàng)建的。事務(wù)日志和 DB2 元數(shù)據(jù)都存放在這個(gè)文件系統(tǒng)上。 DB2 數(shù)據(jù)庫(kù)系統(tǒng)創(chuàng)建的默認(rèn)表空間(SYSCATSPACE 、USERSPACE1 和 TEMPSPACE1 )各有 3 個(gè)控制器 — 對(duì)應(yīng) 3 個(gè)存儲(chǔ)路徑。 任何未顯式指定容器而創(chuàng)建的新的表空間也是使用隨處條帶化的方法創(chuàng)建的。 例如,考慮以下 DB2 語(yǔ)句:
使用 CREATE TABLESPACE 語(yǔ)句創(chuàng)建的表空間 MYTS 有 3 個(gè)容器,每個(gè)容器對(duì)應(yīng)一個(gè)存儲(chǔ)路徑。 雖然使用自動(dòng)化存儲(chǔ)不妨礙在同一個(gè)數(shù)據(jù)庫(kù)中定義系統(tǒng)管理空間(SMS )或數(shù)據(jù)庫(kù)管理空間(DMS )的表空間或文件,但是自動(dòng)化存儲(chǔ)通常會(huì)消除這方面的需要。 由于 DB2 存儲(chǔ)管理器使用簡(jiǎn)單的隨處條帶化方法,自動(dòng)化存儲(chǔ)的最佳實(shí)踐是使用容量一致的存儲(chǔ)路徑或文件系統(tǒng)。這樣可確保并行性保持一致,不至于使某個(gè)存儲(chǔ)路徑過(guò)早地 被填滿,而導(dǎo)致某些部分的表空間的條帶化寬度不同于其他表空間。 當(dāng)需要為數(shù)據(jù)庫(kù)增加空間時(shí),應(yīng)盡量均衡擴(kuò)展所有已有的路徑。也就是說(shuō),等量地增加每個(gè)文件系統(tǒng)的容量。 如果不能均衡擴(kuò)展存儲(chǔ)路徑,那么使用 ALTER DATABASE 命令的 ADD STORAGE ON 子句增加一組新的(大小均等的)存儲(chǔ)路徑。這組新的存儲(chǔ)路徑應(yīng)該與原有存儲(chǔ)路徑有相同的 I/O 功能。理想情況下,應(yīng)該同時(shí)添加與之前定義的存儲(chǔ)路徑數(shù)量相同的存儲(chǔ)路徑。 例如,為了給之前創(chuàng)建的數(shù)據(jù)庫(kù) MYDB 增加空間,最佳選擇是等量增加文件系統(tǒng) /data1 、/data2 和 /data3 的容量。 如果做不到,那么應(yīng)該增加一組新的存儲(chǔ)路徑(文件系統(tǒng)),它們應(yīng)該與原有存儲(chǔ)路徑(文件系統(tǒng))具有相同的 I/O 特征:
由于原有存儲(chǔ)路徑大小相同,它們要填滿也是一起填滿,表空間需要從額外的存儲(chǔ)中為容器分配新的條帶集 — 每個(gè)容器對(duì)應(yīng)一個(gè)新的存儲(chǔ)路徑。 不要手動(dòng)調(diào)優(yōu) NUM_IOCLEANERS、NUM_IOSERVERS 和 PREFETCHSIZE 配置參數(shù) 這些參數(shù)的默認(rèn)值是 AUTOMATIC 。DB2 數(shù)據(jù)庫(kù)管理器能夠很好地為這些參數(shù)選擇適當(dāng)?shù)闹?。因此,通常不需要?duì)它們進(jìn)行手動(dòng)調(diào)優(yōu)。
手動(dòng)將數(shù)據(jù)庫(kù)表和索引映射到單獨(dú)的物理磁盤(pán)和物理磁盤(pán)的一部分,這是十年前的最佳實(shí)踐。馴服復(fù)雜、虛擬化、網(wǎng)絡(luò)化存儲(chǔ)的關(guān)鍵是使數(shù)據(jù)庫(kù)存儲(chǔ)設(shè) 計(jì)盡可能簡(jiǎn)單。 雖然這看似違反直覺(jué),但對(duì)復(fù)雜的事務(wù)進(jìn)行簡(jiǎn)單化要好過(guò)進(jìn)一步復(fù)雜化。雖然保持簡(jiǎn)單性并不總是那么容易,本文提供的最佳實(shí)踐為成功的數(shù)據(jù)庫(kù)存儲(chǔ) 設(shè)計(jì)提供了易于遵循的秘訣。 首先,DBA 的時(shí)間和精力合理地花在優(yōu)化數(shù)據(jù)庫(kù)模式而不是物理數(shù)據(jù)庫(kù)存儲(chǔ)上。優(yōu)化數(shù)據(jù)庫(kù)模式需要使用 MDC 、MQT 等功能,創(chuàng)建適當(dāng)?shù)乃饕?,并刪除不適當(dāng)?shù)乃饕?。畢竟,再高的吞吐率或再低延時(shí)的 I/O ,都不如根本不需要執(zhí)行 I/O |
|