簡介
對(duì)于剛涉足 DB2 領(lǐng)域的 DBA 或未來的 DBA 而言惰说,新數(shù)據(jù)庫的設(shè)計(jì)和性能選擇可能會(huì)很令人困惑。在本文中,我們將討論 DBA 要做出重要選擇的兩個(gè)方面:表空間和緩沖池。表空間和緩沖池的設(shè)計(jì)和調(diào)優(yōu)會(huì)對(duì) DB2 服務(wù)器的性能產(chǎn)生深遠(yuǎn)的影響奏寨,因此我們將著重討論這些活動(dòng)。
在我們的示例中鹰服,我們將使用 DB2 V8.1 企業(yè)服務(wù)器版病瞳。大多數(shù)示例也適用于低級(jí)版本。我們會(huì)讓您知道某個(gè)示例是否只適用于 V8.1获诈。
在 第 1 節(jié)中仍源,我們將從定義表空間的類型開始,并將說明 DB2 如何將數(shù)據(jù)存儲(chǔ)在表空間中舔涎。我們將介紹配置選項(xiàng)并向您介紹創(chuàng)建和管理表空間的整個(gè)過程。接下來逗爹,我們將著重討論 緩沖池亡嫌,介紹緩沖池是什么以及如何創(chuàng)建和使用它。在 第 2 節(jié)中掘而,我們將結(jié)合這兩個(gè)方面并討論該如何組織緩沖池和表空間才能獲得最佳性能挟冠。
第 1 節(jié):定義
表空間
數(shù)據(jù)庫中的所有數(shù)據(jù)都存儲(chǔ)在許多表空間中∨鬯可以認(rèn)為表空間是孩子而數(shù)據(jù)庫是其父母知染,其中表空間(孩子)不能有多個(gè)數(shù)據(jù)庫(父母)。由于表空間有不同用途斑胜,因此根據(jù)它們的用途和管理方式將它們分類控淡。根據(jù)用途有五種不同的表空間:
-
目錄表空間
每個(gè)數(shù)據(jù)庫只有一個(gè)目錄表空間,它是在發(fā)出 CREATE DATABASE 命令時(shí)創(chuàng)建的止潘。目錄表空間被 DB2 命名為 SYSCATSPACE掺炭,它保存了系統(tǒng)目錄表∑敬鳎總是在創(chuàng)建數(shù)據(jù)庫時(shí)創(chuàng)建該表空間涧狮。
-
常規(guī)表空間
常規(guī)表空間保存表數(shù)據(jù)和索引。它還可以保存諸如大對(duì)象(Large Object么夫,LOB)之類的長數(shù)據(jù)者冤,除非這些數(shù)據(jù)顯式地存儲(chǔ)在長表空間中。如果某些表空間是數(shù)據(jù)庫管理的空間(Database Managed Space档痪,DMS)涉枫,則可以將表及其索引分別放到單獨(dú)的常規(guī)表空間中。我們將在本文后面定義 DMS 和系統(tǒng)管理的空間(System Managed Space钞它,SMS)之間的區(qū)別拜银。每個(gè)數(shù)據(jù)庫中必須至少有一個(gè)常規(guī)表空間殊鞭。創(chuàng)建數(shù)據(jù)庫時(shí)指定該表空間的缺省名為 USERSPACE1。
-
長表空間
長表空間用于存儲(chǔ)長型或 LOB 表列尼桶,它們必須駐留在 DMS 表空間中操灿。它們還可以存儲(chǔ)結(jié)構(gòu)化類型的列或索引數(shù)據(jù)。如果沒有定義長表空間泵督,那么將把 LOB 存儲(chǔ)在常規(guī)表空間中趾盐。長表空間是可選的,缺省情況下一個(gè)都不創(chuàng)建小腊。
-
系統(tǒng)臨時(shí)表空間
系統(tǒng)臨時(shí)表空間用于存儲(chǔ) SQL 操作(比如排序救鲤、重組表、創(chuàng)建索引和連接表)期間所需的內(nèi)部臨時(shí)數(shù)據(jù)秩冈。每個(gè)數(shù)據(jù)庫必須至少有一個(gè)系統(tǒng)臨時(shí)表空間本缠。隨數(shù)據(jù)庫創(chuàng)建的系統(tǒng)臨時(shí)表空間的缺省名為 TEMPSPACE1。
-
用戶臨時(shí)表空間
用戶臨時(shí)表空間存儲(chǔ)已聲明的全局臨時(shí)表入问。創(chuàng)建數(shù)據(jù)庫時(shí)不存在用戶臨時(shí)表空間丹锹。至少應(yīng)當(dāng)創(chuàng)建一個(gè)用戶臨時(shí)表空間以允許定義已聲明的臨時(shí)表。用戶臨時(shí)表空間是可選的芬失,缺省情況下一個(gè)都不創(chuàng)建楣黍。
表空間管理
可以用兩種不同的方式管理表空間:
-
系統(tǒng)管理的空間(SMS)
SMS 表空間由操作系統(tǒng)進(jìn)行管理。容器被定義成常規(guī)操作系統(tǒng)文件棱烂,并且是通過操作系統(tǒng)調(diào)用訪問的租漂。這意味著所有的常規(guī)操作系統(tǒng)功能將處理以下內(nèi)容:操作系統(tǒng)將緩沖 I/O;根據(jù)操作系統(tǒng)約定分配空間颊糜;如有必要就自動(dòng)擴(kuò)展表空間哩治。但是,不能從 SMS 表空間刪除容器芭析,并且僅限于將新的容器添加到分區(qū)的數(shù)據(jù)庫锚扎。前一節(jié)中所說明的那三個(gè)缺省表空間都是 SMS。
-
數(shù)據(jù)庫管理的空間(DMS)
DMS 表空間是由 DB2 管理的馁启〖菘祝可以將容器定義成文件(在創(chuàng)建表空間時(shí)將把給定的大小全部分配給它們)或設(shè)備。分配方法和操作系統(tǒng)允許多少 I/O惯疙,DB2 就可以管理多少 I/O翠勉。可以通過使用 altER TABLESPACE 命令來擴(kuò)展容器霉颠。還可以釋放未使用的那部分 DMS 容器(從 V8 開始)对碌。
下面是一個(gè)示例,向您說明該如何增大容器大休镔恕(V7 和 V8 都支持此功能):
ALTER TABLESPACE TS1 RESIZE (FILE '/conts/cont0' 2000, DEVICE '/dev/rcont1' 2000, FILE 'cont2' 2000)
請注意朽们,只有 V8 才支持將原始容器的大小調(diào)整得更小怀读。
如何創(chuàng)建和查看表空間
當(dāng)您創(chuàng)建數(shù)據(jù)庫時(shí),將創(chuàng)建三個(gè)表空間(SYSCATSPACE骑脱、TEMPSPACE1 和 USERSPACE1)菜枷。通過使用 DB2 命令窗口(Command Window)或 UNIX 命令行,創(chuàng)建一個(gè)名為 testdb 的數(shù)據(jù)庫叁丧,連接至該數(shù)據(jù)庫啤誊,然后列出表空間:
CREATE DATABASE testdb CONNECT TO testdb LIST TABLESPACES
下面的 清單 1顯示了 LIST TABLESPACES 命令的輸出。
清單 1. LIST TABLESPACES 命令的輸出
Tablespaces for Current Database Tablespace ID = 0 Name = SYSCATSPACE Type = System managed space Contents = Any data State = 0x0000 Detailed explanation: Normal Tablespace ID = 1 Name = TEMPSPACE1 Type = System managed space Contents = System Temporary data State = 0x0000 Detailed explanation: Normal Tablespace ID = 2 Name = USERSPACE1 Type = System managed space Contents = Any data State = 0x0000 Detailed explanation: Normal
上面所示的這三個(gè)表空間是通過 CREATE DATABASE 命令自動(dòng)創(chuàng)建的拥娄。用戶可以通過在該命令中包含表空間說明來覆蓋缺省的表空間創(chuàng)建蚊锹,但是在創(chuàng)建數(shù)據(jù)庫時(shí)必須創(chuàng)建一個(gè)目錄表空間和至少一個(gè)常規(guī)表空間,以及至少一個(gè)系統(tǒng)臨時(shí)表空間稚瘾。通過使用 CREATE DATABASE 命令或以后使用 CREATE TABLESPACE 命令牡昆,可以創(chuàng)建更多的所有類型的表空間(目錄表空間除外)。
容器
每個(gè)表空間都有一個(gè)或多個(gè)容器摊欠。重申一次迁杨,您可以認(rèn)為容器是孩子,而表空間是其父母凄硼。每個(gè)容器只能屬于一個(gè)表空間,但是一個(gè)表空間可以擁有許多容器捷沸√粒可以將容器添加到 DMS 表空間,或者從 DMS 表空間中刪除容器痒给,而且可以更改容器的大小说墨。只能將容器添加到某個(gè)分區(qū)中分區(qū)數(shù)據(jù)庫上的 SMS 表空間,在添加之前該分區(qū)還未給表空間分配容器苍柏。添加新的容器時(shí)尼斧,將啟動(dòng)一個(gè)自動(dòng)的重新均衡操作以便將數(shù)據(jù)分布到所有容器上。重新均衡操作不會(huì)妨礙對(duì)數(shù)據(jù)庫的并發(fā)訪問试吁。
表空間設(shè)置
可以在創(chuàng)建表空間時(shí)給它們指定許多設(shè)置棺棵,或者也可以稍后使用 altER TABLESPACE 語句時(shí)指定其設(shè)置。
-
頁大邢ê础(Page size)
定義表空間所使用的頁大小烛恤。所支持的大小為 4K、8K余耽、16K 和 32K缚柏。頁大小根據(jù)下表限定了可放到表空間中的表的行長度和列數(shù):
表 1. 頁大小的含義
頁大小 行大小 限制列數(shù) 限制最大容量 4 KB 4 005 500 64 GB 8 KB 8 101 1 012 128 GB 16 KB 16 293 1 012 256 GB 32 KB 32 677 1 012 512 GB 表空間最多可包含 16384 個(gè)頁,因此選擇較大的頁大小可以增加表空間的容量碟贾。
-
擴(kuò)展塊大斜倚(Extent size)
指定在跳到下一個(gè)容器之前將寫到當(dāng)前容器中的頁數(shù)轨域。存儲(chǔ)數(shù)據(jù)時(shí)數(shù)據(jù)庫管理器反復(fù)循環(huán)使用所有容器。該參數(shù)只有在表空間中有多個(gè)容器時(shí)才起作用杀餐。
-
預(yù)取大懈煞ⅰ(Prefetch size)
指定當(dāng)執(zhí)行數(shù)據(jù)預(yù)取時(shí)將從表空間讀取的頁數(shù)。預(yù)取操作在查詢引用所需的數(shù)據(jù)之前讀入這些數(shù)據(jù)怜浅,這樣一來查詢就不必等待執(zhí)行 I/O 了铐然。當(dāng)數(shù)據(jù)庫管理器確定順序 I/O 是適當(dāng)?shù)模⑶掖_定預(yù)取操作可能有助于提高性能時(shí)恶座,它就選擇預(yù)取操作搀暑。
-
開銷(Overhead)和傳送速率(Transfer rate)
這些值用于確定查詢優(yōu)化期間的 I/O 成本。這兩個(gè)值的測量單位都是毫秒跨琳,而且它們應(yīng)當(dāng)分別是所有容器開銷和傳送速率的平均值自点。開銷是與 I/O 控制器活動(dòng)、磁盤尋道時(shí)間和旋轉(zhuǎn)延遲時(shí)間相關(guān)聯(lián)的時(shí)間脉让。傳送速率是將一個(gè)頁讀入內(nèi)存所必需的時(shí)間量桂敛。它們的缺省值分別是 24.1 和 0.9〗η保可以根據(jù)硬件規(guī)格計(jì)算這些值术唬。
CREATE TABLESPACE 語句的示例
下列語句將創(chuàng)建一個(gè)常規(guī)表空間。所討論的所有設(shè)置都是為了進(jìn)行說明滚澜。
CREATE TABLESPACE USERSPACE3 PAGESIZE 8K MANAGED BY SYSTEM USING ('d:\\usp3_cont1', 'e:\\usp3_cont2', 'f:\\usp3_cont3') EXTENTSIZE 64 PREFETCHSIZE 32 BUFFERPOOL BP3 OVERHEAD 24.1 TRANSFERRATE 0.9
如何查看表空間的屬性和容器
指定 LIST TABLESPACES 命令的 SHOW DETAIL 選項(xiàng)將顯示其它信息:
LIST TABLESPACES SHOW DETAIL
清單 2顯示了 USERSPACE1 表空間的輸出粗仓。缺省情況下,將列出創(chuàng)建數(shù)據(jù)庫時(shí)所創(chuàng)建的那三個(gè)表空間设捐。
清單 2. LlST TABLESPACES SHOW DETAIL 命令的輸出
Tablespaces for Current Database Tablespace ID = 2 Name = USERSPACE1 Type = System managed space Contents = Any data State = 0x0000 Detailed explanation: Normal Total pages = 336 Useable pages = 336 Used pages = 336 Free pages = Not applicable High water mark (pages) = Not applicable Page size (bytes) = 4096 Extent size (pages) = 32 Prefetch size (pages) = 16 Number of containers = 1
要列出容器借浊,我們需要使用以上輸出中的 Tablespace ID:
LIST TABLESPACE CONTAINERS FOR 2
清單 3. LIST TABLESPACE CONTAINERS 命令的輸出
Tablespace Containers for Tablespace 2 Container ID = 0 Name = C:\\DB2\\NODE0000\\SQL00004\\SQLT0002.0 Type = Path
該命令將列出指定表空間中的所有容器。如上所示的路徑指向容器物理上所在的位置萝招。
緩沖池
一個(gè)緩沖池是與單個(gè)數(shù)據(jù)庫相關(guān)聯(lián)的蚂斤,可以被多個(gè)表空間使用。當(dāng)考慮將緩沖池用于一個(gè)或多個(gè)表空間時(shí)槐沼,必須保證表空間頁大小和緩沖池頁大小對(duì)于緩沖池所“服務(wù)”的所有表空間而言都是一樣的曙蒸。一個(gè)表空間只能使用一個(gè)緩沖池。
創(chuàng)建數(shù)據(jù)庫時(shí)母赵,會(huì)創(chuàng)建一個(gè)名為 IBMDEFAULTBP 的缺省緩沖池逸爵,所有的表空間都共享該緩沖池“汲埃可以使用 CREATE BUFFERPOOL 語句添加更多的緩沖池师倔。緩沖池的缺省大小是 BUFFPAGE 數(shù)據(jù)庫配置參數(shù)所指定的大小,但是可以通過在 CREATE BUFFERPOOL 命令中指定 SIZE 關(guān)鍵字來覆蓋該缺省值。足夠的緩沖池大小是數(shù)據(jù)庫擁有良好性能的關(guān)鍵所在趋艘,因?yàn)樗梢詼p少磁盤 I/O 這一最耗時(shí)的操作疲恢。大型緩沖池還會(huì)對(duì)查詢優(yōu)化產(chǎn)生影響,因?yàn)楦嗟墓ぷ骺稍趦?nèi)存中完成瓷胧。
基于塊的緩沖池
V8 允許您留出緩沖池的一部分(最高可達(dá) 98%)用于基于塊的預(yù)取操作显拳。基于塊的 I/O 可以通過將塊讀入相鄰的內(nèi)存區(qū)而不是將它分散裝入單獨(dú)的頁搓萧,來提高預(yù)取操作的效率杂数。每個(gè)緩沖池的塊大小必須相同,并且由 BLOCKSIZE 參數(shù)進(jìn)行控制瘸洛。該值等于塊的大凶嵋啤(單位為頁),從 2 到 256反肋,缺省值為 32那伐。
擴(kuò)展存儲(chǔ)器
DB2 不將擴(kuò)展存儲(chǔ)器用于緩沖區(qū)。但是石蔗,可以用擴(kuò)展存儲(chǔ)器來高速緩存內(nèi)存頁罕邀,使得從內(nèi)存移出頁變得更快。
CREATE BUFFERPOOL 語句的示例
下面是 CREATE BUFFERPOOL 語句的一個(gè)示例:
CREATE BUFFERPOOL BP3 SIZE 2000 PAGESIZE 8K
該緩沖池被分配給上面的 CREATE TABLESPACE 示例上的 USERSPACE3养距,并且在創(chuàng)建表空間之前創(chuàng)建該緩沖池诉探。請注意,緩沖池和表空間的頁大小都是 8K棍厌,兩者是相同的阵具。如果您在創(chuàng)建緩沖池之后創(chuàng)建表空間,則可以省去 CREATE TABLESPACE 語句中的 BUFFER POOL BP3 語法定铜。相反,可以使用 altER TABLESPACE 命令將緩沖池添加到現(xiàn)有的表空間:
ALTER TABLESPACE USERSPACE3 BUFFERPOOL BP3
如何查看緩沖池屬性
通過查詢 SYSCAT.BUFFERPOOLS 系統(tǒng)視圖可以列出緩沖池信息:
SELECT * FROM SYSCAT.BUFFERPOOLS BPNAME BUFFERPOOLID NGNAME NPAGES PAGESIZE ES ------------------ ------------ ------------------ ----------- ----------- -- IBMDEFAULTBP 1 - 250 4096 N 1 record(s) selected.
要找出哪個(gè)緩沖池被分配給了表空間怕敬,請運(yùn)行下面這個(gè)查詢:
SELECT TBSPACE, BUFFERPOOLID FROM SYSCAT.TABLESPACES TBSPACE BUFFERPOOLID ------------------ ------------ SYSCATSPACE 1 TEMPSPACE1 1 USERSPACE1 1 3 record(s) selected.
可以在上一個(gè)查詢中找到 BUFFERPOOLID揣炕,該查詢使您能夠看到每個(gè)表空間與哪個(gè)緩沖池相關(guān)聯(lián)。
數(shù)據(jù)庫如何保存表空間的可視化圖表
既然我們已經(jīng)描述了表空間和緩沖池是什么以及如何創(chuàng)建它們东跪,那么就讓我們研究一下有關(guān)如何在數(shù)據(jù)庫中將它們直觀地組織起來的示例畸陡。
圖 1. 表空間和緩沖池
該數(shù)據(jù)庫有 5 個(gè)表空間:一個(gè)目錄表空間、兩個(gè)常規(guī)表空間虽填、一個(gè)長表空間和一個(gè)系統(tǒng)臨時(shí)表空間丁恭。沒有創(chuàng)建用戶臨時(shí)表空間。另外有 8 個(gè)容器斋日。
在這個(gè)方案中牲览,緩沖池可能如下分配:
將 BP1(4K)分配給 SYSCATSPACE 和 USERSPACE2
將 BP2(8K)分配給 USERSPACE1
將 BP3(32K)分配給 LARGESPACE 和 SYSTEMP1
第 2 節(jié):性能含義
一般而言,在物理設(shè)備上設(shè)計(jì)如何放置表空間和容器時(shí)恶守,目標(biāo)是使 I/O 并行性和緩沖區(qū)利用率達(dá)到最優(yōu)第献。要實(shí)現(xiàn)這個(gè)目標(biāo)贡必,應(yīng)當(dāng)全面了解數(shù)據(jù)庫設(shè)計(jì)和應(yīng)用程序。只有這樣您才能確定類似于下面這樣的問題:將兩張表分隔到不同的設(shè)備會(huì)不會(huì)產(chǎn)生并行 I/O庸毫,或者仔拟,是否應(yīng)當(dāng)在單獨(dú)的表空間中創(chuàng)建表以便可以對(duì)它進(jìn)行完全緩沖。
設(shè)計(jì)新數(shù)據(jù)庫的物理布局應(yīng)當(dāng)從設(shè)計(jì)表空間的組織開始:
- 第一步是確定表設(shè)計(jì)所給出的約束飒赃。這些可能會(huì)導(dǎo)致必須使用多個(gè)常規(guī)表空間利花。
- 第二步是考慮如果讓表空間中的表具有不同的設(shè)置,是否有可能顯著提高性能载佳。
- 一旦作出了一個(gè)試驗(yàn)性的表空間設(shè)計(jì)炒事,那么就必須考慮緩沖池的利用率。這可能會(huì)使前面的表空間設(shè)計(jì)產(chǎn)生一些變化刚盈。
- 最后羡洛,必須給表空間分配容器。
這個(gè)是一個(gè)有反復(fù)的過程藕漱,應(yīng)該通過壓力測試和基準(zhǔn)測試驗(yàn)證該設(shè)計(jì)欲侮。很顯然,實(shí)現(xiàn)最佳的設(shè)計(jì)可能需要花費(fèi)大量精力肋联,并且僅當(dāng)數(shù)據(jù)庫性能必須可能是最佳時(shí)才能證明設(shè)計(jì)是最佳的威蕉。通常:
- 從最簡單的可行設(shè)計(jì)入手。
- 只有根據(jù)測試證明有充分的性能理由時(shí)才增加復(fù)雜性橄仍。
通常韧涨,為了降低管理和保持一個(gè)較為簡單的數(shù)據(jù)庫設(shè)計(jì)的復(fù)雜性,稍微降低一點(diǎn)性能是值得的侮繁。DB2 具有一種非常成熟的資源管理邏輯虑粥,往往不用進(jìn)行精心的設(shè)計(jì)就能產(chǎn)生非常好的性能。
表空間組織
通常應(yīng)該將目錄表空間和系統(tǒng)臨時(shí)表空間作為 SMS 分配宪哩。沒有必要擁有多個(gè)具有相同頁大小的臨時(shí)表空間娩贷,通常只需一個(gè)具有最大頁大小的臨時(shí)表空間就夠了。
突出的問題在于是否要將用戶數(shù)據(jù)分割到多個(gè)表空間中锁孟。一個(gè)考慮因素是頁的利用率彬祖。不能將行分割到不同的頁,因此具有長行的表需要有合適的頁大小品抽。但是储笑,一個(gè)頁上的行不能超過 255 個(gè),因此具有較短行的表不能利用整個(gè)頁圆恤。例如突倍,在頁大小為 32K 的表空間中放置行長度為 12 字節(jié)的表,它大約只能利用每個(gè)頁的 10%(即,(255 行 * 12 字節(jié) + 91 字節(jié)的開銷) / 32k 頁大小 = ~10%)赘方。
如果表很大烧颖,這只是一個(gè)考慮因素,因此浪費(fèi)的空間就非常大窄陡。它還會(huì)使 I/O 和緩存的效率降低炕淮,因?yàn)槊總€(gè)頁的實(shí)際有用內(nèi)容很少。如果可以將表放到具有較小頁的表空間中跳夭,以及可以充分利用較大的頁大小涂圆,那么最常用的訪問方法將確定哪一個(gè)更好。如果通常是順序訪問大量行(該表可能進(jìn)行了群集)币叹,那么比較大的頁大小會(huì)比較有效润歉。如果隨機(jī)訪問行,那么較小的頁大小可以允許 DB2 更好地利用緩沖區(qū)颈抚,因?yàn)橥瑯拥拇鎯?chǔ)區(qū)域可以容納更多頁踩衩。
一旦根據(jù)頁大小對(duì)表進(jìn)行了分組,那么訪問頻率和類型將確定把數(shù)據(jù)進(jìn)一步分組到獨(dú)立的表空間中是否有意義贩汉。每張表根據(jù)自己被最頻繁訪問的方式驱富,可以具有一組最有效的表空間設(shè)置:PAGESIZE、EXTENTSIZE 和 PREFETCHSIZE匹舞。上面已介紹了 PAGESIZE褐鸥。EXTENTSIZE 是在將數(shù)據(jù)寫入到下一個(gè)容器之前寫入到當(dāng)前容器中的數(shù)據(jù)的頁數(shù)(如果表空間中存在多個(gè)容器的話)痊班。
PREFETCHSIZE 指定在執(zhí)行數(shù)據(jù)預(yù)取時(shí)將從表空間讀取的頁數(shù)檐春。當(dāng)數(shù)據(jù)庫管理器確定順序 I/O 是適當(dāng)?shù)暮裰溃⑶掖_定預(yù)取操作可能有助于提高性能時(shí)屋吨,會(huì)使用預(yù)取操作(通常是大型表掃描)。比較好的做法是將 PREFETCHSIZE 值顯式地設(shè)置成表空間的 EXTENTSIZE 值與表空間容器數(shù)的乘積的倍數(shù)勤揩。例如彼硫,如果 EXTENTSIZE 是 32呛谜,并且表空間中有 4 個(gè)容器括丁,那么理想的 PREFETCHSIZE 應(yīng)當(dāng)是 128寒匙、256 等等。如果一個(gè)或多個(gè)頻繁使用的表需要的這組參數(shù)的值不同于那些最適用于表空間其它表的性能的參數(shù)值躏将,那么將這些表放入單獨(dú)的表空間可能會(huì)提高整體性能。
如果預(yù)取操作是表空間中的重要因素考蕾,那么請考慮留出一部分緩沖區(qū)用于基于塊的 I/O祸憋。塊大小應(yīng)當(dāng)?shù)扔?PREFETCHSIZE。
緩沖池的利用率
使用多個(gè)用戶表空間的最重要原因是管理緩沖區(qū)的利用率肖卧。一個(gè)表空間只能與一個(gè)緩沖池相關(guān)聯(lián)蚯窥,而一個(gè)緩沖池可用于多個(gè)表空間。
緩沖池調(diào)優(yōu)的目標(biāo)是幫助 DB2 盡可能好地利用可用于緩沖區(qū)的內(nèi)存。整個(gè)緩沖區(qū)大小對(duì) DB2 性能有巨大影響拦赠,這是因?yàn)榇罅康捻摽梢燥@著地減少 I/O 這一最耗時(shí)的操作巍沙。但是,如果總的緩沖區(qū)大小太大荷鼠,并且沒有足夠的存儲(chǔ)器可用來分配給它們句携,那么將為每種頁大小分配最少的緩沖池,性能就會(huì)急劇下降允乐。要計(jì)算最大的緩沖區(qū)大小矮嫉,DB2、操作系統(tǒng)以及其它任何應(yīng)用程序都必須考慮其它所有存儲(chǔ)器的利用率牍疏。一旦確定了總的可用大小蠢笋,就可以將這個(gè)區(qū)域劃分成不同的緩沖池以提高利用率。如果有一些具有不同頁大小的表空間鳞陨,那么每種頁大小必須至少有一個(gè)緩沖池昨寞。
擁有多個(gè)緩沖池可以將數(shù)據(jù)保存在緩沖區(qū)中。例如厦滤,讓我們假設(shè)一個(gè)數(shù)據(jù)庫有許多頻繁使用的小型表援岩,這些表通常全部都位于緩沖區(qū)中,因此訪問起來就非衬俸Γ快≌危現(xiàn)在讓我們假設(shè)有一個(gè)針對(duì)非常大的表運(yùn)行的查詢,它使用同一個(gè)緩沖池并且需要讀取比總的緩存區(qū)大小還多的頁碘菜。當(dāng)查詢運(yùn)行時(shí)凹蜈,來自這些頻繁使用的小型表的頁將會(huì)丟失,這使得再次需要這些數(shù)據(jù)時(shí)就必須重新讀取它們忍啸。
如果小型表擁有自己的緩沖池仰坦,那么它們就必須擁有自己的表空間,因此大型查詢就不能覆蓋它們的頁计雌。這有可能產(chǎn)生更好的整體系統(tǒng)性能悄晃,雖然這會(huì)對(duì)大型查詢造成一些小的負(fù)面影響。經(jīng)常性地進(jìn)行調(diào)優(yōu)是為了實(shí)現(xiàn)整體的性能提高而在不同的系統(tǒng)功能之間做出的權(quán)衡凿滤。區(qū)分功能的優(yōu)先級(jí)并記住總吞吐量和使用情況妈橄,同時(shí)對(duì)系統(tǒng)性能進(jìn)行調(diào)整,這是非常重要的翁脆。
V8 所引入的新功能能夠在不關(guān)閉數(shù)據(jù)庫的情況下更改緩沖池大小眷蚓。帶有 IMMEDIATE 選項(xiàng)的 altER BUFFERPOOL 語句會(huì)立刻生效,只要數(shù)據(jù)庫共享的內(nèi)存中有足夠的保留空間可以分配給新空間反番∩橙龋可以使用這個(gè)功能叉钥,根據(jù)使用過程中的周期變化(例如從白天的交互式使用轉(zhuǎn)換到夜間的批處理工作)來調(diào)優(yōu)數(shù)據(jù)庫性能。
物理存儲(chǔ)器組織
一旦將表分布到多個(gè)表空間中篙贸,就必須決定它們的物理存儲(chǔ)器投队。表空間可以存儲(chǔ)在多個(gè)容器中,并且它可以是 SMS 或 DMS爵川。SMS 更容易管理敷鸦,對(duì)于包含許多不同的小型表的表空間(例如目錄表空間),尤其是那些包含 LOB 的表的表空間而言雁芙,SMS 可能是個(gè)不錯(cuò)的選擇轧膘。為了降低每次一頁地?cái)U(kuò)展 SMS 容器的開銷,應(yīng)當(dāng)運(yùn)行 db2empfa命令兔甘。這會(huì)將數(shù)據(jù)庫配置參數(shù) MULTIPAGE_ALLOC 的值設(shè)置成 YES谎碍。
DMS 通常有更好的性能,并且它提供了分別地存儲(chǔ)索引和 LOB 數(shù)據(jù)的靈活性洞焙。通常應(yīng)當(dāng)將一個(gè)表空間的多個(gè)容器分開存放在單獨(dú)的物理卷上蟆淀。這可以提高某些 I/O 的并行性。當(dāng)有多個(gè)用戶表空間和多個(gè)設(shè)備時(shí)澡匪,應(yīng)當(dāng)考慮應(yīng)用程序邏輯熔任,這樣就可以盡可能平均地在這些設(shè)備上分配工作負(fù)載。
RAID 設(shè)備有它們自己的特殊考慮唁情。EXTENTSIZE 應(yīng)該等于 RAID 條帶大小或者是它的倍數(shù)疑苔。PREFETCHSIZE 應(yīng)該等于 RAID 條帶大小乘以 RAID 并行設(shè)備數(shù)(或者等于該乘積的倍數(shù)),這個(gè)值應(yīng)該是 EXTENTSIZE 的倍數(shù)甸鸟。DB2 提供了自己的注冊表變量惦费,允許您增強(qiáng)您的特定環(huán)境。通過執(zhí)行下面這個(gè)命令抢韭,可以在一個(gè)容器中啟用 I/O 并行性:
db2set DB2_PARALLEL_IO=*
另一個(gè)注冊表變量 DB2_STRIPED_CONTAINERS=ON 可以將容器標(biāo)記大小從一個(gè)頁更改成整個(gè)擴(kuò)展塊薪贫,因此就能使表空間擴(kuò)展塊和 RAID 條帶一致。
至于性能評(píng)估的其它方面刻恭,要知道某個(gè)更改是否有益瞧省,唯一穩(wěn)妥的方法就是進(jìn)行基準(zhǔn)測試。如果物理組織發(fā)生了更改鳍贾,那么執(zhí)行該任務(wù)稍微有些復(fù)雜鞍匾,這是因?yàn)檫@時(shí)要更改表空間必須要付出相當(dāng)大的精力。最實(shí)用的方法就是減少設(shè)計(jì)階段中的案例數(shù)骑科,這樣的話稍后需要進(jìn)行基準(zhǔn)測試的案例就比較少了橡淑。只有在性能極其重要并且不同的設(shè)計(jì)之間有可能存在顯著的性能差別時(shí),才值得花時(shí)間和精力進(jìn)行嚴(yán)格的基準(zhǔn)測試來比較設(shè)計(jì)纵散。應(yīng)當(dāng)把重點(diǎn)放在緩沖池上梳码,確保沒有將它們分配到虛擬內(nèi)存中,并確保以最有效的方式利用它們伍掀。
有關(guān)移動(dòng)數(shù)據(jù)庫的考慮事項(xiàng)
在將數(shù)據(jù)庫移到另一個(gè)系統(tǒng)之前掰茶,始終應(yīng)該重新評(píng)估它的調(diào)優(yōu)參數(shù)和物理組織,即便這些系統(tǒng)是同一種平臺(tái)也應(yīng)如此蜜笤。在實(shí)際情況中濒蒋,DBA 將經(jīng)過良好調(diào)優(yōu)的數(shù)據(jù)庫從具有 1 GB 內(nèi)存的 Windows 服務(wù)器復(fù)制到具有 256 MB 內(nèi)存的膝上型計(jì)算機(jī)中。在服務(wù)器上進(jìn)行連接所花的時(shí)間小于一秒把兔,而在膝上型計(jì)算機(jī)中卻要用掉 45 分鐘沪伙。通過減少緩沖池大小和其它內(nèi)存參數(shù)就能解決這個(gè)問題。
如果平臺(tái)不一樣县好,那么這個(gè)問題就變得更難了围橡。即使是在 UNIX 和 Windows 之間進(jìn)行移動(dòng),在一個(gè)系統(tǒng)上已是最佳性能缕贡,在另一個(gè)系統(tǒng)上卻未必如此翁授。如果復(fù)制數(shù)據(jù)庫是為了進(jìn)行生產(chǎn),那么應(yīng)當(dāng)重復(fù)調(diào)優(yōu)過程晾咪。如果必須將數(shù)據(jù)庫移到 zSeries?收擦,那么這里討論的某些內(nèi)容則不適用,而應(yīng)該參考有關(guān)的手冊和紅皮書谍倦。在 iSeries 系統(tǒng)上塞赂,物理設(shè)置和調(diào)優(yōu)是在數(shù)據(jù)庫環(huán)境之外一起完成的,應(yīng)當(dāng)參考 iSeries? 系統(tǒng)管理手冊昼蛀。
結(jié)束語
我們在本文中介紹了許多內(nèi)容宴猾,但是您應(yīng)當(dāng)了解的有關(guān)數(shù)據(jù)庫設(shè)計(jì)和性能的知識(shí)決不僅限于此。我們著重討論了數(shù)據(jù)庫設(shè)計(jì)的兩個(gè)比較大的問題曹洽,而沒有深入研究查詢優(yōu)化和應(yīng)用程序考慮事項(xiàng)的細(xì)節(jié)鳍置。設(shè)計(jì)數(shù)據(jù)庫是第一位的,因?yàn)檫@是其它所有事情的前提送淆,因此您的初始規(guī)劃應(yīng)該非常全面税产。為了方便您的學(xué)習(xí),我們在下面提供了其它聯(lián)機(jī)參考資料偷崩,這樣您就可以繼續(xù)學(xué)習(xí)有關(guān)本主題的內(nèi)容辟拷。
本文轉(zhuǎn)載自IBM官方網(wǎng)站,原文地址:https://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html