文章詳情頁(yè)
讓DB2數(shù)據(jù)庫(kù)使用所有內(nèi)存的方法(1)
瀏覽:3日期:2023-11-10 15:24:09
簡(jiǎn)介曾聽說過創(chuàng)造性壓力嗎?它屬于那些偽精神哲學(xué)之一,它宣稱互相作用的力會(huì)創(chuàng)造出作為斗爭(zhēng)副產(chǎn)品的事物。這有點(diǎn)象小人書里面善與惡之間的斗爭(zhēng)。現(xiàn)在,我不想說所有軟件工程師都是好人,或者所有硬件工程師都是壞人,但是在他們之間存在著創(chuàng)造性壓力。正如 Joseph Campbell 所說的,“不要讓您對(duì)科學(xué)不切實(shí)際的憎惡迷惑了您的雙眼,以至看不到計(jì)算機(jī)芯片中的光輝境界。假如整個(gè)表象浪潮一樣涌出磁盤并沖入內(nèi)存,那還能有什么比這更浪漫呢?有時(shí)侯,軟件工程師會(huì)哀嘆硬件發(fā)展的步伐太緩慢了:機(jī)器磁盤速度太慢、內(nèi)存組太小并且時(shí)鐘速度象蝸牛爬行。(當(dāng)硬件發(fā)展趕上的時(shí)候,可能我們會(huì)忘記 Java™ 應(yīng)用程序曾經(jīng)是那么慢。)當(dāng)新一代硬件出現(xiàn)時(shí),操作系統(tǒng)首先適應(yīng),但留給用戶的卻是,它們只能用 32 位體系架構(gòu)運(yùn)行 16 位或(氣喘吁吁的)8 位 DOS 應(yīng)用程序的痛苦。現(xiàn)在壓力轉(zhuǎn)到了軟件工程師頭上:他們什么時(shí)候才會(huì)重新編譯應(yīng)用程序并利用新硬件所提供的新數(shù)據(jù)類型和內(nèi)存可尋址能力呢?在最終的分析中,您將在 8086 上運(yùn)行的 BASIC 與在 24 路 SMP 上運(yùn)行的 C++ 進(jìn)行比較時(shí),運(yùn)行“Hello World程序所花費(fèi)的時(shí)間大約與編寫該程序所花費(fèi)的時(shí)間一樣長(zhǎng)。但是,數(shù)據(jù)庫(kù)所要做的遠(yuǎn)不止是要向顯示器輸出“Hello World。與 Web服務(wù)器軟件期望更高速線路一樣,數(shù)據(jù)庫(kù)軟件期望從磁盤速度、容量、可尋址內(nèi)存的每次升級(jí)中盡可能獲得好處。盡管應(yīng)用程序程序員可能會(huì)抱怨必須為 32 位機(jī)器重新編譯 16 位程序(它已經(jīng)運(yùn)行良好了),但是數(shù)據(jù)庫(kù)工程師喜歡這樣的想法:在將數(shù)據(jù)排序、聚集或發(fā)送給用戶之前把它保存在內(nèi)存中而不是磁盤上。I/O 是如此眾多要求過高工作負(fù)載的殺手 — 這正是您將 1 TB 的數(shù)據(jù)分散到 5 TB 的磁盤上的原因(更多的磁盤 = 更多的軸,這意味著更多并行的 I/O,至少在基準(zhǔn)測(cè)試世界中是這樣)。 123456下一頁(yè) 現(xiàn)在,在 RISC 和 Sparc 世界中,64 位體系架構(gòu)正逐步成為標(biāo)準(zhǔn),它答應(yīng)商業(yè)性 UNIX®(如 AIX®、HP-UX 和 Solaris 等)為您喜愛的關(guān)系數(shù)據(jù)庫(kù)提供大量?jī)?nèi)存。32 位內(nèi)存的可尋址能力大約等于 4 GB,而許多 UNIX 機(jī)器裝有 20 到 100 GB 內(nèi)存,您肯定希望使用這樣大的內(nèi)存。Intel 世界也不落后多少:現(xiàn)在,操作系統(tǒng)、編譯器和數(shù)據(jù)庫(kù)軟件實(shí)驗(yàn)室里,正在 64 位 Intel 芯片上運(yùn)行的 Linux 和 Windows 2000 是一個(gè)現(xiàn)實(shí),而且不久會(huì)在您四周的網(wǎng)站上銷售。那么,假如硬件和操作系統(tǒng)都已經(jīng)為使用巨大的內(nèi)存做好了預(yù)備,并且數(shù)據(jù)庫(kù)也能夠利用大內(nèi)存,那么您如何將它們結(jié)合起來并使之工作呢?使用 DB2® 版本 7,首先要弄清楚的是,在內(nèi)部,DB2 假設(shè)使用 32 位內(nèi)存和硬件。要利用更大的內(nèi)存,必須告訴 DB2 可以使用它以及如何使用它。請(qǐng)勿責(zé)備 DB2 — 大多數(shù) DB2 客戶機(jī)和許多 DB2服務(wù)器在未來數(shù)年中將運(yùn)行在 32 位 Intel 機(jī)器上。并且即使 DB2 在您機(jī)器上檢測(cè)到有 96 GB 內(nèi)存,誰(shuí)又能肯定您希望 DB2 使用所有內(nèi)存,而不是與其它應(yīng)用程序共享這個(gè)內(nèi)存呢?當(dāng)使用這種大內(nèi)存時(shí),您有幾種選擇。最顯而易見的選擇是創(chuàng)建 64 位 DB2 實(shí)例。現(xiàn)在,AIX、Solaris 和 HP-UX 上的 DB2 版本 7 都支持這種操作。假如您擁有版本 7.1,則必須下載修訂包 1 以安裝 64 位 DB2 庫(kù)。假如您擁有版本 7.2 或更新版本,則不必為了創(chuàng)建 64 位 DB2 實(shí)例而安裝修訂包。要?jiǎng)?chuàng)建 64 位 DB2 實(shí)例,可以使用 db2icrt 命令,并指定參數(shù) -w 的值為 64。例如:db2icrt -w 64 -u db2fenc1 db2inst1描述 64 位環(huán)境中 DB2 使用的手冊(cè)位于:http://www-4.ibm.com/cgi-bin/db2www/data/db2/udb/winos2unix/support/document.d2w/report?fn=db2q9e71frm3toc.htm 上一頁(yè)123456下一頁(yè) 1 + 1 = 2。2 的 32 次方 = 極大的數(shù)。每個(gè) 32 位 DB2 實(shí)例能夠?qū)?4 GB 內(nèi)存尋址。通常,您希望將大部分內(nèi)存給緩沖池專用。但是,AIX、HP-UX 和 Windows 上的內(nèi)存分段會(huì)將最大緩沖池的大小限制在 4 GB 以內(nèi)。即使是在 32 位世界中擁有十分干凈的內(nèi)存模型的 Solaris 上,用于 DB2 緩沖池的內(nèi)存也不能超過 3.35 GB;4 GB 內(nèi)存空間的其余內(nèi)存必須專用于 DB2 的其它共享內(nèi)存用途。(幸運(yùn)的是,對(duì)于 64 位世界中的所有操作系統(tǒng),內(nèi)存模型都更干凈。)在 HP-UX 上,32 位 DB2 實(shí)例所能夠創(chuàng)建的最大緩沖池大約是 800 MB。在 HP-UX 上,只有通過使用 32 位 HP-UX 上的 Memory Windows 來運(yùn)行多個(gè)實(shí)例,才能使用 1 GB 以上的緩沖池。(DB2 發(fā)行說明(Release Notes)中描述了 HP Memory Windows。)在 Windows 上,緩沖池被限制為 3 GB,AIX 上是 1.75 GB,而 Linux 上大約是 1 GB。在運(yùn)行 32 位 DB2 的大內(nèi)存系統(tǒng)上,要將大量?jī)?nèi)存給予緩沖池,最簡(jiǎn)單方式就是在一個(gè) DB2 企業(yè)擴(kuò)展版(Enterprise-Extended Edition (EEE))配置中運(yùn)行多個(gè)邏輯 DB2 實(shí)例。只需要運(yùn)行操作系統(tǒng)的一個(gè)實(shí)例,這將有助于節(jié)省開銷和答應(yīng)多個(gè) DB2 實(shí)例之間通過共享內(nèi)存而不是通過 TCP/IP 或通信交換機(jī)來彼此通信。使用 DB2 的無(wú)共享體系結(jié)構(gòu),每個(gè)實(shí)例可以在它自己的數(shù)據(jù)庫(kù)分區(qū)之內(nèi)愉快地對(duì) 4 GB 內(nèi)存尋址。在大多數(shù) DB2 TPC-H 基準(zhǔn)測(cè)試中 — 它通常讓 DB2 EEE 在規(guī)模達(dá) 300 GB 或更大的數(shù)據(jù)庫(kù)上運(yùn)行決策支持查詢 — 一個(gè)大型 SMP 為每個(gè) DB2 節(jié)點(diǎn)劃分多至 4 GB 內(nèi)存(每個(gè)節(jié)點(diǎn)都是一個(gè)運(yùn)行它自己的 DB2 實(shí)例的數(shù)據(jù)庫(kù)分區(qū))。DB2 還可以使用其它三種方法來利用大內(nèi)存機(jī)器。在 AIX、Solaris 和 Windows 上,DB2 支持?jǐn)U充存儲(chǔ)器(Extended Storage)(也稱為 ESTORE)。這答應(yīng) DB2 將超過 32 位內(nèi)存模型中最大可用內(nèi)存的內(nèi)存用于系統(tǒng)臨時(shí)表(用于排序)和只讀用戶數(shù)據(jù)。在 DB2 從磁盤獲取數(shù)據(jù)時(shí)就由 DB2 判定哪些數(shù)據(jù)是可以認(rèn)為是只讀,但是需要配置 DB2 以使用擴(kuò)充存儲(chǔ)器。 上一頁(yè)123456下一頁(yè) 讓我們考慮一種典型情況:您正在設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù),在其中希望將一個(gè)表盡可能多地放入內(nèi)存。首先,更新數(shù)據(jù)庫(kù)治理器配置并告訴它要使用多少擴(kuò)充存儲(chǔ)段(num_estore_segs)。這個(gè)值的缺省設(shè)置為零。n 取多大值將取決于表有多大、可用的內(nèi)存有多少以及您希望這個(gè)特定表用多少內(nèi)存。假定我們正在使用 Solaris,它有 6 GB 內(nèi)存 — 在 4 GB 內(nèi)存空間之上的 2GB 內(nèi)存用于擴(kuò)充存儲(chǔ)器(也稱為 estore):update db cfg for sample using num_estore_segs n用“擴(kuò)充存儲(chǔ)器存儲(chǔ)段大小(estore_seg_sz)數(shù)據(jù)庫(kù)配置參數(shù)來定義 estore 段的大小:update db cfg for sample using estore_seg_sz 32000現(xiàn)在您創(chuàng)建了一個(gè)緩沖池。對(duì)于本示例,我們將使用 8K 頁(yè)面大小,盡管 16K 和 32K 頁(yè)面大小也是答應(yīng)的。(假如是在 Windows 上,要使用 2GB 以上的內(nèi)存,則必須使用大于 4K 的頁(yè)面大小。)必須為擴(kuò)充存儲(chǔ)器啟用緩沖池,可以使用 EXTENDED STORAGE 要害字做到。 highmem 是我為這個(gè)緩沖池選擇的名稱。其大小 n 取決于您希望這個(gè)緩沖池占用的內(nèi)存數(shù)量:CREATE BUFFERPOOL highmem SIZE nPAGESIZE 8K EXTENDED STORAGE現(xiàn)在創(chuàng)建一個(gè)表空間,并將它分配到這個(gè)緩沖池:CREATE TABLESPACE highmem_tbsp PAGESIZE 8KMANAGED BY SYSTEMUSING ('C:highmemdir)BUFFERPOOL highmem注:表空間的頁(yè)面大小必須與該緩沖池的頁(yè)面大小相匹配,并且該緩沖池由名稱來標(biāo)識(shí)。假如您只在這個(gè)表空間中創(chuàng)建一個(gè)表,而這個(gè)表空間又是該緩沖池中唯一的表空間,那么當(dāng)訪問這個(gè)表中的數(shù)據(jù)時(shí),就增大了數(shù)據(jù)留在內(nèi)存中的機(jī)會(huì)。但對(duì)表進(jìn)行排序時(shí)仍可能會(huì)溢出,因此請(qǐng)確保有一個(gè)已創(chuàng)建了相匹配的頁(yè)面大小的系統(tǒng)臨時(shí)表空間: 上一頁(yè)123456下一頁(yè) CREATE SYSTEM TEMPORARY TABLESPACE highmem_temp PAGESIZE 8KMANAGED BY SYSTEMUSING ('C:highmemtemp') BUFFERPOOL highmem現(xiàn)在預(yù)備在該表空間中創(chuàng)建表:create table memory_hog (col1 int) in highmem_tbsp部分還是全部 AWE?由您來判定。Windows 2000 能夠通過 Microsoft Address Windowing Extensions(AWE)在 32 位世界中映射越過 4 GB 內(nèi)存界線的數(shù)據(jù)。DB2 版本 7.2(或帶有修訂包 3 的版本 7.1)支持這個(gè)特性。Windows 2000 Advanced Server 最多支持 8 GB 內(nèi)存,而 Windows 2000 Data Center Server 最多支持 64 GB 內(nèi)存。在最終的分析中,您可能需要做一個(gè)選擇,這個(gè)選擇與高性能數(shù)據(jù)庫(kù)設(shè)計(jì)所需的顆粒度是背道而馳的。可以假定,您將考慮的用于上述技術(shù)的數(shù)據(jù)庫(kù)需要最佳性能 — 最終,假如性能不重要,為什么要將數(shù)據(jù)庫(kù)放到擁有大量?jī)?nèi)存的機(jī)器上?此類數(shù)據(jù)庫(kù)傾向于將用戶數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)治理存儲(chǔ)器(Database Managed Storage (DMS))中,將原始設(shè)備(raw device)用作容器。按照大多數(shù)人的意見:假如您治理一個(gè)具有眾多概要文件和用戶要求很高的數(shù)據(jù)庫(kù),那么,需要投入大量時(shí)間對(duì)數(shù)據(jù)庫(kù)進(jìn)行調(diào)整和計(jì)劃,這樣才能猜測(cè)數(shù)據(jù)的增長(zhǎng)并在原始設(shè)備容器上分配足夠的空間。用這種思想,可以知道系統(tǒng)治理存儲(chǔ)器(SMS)表空間只適于系統(tǒng)數(shù)據(jù)(臨時(shí)表空間和目錄表空間)和必須對(duì)其進(jìn)行少量維護(hù)的數(shù)據(jù)庫(kù),因?yàn)椋@兩者數(shù)量太多,因而無(wú)法保證對(duì)其設(shè)計(jì)和維護(hù)進(jìn)行大量投資。假定您同時(shí)面臨兩種最糟糕的情況:一方面數(shù)據(jù)庫(kù)必須迅速,另一方面您又無(wú)法猜測(cè)其中的數(shù)據(jù)增長(zhǎng)或去花費(fèi)大量時(shí)間對(duì)其進(jìn)行維護(hù),那怎么辦呢?您可能會(huì)問:假如有些事情很重要,為什么不將 DBA 資源用于它呢?但老板并不總是理性的。幸運(yùn)的是,關(guān)系數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)師們并不是僅有的花費(fèi)大量時(shí)間決定如何使用大內(nèi)存機(jī)器的人:操作系統(tǒng)專家也在研究這個(gè)問題。您將需要做一個(gè)信念上的飛躍,將所有數(shù)據(jù)放置到 SMS 表空間,并將文件系統(tǒng)用作容器。(也可以使用 DMS 來做這件事,但是在為容器定義文件大小時(shí),還必須計(jì)劃數(shù)據(jù)增長(zhǎng))。現(xiàn)在,查看所有 4 GB 內(nèi)存地址以上的空間并將它用于文件系統(tǒng)高速緩存,是操作系統(tǒng)的任務(wù)。幸運(yùn)的是,由于大多數(shù)數(shù)據(jù)庫(kù)運(yùn)行在大型 SMP 上,并且能夠通過利用應(yīng)用程序來達(dá)到其性能目標(biāo),這推動(dòng)了系統(tǒng)設(shè)計(jì)師們挖掘出大內(nèi)存機(jī)器的潛能,以將頻繁訪問的數(shù)據(jù)保存在內(nèi)存中。而這正是人們希望數(shù)據(jù)庫(kù)緩沖池所做的:將經(jīng)常訪問的數(shù)據(jù)保存在內(nèi)存中,而其余的僅留在磁盤上。 上一頁(yè)123456下一頁(yè) 別在家里嘗試這個(gè)操作!(在工作中、在老板的系統(tǒng)上嘗試。)也許在結(jié)束關(guān)于內(nèi)存的文章之前,有必要提醒您不要忘記系統(tǒng)里的其余部分。究竟,假如您有 96 GB 內(nèi)存,而磁盤上就可能有不止 96 GB 的數(shù)據(jù) — 正等著吞沒您的系統(tǒng)并將它送入頁(yè)面調(diào)度的痛苦狀態(tài)。本文的重點(diǎn)是盡可能多地使用內(nèi)存。究竟,您為它花了錢,那么為什么不使用它并使之物有所值呢?按照這種思想,不要忘記您購(gòu)買的其余硬件。您希望軟件使用所有的內(nèi)存,但也希望所有處理器做它們的那部分工作 — 對(duì)所有的磁盤也是如此。正如在 1 MB PC 上將應(yīng)用程序限制到 640 K 內(nèi)存不能充分利用可用資源一樣(因此比它應(yīng)有的速度要慢),假如您的一個(gè)處理器以 100% 運(yùn)行,而其它以 25% 運(yùn)行,這時(shí),您的處境就很尷尬了 — 一個(gè)處理器的工作負(fù)載已達(dá)到了極限,而其余處理器什么也不做。(這種情景就好象您在建筑工地上看到一個(gè)人正在拿鐵鍬工作,而他的同事卻袖手旁觀。)這正是 DB2 EEE 可以幫助您的地方;它的無(wú)共享體系結(jié)構(gòu)被設(shè)計(jì)成簡(jiǎn)潔地將所有工作和數(shù)據(jù)公平地劃分給可以使用的內(nèi)存、CPU 和磁盤。出于這個(gè)原因,對(duì)于決策支持無(wú)共享體系結(jié)構(gòu)是很理想的。對(duì)于那些事務(wù)型工作負(fù)載,您必須監(jiān)視熱點(diǎn):假如發(fā)生了 CPU 或磁盤中的一個(gè)子集工作過重的現(xiàn)象,為什么會(huì)發(fā)生這種現(xiàn)象呢?是因?yàn)樗腥蝿?wù)繁重的客戶機(jī)都連接到同一節(jié)點(diǎn)了嗎?幸運(yùn)的是,EEE 答應(yīng)您將客戶機(jī)連接分布到所有節(jié)點(diǎn)。是否應(yīng)該將數(shù)據(jù)移到這些節(jié)點(diǎn)上的許多小表中,這樣在進(jìn)行更新操作時(shí),就避免了對(duì)分布在所有節(jié)點(diǎn)的一個(gè)大表進(jìn)行操作的情況。小表的缺點(diǎn)在于:當(dāng)您希望得到一個(gè)需要來自每個(gè)節(jié)點(diǎn)上行的結(jié)果集時(shí),必須進(jìn)行 UNION 操作。還有,不要怕在無(wú)共享體系結(jié)構(gòu)上運(yùn)行 OLTP。在撰寫本文時(shí)(2001 年 4 月),TPC-C 測(cè)試結(jié)果表明:前六名都是集群的無(wú)共享數(shù)據(jù)庫(kù)。工作負(fù)載平衡還意味著將表空間分布到多個(gè)磁盤,這樣多個(gè)磁盤可以同時(shí)返回?cái)?shù)據(jù),因而也就啟用了并行 I/O。這里,在三個(gè)變量之間存在創(chuàng)造性壓力:磁盤、內(nèi)存和處理器。運(yùn)氣好的話,您的每種資源都充足,并且可以在它們之間進(jìn)行工作負(fù)載平衡來構(gòu)建一個(gè)系統(tǒng),對(duì)于您所花費(fèi)的時(shí)間和投資的金錢,這個(gè)系統(tǒng)是物有所值的。至于還沒有使用的硬件呢?唔,至少它使硬件銷售代表掙得大筆傭金可以到夏威夷度假。而且,假如沒有其它原因,那么您是否曾發(fā)現(xiàn)自己在夏威夷釣魚而您的小艇和海浪搏斗時(shí),這些額外的硬件和一根繩索就會(huì)形成一個(gè)可靠的錨。關(guān)于作者Blair Adamache 是 IBM多倫多實(shí)驗(yàn)室里有十七年工作經(jīng)驗(yàn)的老手。他相信假如從 1970 年到 1995 年的每次棒球賽都統(tǒng)計(jì)到一個(gè)關(guān)系表而每次投擲都占一行的話,那么我們將可以證實(shí) Dwight Evans 和 Bobby Grich 應(yīng)當(dāng)進(jìn)棒球名人堂(Baseball Hall of Fame)。 本文最初發(fā)表于 DB2 開發(fā)者園地,須經(jīng)許可才能轉(zhuǎn)載。本文所表達(dá)的是作者的觀點(diǎn),而非 IBM 觀點(diǎn)。 上一頁(yè)123456
標(biāo)簽:
DB2
數(shù)據(jù)庫(kù)
排行榜
