【DB2】DB2基礎(chǔ)_表空間和緩沖池

簡介

對(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. 表空間和緩沖池

wieser1.gif

該數(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ì)表空間的組織開始:

  1. 第一步是確定表設(shè)計(jì)所給出的約束飒赃。這些可能會(huì)導(dǎo)致必須使用多個(gè)常規(guī)表空間利花。
  2. 第二步是考慮如果讓表空間中的表具有不同的設(shè)置,是否有可能顯著提高性能载佳。
  3. 一旦作出了一個(gè)試驗(yàn)性的表空間設(shè)計(jì)炒事,那么就必須考慮緩沖池的利用率。這可能會(huì)使前面的表空間設(shè)計(jì)產(chǎn)生一些變化刚盈。
  4. 最后羡洛,必須給表空間分配容器。

這個(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阐斜,一起剝皮案震驚了整個(gè)濱河市衫冻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谒出,老刑警劉巖隅俘,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邻奠,死亡現(xiàn)場離奇詭異,居然都是意外死亡为居,警方通過查閱死者的電腦和手機(jī)碌宴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒙畴,“玉大人贰镣,你說我怎么就攤上這事∩拍” “怎么了碑隆?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蹬音。 經(jīng)常有香客問我上煤,道長,這世上最難降的妖魔是什么祟绊? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任楼入,我火速辦了婚禮,結(jié)果婚禮上牧抽,老公的妹妹穿的比我還像新娘嘉熊。我一直安慰自己,他們只是感情好扬舒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布阐肤。 她就那樣靜靜地躺著,像睡著了一般讲坎。 火紅的嫁衣襯著肌膚如雪孕惜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天晨炕,我揣著相機(jī)與錄音衫画,去河邊找鬼。 笑死瓮栗,一個(gè)胖子當(dāng)著我的面吹牛削罩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播费奸,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼弥激,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愿阐?” 一聲冷哼從身側(cè)響起微服,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缨历,沒想到半個(gè)月后以蕴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糙麦,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年丛肮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喳资。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腾供,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鲜滩,到底是詐尸還是另有隱情伴鳖,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布徙硅,位于F島的核電站榜聂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嗓蘑。R本人自食惡果不足惜须肆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桩皿。 院中可真熱鬧豌汇,春花似錦、人聲如沸泄隔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佛嬉。三九已至逻澳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間暖呕,已是汗流浹背斜做。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湾揽,地道東北人瓤逼。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像钝腺,于是被迫代替她去往敵國和親抛姑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容