如何調(diào)優(yōu)數(shù)據(jù)庫(kù)注冊(cè)變量DB2_USE_FAST_PREALLOCATION

盡管 DB2 pureScale 以高可用性、無(wú)限擴(kuò)展性和對(duì)應(yīng)用程序的透明性而著稱(chēng),性能對(duì)于它來(lái)說(shuō)同樣重要。本文是 DB2 pureScale 在 Power 平臺(tái)上的性能調(diào)優(yōu)系列的又一個(gè)專(zhuān)題,主要關(guān)于如何調(diào)優(yōu)數(shù)據(jù)庫(kù)注冊(cè)變量 DB2_USE_FAST_PREALLOCATION。

本文首先介紹了文件系統(tǒng)中和性能相關(guān)的很多方面,主要包括快速預(yù)分配和緩存,然后基于我們?cè)趯?shí)際試驗(yàn)中遇到的性能問(wèn)題,歸納出在 db2 purescale 環(huán)境中調(diào)優(yōu)注冊(cè)變量 db2_use_fast_preallocation 的最佳實(shí)踐。

一方面,DB2 pureScale 基于共享數(shù)據(jù) (share everything) 的架構(gòu)設(shè)計(jì),要求運(yùn)行在 IBM 的 GPFS(General Parallel File System)文件系統(tǒng)之上。同 JFS2(Enhanced Journaled File System) 文件系統(tǒng)一樣,GPFS 也支持快速預(yù)分配功能??焖兕A(yù)分配功能可以顯著提高數(shù)據(jù)庫(kù)中諸如數(shù)據(jù)庫(kù)恢復(fù)、表空間創(chuàng)建、表空間大小修改等操作的性能。另一方面,DB2 pureScale 要求數(shù)據(jù)庫(kù)中所有的表空間都是自動(dòng)存儲(chǔ)類(lèi)型的表空間。對(duì)于自動(dòng)存儲(chǔ)表空間,容器的創(chuàng)建和空間的分配工作都由數(shù)據(jù)庫(kù)管理器來(lái)按需進(jìn)行。

默認(rèn)情況下,DB2 會(huì)在支持 FAST_PREALLOCATION 特性的文件系統(tǒng)上開(kāi)啟該功能,來(lái)提高涉及修改表空間大小的操作的性能。我們?cè)跍y(cè)試中發(fā)現(xiàn),對(duì)于運(yùn)行在 GPFS 上的 DB2 pureScale,開(kāi)啟快速預(yù)分配功能可以顯著提高數(shù)據(jù)庫(kù)恢復(fù)的性能,但對(duì)于運(yùn)行時(shí)的性能卻有很大影響。本文將詳細(xì)闡述我們遇到的問(wèn)題,分析產(chǎn)生問(wèn)題的原因,最后給出關(guān)于該注冊(cè)變量設(shè)置的最佳實(shí)踐。

文件系統(tǒng)的快速預(yù)分配功能

在闡述我們遇到的問(wèn)題之前,需要先了解一下文件系統(tǒng)的快速預(yù)分配功能。很多文件系統(tǒng),如:JFS2、GPFS,都支持快速預(yù)分配功能。文件系統(tǒng)的快速預(yù)分配功能指的是:允許在不進(jìn)行實(shí)際空間分配的情況下來(lái)改變一個(gè)文件的大小,實(shí)際空間的分配會(huì)在首次對(duì)對(duì)應(yīng)新空間進(jìn)行寫(xiě)的時(shí)候進(jìn)行。也就是說(shuō),應(yīng)用程序可以讓文件系統(tǒng)承諾預(yù)留一定的空間給它,此時(shí)文件系統(tǒng)只需給應(yīng)用程序一個(gè)承諾,而無(wú)需進(jìn)行實(shí)際空間的分配。這樣,文件大小的改變就會(huì)很快完成,而具體的空間分配工作會(huì)在后續(xù)進(jìn)行實(shí)際寫(xiě)的時(shí)候進(jìn)行。這種特性對(duì)于那些頻繁涉及文件大小操作的應(yīng)用有很大的好處。

對(duì)應(yīng)到 DB2,默認(rèn)情況下,DB2 會(huì)在支持快速預(yù)分配功能的文件系統(tǒng)上啟用該功能,來(lái)提高涉及文件大小更改的數(shù)據(jù)庫(kù)操作的性能,如數(shù)據(jù)庫(kù)恢復(fù)、表空間創(chuàng)建、表空間大小修改。例如,當(dāng) DB2 需要?jiǎng)?chuàng)建一個(gè)新的表空間時(shí),文件系統(tǒng)不需要立即進(jìn)行實(shí)際空間的分配,實(shí)際空間會(huì)在 DB2 對(duì)對(duì)應(yīng)空間首次插入數(shù)據(jù)的時(shí)候進(jìn)行分配。而這種運(yùn)行時(shí)實(shí)際空間分配帶來(lái)的開(kāi)銷(xiāo)理論上也是可以忽略的。

文件系統(tǒng)的緩存功能

默認(rèn)情況下,操作系統(tǒng)會(huì)對(duì)從磁盤(pán)讀取或者要寫(xiě)入磁盤(pán)的數(shù)據(jù)進(jìn)行緩存。這就是文件系統(tǒng)緩存的作用。典型的涉及物理磁盤(pán)操作的讀過(guò)程是:先從磁盤(pán)上讀取數(shù)據(jù),把它放到文件系統(tǒng)的緩存中,然后再把數(shù)據(jù)從文件系統(tǒng)的緩存拷貝到應(yīng)用程序的緩存中,這樣應(yīng)用程序才能使用這些數(shù)據(jù)。同樣涉及物理磁盤(pán)操作的寫(xiě)過(guò)程是:首先把數(shù)據(jù)從應(yīng)用程序緩存拷貝到文件系統(tǒng)緩存,然后再?gòu)奈募到y(tǒng)緩存寫(xiě)到物理磁盤(pán)上。可見(jiàn),文件系統(tǒng)的緩存位于應(yīng)用程序緩存和磁盤(pán)之間,是應(yīng)用程序和磁盤(pán)之間進(jìn)行數(shù)據(jù)讀寫(xiě)操作的橋梁。

圖 1. IO 操作流程
如何調(diào)優(yōu)數(shù)據(jù)庫(kù)注冊(cè)變量DB2_USE_FAST_PREALLOCATION

對(duì)于那些本身沒(méi)有緩存功能的應(yīng)用程序,使用文件系統(tǒng)級(jí)別的緩存可以帶來(lái)很大的性能提高。通過(guò)文件系統(tǒng)緩存的預(yù)讀(read-ahead)和延遲寫(xiě) (write-behind) 功能,應(yīng)用程序可以節(jié)省很多花費(fèi)在 IO 等待上時(shí)間,從而帶來(lái)性能的極大提高。而對(duì)于像數(shù)據(jù)庫(kù)這樣的應(yīng)用,它本身已經(jīng)維護(hù)了自己的緩存池(bufferpool),如果在文件系統(tǒng)級(jí)別也啟用緩存的話,將形成雙重緩存的局面,會(huì)帶來(lái)一些額外的 CPU 開(kāi)銷(xiāo)。所以為了避免文件系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)重復(fù)緩存帶來(lái)的額外開(kāi)銷(xiāo),我們一般在數(shù)據(jù)庫(kù)場(chǎng)景中會(huì)關(guān)閉文件系統(tǒng)的緩存功能。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享