宣傳語
舞動DB2系列
本書是國內第一本IBM原廠設計與性能最佳化專著!
首次提出PAT性能最佳化方法學,詮釋了DB2最新設計技術。
電信金融等行業經典實戰案例。
IBM信息管理開發部總經理吉燕勇推薦序
IBM DB2開發部資深經理乾毅民推薦序
IBM信息管理首席架構師陳奇博士任技術顧問
內 容 簡 介
本書原汁原味地展示了DB2設計和最佳化技術,深入剖析了DB2的工作原理。全書分為4部分,共11章。
第一部分解析資料庫性能的本質問題。第二部分從設計高性能資料庫的角度,詳細介紹如何使用DB2資料庫設計高質量的套用系統,內容包括DB2資料庫邏輯設計、DB2資料庫物理設計、DB2 pureXML資料庫設計及DB2工作負載設計。第三部分介紹如何最佳化DB2資料庫,內容包括性能監控及參數調整、SQL語句最佳化策略、鎖和日誌最佳化等。第四部分闡述DB2高級性能加速技術,主要包括DB2 pureScale集群和solidDB高速快取加速。
附錄部分列出了常用監控命令用法和縮略語釋義,還特別提供了PAT樹的放大圖,供讀者進行資料庫性能最佳化時使用。
本書適合DB2資料庫設計人員、DBA、資料庫性能分析人員、資料庫開發人員、運維人員及套用開發工程師閱讀和參考,也可用做高校相關專業或培訓班的教材。
推薦序一
兩千多年前的戰國時代,信息記錄在竹簡上。從此信息文明更新換代。而最近30年發生的信息爆炸,使世界發展步伐加快,社會變化日新月異。在剛過去的經濟危機中,IBM逆勢取得了驕人成績,繼續保持了優勢地位,並緊緊把握了中國信息發展的時代脈搏。而信息管理(IM),作為IBM最重要的軟體品牌之一,已成為IBM近年來投入最大的領域。在過去5年間,IBM在這一領域僅在收購最新技術上的花費金額就超過120億美元。
2010年10月在拉斯維加斯舉行的“2010 IBM IOD全球大會”上,信息隨需應變(IOD)的創新理念及豐富的“智慧”產品吸引了超過9000名來自世界各地、各行各業的代表參加。與往年相比,這次峰會眾多來自中國的面孔增加了很多。在隨後舉行的客戶座談和用戶研討會上,我們更希望聽到來自中國客戶的聲音。可喜的是,IBM在中國的熱情投入換來了中國客戶的傾情讚譽和堅定支持;可憂的是,中國信息管理的聲音不如期待中的那樣響亮,這與中國近年來飛速發展的信息技術產業和市場規模是極不相稱的。究其原因,中國的信息管理領域起步晚、經驗還需積累是一方面,但最重要的因素就是中國本土缺乏優秀的技術人才儲備,這導致在這一領域的高端人才十分匱乏,這必會成為中國信息產業走向輝煌的巨大障礙。
IBM中國開發中心經過十年的積累和沉澱,已經培養建立起了一支具有精湛技術、熟悉中國市場和融合全球信息技術的優秀團隊。這支團隊通過堅持不懈、熱情執著的努力,已成功伴隨中國的客戶應對信息社會的巨大挑戰,並獲得了飛躍式的發展。我們有能力,也深感有必要把先進的信息管理技術和理念進一步傳播給中國廣大的技術人員。這本由DB2資深工程師撰寫的書,是信息管理領域的一朵奇葩,專注於資料庫設計與性能最佳化方面,內容非常全面,定位非常準確,方法非常實用,相信她能幫助中國的高端信息管理技術人才更上一層樓。
IBM中國開發中心 信息管理產品開發部
總經理 吉燕勇
2010年11月25日
推薦序二
自從埃德加·考特(Edgar F. Codd)在1970年發明關係資料庫以來,IBM在資料庫技術的研究和開發方面一直處於世界領先地位。DB2資料庫是IBM公司數據管理產品線上最知名也是最成功的產品,除了可以運行於大型主機環境外,也適用於多種開放式平台。近年來,IBM加大了DB2研發在中國開發中心的投資,目前已培養了一大批參與DB2產品核心開發、客戶技術支持和服務的優秀工程師。
DB2資料庫在中國取得了非常廣泛的套用,在金融、電信、政府、製造和零售等行業都有很多成功的客戶。然而我們發現的一個問題是:在國內的廣大用戶中,對DB2精通的人還比較少,影響了DB2產品的使用。DB2生態系統的繁榮依賴於用戶、合作夥伴和IBM的共同努力,如果沒有廣大DB2用戶技術水平的提升,DB2生態系統的繁榮就很難實現。因此我們的一個重要任務就是要通過各種方式和途徑來推廣DB2產品技術。
隨著企業信息套用系統越來越複雜,用戶量和數據量正變得日益巨大,這對設計人員設計高質量的資料庫及DBA最佳化資料庫提出了嚴峻的挑戰。本書就是為了解決這個問題而誕生的。在這本書中,不僅包括了DB2經典設計和最佳化方法,還涵蓋了DB2最新設計和最佳化技術,例如表分區、工作負載設計、pureXML設計、pureScale集群、solidDB高速快取等。特別是為了幫助讀者掌握性能最佳化技術,還提出了一套基於PAT樹的性能最佳化方法系統。
本書由來自DB2的資深工程師編寫,原汁原味地展示了DB2設計和最佳化技術,深入剖析了DB2內部工作原理。在為全國各地的IBM合作夥伴培訓DB2資料庫期間,作者更深入地了解到DB2用戶在學習中遇到的困難。另外,作者具有為政府、電信、金融等行業客戶做資料庫遷移方面的諮詢和實施經驗,充分了解生產環境中客戶遇到的實際問題。
上面的一切使得本書能想讀者之所想,寫讀者之所需。
IBM中國開發中心DB2開發
資深經理 乾毅民
2010年12月6日
推薦序三
心有多大,舞台就有多大。當我看到這本書的初稿時,立刻被書名所吸引。“舞動DB2”幾個字,儘管還未經過美工處理,我已經意識到作者心懷天下,志存高遠。而當我接連讀完第1章和第2章,我又發現作者不但目標長遠,下的功夫也極深。第1章總述資料庫設計與性能最佳化,高屋建瓴般地提出了顛覆性的PAT方法學。第2章相對於傳統性能分析方法,以電信行業的經營分析系統為例,全面展現了性能問題分析定位體系,其高度的實用性著實令人嘆服。而案例分析部分環環緊扣,步步精彩。貫穿整本書的線索使我迫不及待地追逐一個又一個的疑問,一直讀過數百頁。我不得不驚嘆,這本書本身就是一個完整的理論體系,擴能長龍飛舞,縮能穩如泰山。
我也不得不說起當今的一些資料庫圖書,更像在寫教材,尋章摘句,呆板無趣。普遍浮躁的學術氛圍造就了一批蒼白無力的技術書籍,這樣的平庸之作導致讀者從一開始就迷惑,進而迷失,讀到最後是一片迷茫。
在本書中,我們始終能讀出作者清晰的思路,作者在這方面確實投入了巨大的精力。春節剛過,王飛鵬在為書制定目錄時,嚴謹的學術風格就展現了出來——他邀請了多位技術專家進行評審,為其嚴格把關,為讀者負責。從選題結構上就高人一籌,完全切中了當今DB2套用過程中設計與性能最佳化問題的要害。之後,他組織陳輝、張廣舟、成孜論各顯身手,充分展現團隊威力。事實證明,他們把各自多年的積累與優勢淋漓盡致地發揮出來,為讀者帶來一場資料庫設計與性能最佳化的盛宴。在他們完成初稿後,我與其他兩位資料庫資深顧問逐字斟酌了內容,提出了建議。他們非常謙虛地接受了建議,仔細修改。當第二稿、第三稿、第四稿陸續發給我們時,我們所有人都為他們堅持不懈的努力和出眾的才華讚嘆不已。
幾位作者經過數月的奮鬥,終於完成了這部巨著,這個過程真正的辛苦只有他們自己最清楚,但我相信他們的意志力一定經受住了極大的考驗。這本真材實料的技術專著,也一定會為廣大讀者帶去最真切的幫助,並創造出新的奇蹟。
IBM信息管理產品首席架構師
美國加州大學
陳奇 博士
2010年11月30日
推薦序四 用之道
許多DBA對一則定律都深有感觸:
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
這句話被稱作“墨菲定律”,是由畢業於西點軍校的空氣動力專家Edward A. Murphy發現的。無獨有偶,早在五百年前,馮夢龍就寫道:屋漏偏逢連夜雨,船遲又遇打頭風。兩位學者身處年代不同,所受文化薰陶迥異,卻對事件所反映出來的結果有著相同的描述:在某個時刻,問題會集中爆發,原本豐富的資源在那個時刻突然枯竭,原本充沛的體力在那個時刻立刻透支。在資料庫領域,有人把這句話解釋為:如果存在隱患,哪怕只是一點點,它一定會在某個時刻爆發,並且後果嚴重。責罵、混亂、恐慌、歇斯底里,在那個時刻會統統地冒出來。這對於DBA來講,絕對是個惡夢。太多的教訓應驗了無論是什麼資料庫,一旦“墨菲定律”發作,會讓DBA們痛徹心扉。
我想起郎鹹平先生這幾年一直非常火爆的一本書《我們的日子為什麼這么難》。書的視角開闊而又著眼於民生,社會生活的方方面面都涵蓋於其中。儘管郎先生的觀點眾說紛紜,但確實說出了老百姓的無奈和難處。而DBA的無奈和難處,又由誰來代表大家傾訴?又由誰來幫助大家解決?我看完本書後找到了答案,而這要從作者說起。
IBM是一家令人尊敬的公司。在西方世界,IBM是“阿波羅登月計畫”的英雄,被Bill Gates稱為世界上最大的對手;在東方國度,IBM“藍色巨人”是前沿科技的代名詞。本書的作者均來自IBM中國研發中心,他們有著年輕人特有的激情和活力,在自己的工作崗位中表現出眾,王飛鵬就是其中一位。
飛鵬生長於三晉大地,畢業後,他進入IBM成為一名研發工程師,大家都稱呼他William。2008年端午節,我與William在成都不期而遇,那時正值震後救援與震後重建的交替期,特殊時期的救災經歷讓我們的友誼迅速升溫。再見已是一年以後的西湖邊上了,那天William作詩一首,時過境遷,我仍不時念誦:
西子水光竟漣漪, 南屏山色疊巒峰。
棲霞煙霞入雲霄, 蘇堤白堤成雙龍。
意氣勃發思將飛, 壯懷九天欲乘風。
雷鋒塔前青衫濕, 願為此地田舍翁。
今年我們見面的次數少了,William整日飛來飛去,忙於各種資料庫項目的諮詢、實施和講座。有一次我們碰巧都在杭州,我去聽了一次他給浙江電信做的資料庫性能最佳化培訓。來的人很多,位子不夠,最後面也站了一排人(後來才知道,一些資料庫愛好者也慕名而來)。整個培訓期間,William文采飛揚,激情澎湃,與他私下裡稍偏內向的性格截然不同。他的演講詼諧輕鬆,簡練易懂,時而高屋建瓴猶水瀑,時而煙枝細雨落風檣。我想William對資料庫技術的精湛理解和講授,跟他豐富的經歷是分不開的。William曾為中央級政府機關、電信企業、金融機構、高鐵系統等制定資料庫最佳化方案,指導項目實施以及解決性能問題。這些高強度的工作使他本人的組織能力、協調能力和項目控制能力達到了新的高度。此外,他對事物不同尋常的分析和領悟能力,還有堅毅執著的信念,在他所獲得的多項專利中也都有深刻的體現。
今年夏天,William本人親自來上海鄭重邀請我作序。原來,他正在準備寫一本有關DB2資料庫設計和性能最佳化方面的書。他講這本書的目的不是頭痛醫頭,腳痛醫腳,而是從資料庫設計階段就開始考慮性能問題,從系統整體層面最佳化資料庫,一勞永逸地解決本質問題。更為重要的是,他打算在這本書裡面提供一套經過驗證、簡單實用的PAT方法學,讓資料庫技術人員思路清晰、有條不紊地看清問題、解決問題,從而達到終極目標——讓龐大的資料庫輕盈地舞動起來。這本書另外的幾位作者分別是:陳輝,DB2技術知名專家,擁有DB2核心開發的豐富經驗;張廣舟,號稱“DB2診斷醫生”,具有豐富的資料庫最佳化實戰經驗;成孜論,多年往返於國內外,視角開闊,技術功底深厚,一定會為讀者帶來別樣的驚喜。
秋天到了,窗外瓜果飄香,屋內我品讀著他們的碩果。在這辛勤耕耘的幾十萬字中,我讀出了DB2的力量,讀出了中國資料庫工作者的希望。書里既有驚心動魄的危機處理紀實,又有摸爬滾打積累的實踐心得。有時你會享用到最新技術的說明資料,有時你會感同身受實戰技巧,有時你也會對作者獨特的分析視角感嘆不已。我很欣慰,一部DBA案頭必備,可以傳世的經典之作誕生了!
本書作者其實代表了一部分熱血青年,他們本可以養尊處優、高談闊論地過著小資的生活,但是卻選擇了一條荊棘密布、困難重重的長征之途。而這條路途,最終通向的是夢想之鄉,通向的是雪山之巔。無論是這條路的開闢者,還是有共同志向的開拓者,都會為中國資料庫生態系統的繁榮與昌盛貢獻出自己的力量。
IT諸葛網總裁 焦新港
2010年秋 寫於上海
前 言 關係論
提到資料庫的歷史,就不得不說起一位傳奇人物:E.F.Codd。作為資料庫理論的奠基人,E.F.Codd首次提出了“關係型資料庫模型”。這位從牛津走出來的紳士,“二戰”期間曾是英國皇家空軍的飛行員。後來他來到紐約加入了IBM。1981年,憑藉對資料庫發展的劃時代貢獻,Codd榮獲被譽為“計算機科學界諾貝爾獎”的“ACM圖靈獎”。 這位通透數據關係的先驅,在講述“關係”時有過這樣的描述:
我的家鄉在波特蘭島,這個孤獨的小島幾百萬年來訪客不多。這使得島上的物種與外界有很大差別。這裡有翅膀已經退化的海鷗,這裡的蟋蟀長得像大型工蟻,既不會跳也不會叫,還有一種我喜愛的叫做黃衣草的植物。的確,波特蘭島是個比較封閉的生物圈,但是植物群與動物群的關係,甚至與人的關係卻是如此緊密,這令我非常驚訝,也非常著迷。
在這裡人們總是詛咒兔子,以至於“dead rabbit”總是掛在嘴上。原來,住在土洞裡的先民,如果發現洞口有兔子出現,經常會有土塊從洞頂掉落下來,砸到人的頭上。 這種離奇的關聯,竟然可以從達爾文的《物種起源》找到緣由。達爾文說:“任何生物之間都有關係,只是往往你察覺不到。” 後來發現島上的兔子喜愛吃一種薺菜。這種薺菜的根莖被兔子吃光後留出的空間,是兔子良好的休憩場所。進而兔子把洞越挖越深,有的可達十英尺。而人們恰恰鐘愛這裡薺菜的葉子,配上沙丁魚是最美味的佳肴。薺菜被種在洞頂的土坡上,那裡是最合適的菜地。就這樣,害怕人類的兔子為了薺菜,越來越多地湧入人類住的洞頂。當過於擁擠時有的兔子就會遊逛到下面的洞口活動。而這個舉動證明,洞頂已經被兔子挖得到處是安樂窩了,自然會有土塊鬆動而墜落下來。
Codd博士也許是從家鄉關於兔子的傳說中找到了“關係型資料庫”的靈感吧,當今無論是DB2還是Oracle,都要感謝當年在英吉利海峽辛苦挖洞的兔子。很顯然:關係,無所不在。從厄爾尼諾現象到多米諾骨牌效應,從熱核武器裂變到蝴蝶效應,事物之間的關係如此豐富,有時引起的後果卻又很嚴重。面對事物關係引發的連鎖反應,如果我們未雨綢繆,積極主動地做好防範,準備好應對措施,就可以最大程度地降低風險。這些理論在資料庫領域,同樣適用。
隨著各領域業務的迅速發展,支撐業務發展的大型資料庫性能面臨的壓力與日俱增。我們在資料庫設計與性能最佳化的工作中注意到如下一些不良現象:
1.不重視資料庫設計,後期出現大量性能問題,改造和維護代價高昂。
2.DBA往往依靠臨時判斷處理問題,缺乏一套行之有效的系統化的最佳化思路和科學可靠的方法來指導。
3.資料庫最佳化存在技術門檻,工具繁多,學習周期長,而時間的壓力往往導致進度過於倉促,造成工作混亂。
我們發現,這些問題表面上是工作內容混亂造成的,而實際上是工作方法和工作思路混亂造成的。我們撰寫本書的目的正是為了幫助讀者梳理流程,提供解決問題的思路和方法。本書列出了資料庫設計與性能最佳化工作中頻繁遇到的問題、難以解決的問題、措手不及的問題和容易忽視的關鍵問題,通過兩條線索:縝密的技術闡述和貫穿始終的案例說明,幫助讀者更好地吸收和理解。
需要特別指出的是,本書是由來自IBM的資深研發工程師執筆撰寫的,他們都具備真實生產環境中大型資料庫設計與性能最佳化的豐富實踐經驗,這是區別於目前市場上所有同類書籍的顯著特點。
本書結構
本書分為四大部分,共11章。
第一部分,解析資料庫性能的本質問題。
決定資料庫性能的兩個階段:構建資料庫之前的設計階段,資料庫上線運行後的最佳化階段。第一階段完成高質量的資料庫設計,是高性能系統的基礎;第二階段基於PAT樹的方法系統,是掌控資料庫性能的秘密所在。我們通過金融、電信等行業經營分析系統的實際案例,來一層層地揭開這個秘密,領略PAT樹調整設計和解決性能問題的威力。
第二部分,從設計高性能資料庫的角度,詳細介紹如何使用DB2資料庫設計高質量的套用系統。內容主要包括DB2資料庫邏輯設計、DB2資料庫物理設計、DB2 pureXML資料庫設計及DB2工作負載設計。
第三部分,介紹如何最佳化DB2資料庫。內容主要包括性能監控及參數調整、SQL語句最佳化策略、鎖和日誌最佳化等。
第四部分,闡述DB2高級性能加速技術。本部分內容是對DB2資料庫設計和最佳化基礎之上的有益補充,主要包括DB2 pureScale集群和solidDB高速快取加速。
本書特點
1.“用”字當先
很多人喜歡讀成功人士的自傳,慢慢就會按照書中所說去做。但其實,每個人的生活和工作軌跡都不同,一種成功模板不一定適用於所有人。資料庫技術系列叢書中,相當一部分書籍都是教科書般地講解資料庫知識,或許中間會穿插一些例子,但缺乏真實案例的有力支撐,也沒有形成一套系統化的工作方法。因此我們要引導讀者走上更有意義的套用大道,為讀者提供自我分析問題的思維方式和實現方法。特別值得一提的是,貫穿本書的PAT方法學,是已被大量實踐證明的解決套用性能問題的高效方法學。該方法學立足於實踐,對設計人員提高DB2資料庫設計水平,對DBA提高性能最佳化水平有很高的實用價值。
2.“厚”的積累
我很幸運,能夠站在藍色巨人IBM的肩膀上看世界,更幸運的是,我周圍聚集著一群極其優秀的專才。這使我的經歷和見識都急速提升。本書記錄了在移動通信系統最佳化項目中,我與夥伴們如何排除系統中的“定時炸彈”;在金融系統最佳化項目中,我的團隊如何應對挑戰,又如何通力協作;在中央機關資料庫最佳化項目中,我們如何面對棘手狀況,又如何有針對性地制定最佳化方案,最終突出重圍取得成功;在各地高校,看到諸多熱衷DB2的年輕臉龐,那是讓人感動和激動的時刻!這些“厚”的積累,一定能幫助讀者增加成功的可能性。
3.“新”的技術
技術變革會帶來生產力的飛躍。MRI(核磁共振成像)橫空出世後,這種革命性的衝擊讓醫生們對X光、CT技術再也無法產生熱情。而在DB2設計和性能最佳化過程中,如果能合理使用DB2提供的最新技術,你一定會驚呼:事半功倍原來如此簡單!本書中所闡述的pureXML設計、工作負載設計、表分區、數據壓縮、新監控框架以及游標穩定性隔離級的當前提交特性等都是DB2的最新特性。另外,為了提高應用程式事務處理能力,本書還介紹了DB2 pureScale 和solidDB 高速快取DB2資料庫。
讀者對象
如果您學習資料庫知識僅一個月,本書可能不是最適合您的。三年前一位來自IBM多倫多實驗室的資料庫大師曾告誡我:你不要指望一本書可以兼顧入門者和專業者,更不要做這樣的事情。我記住了這句話,因而這本書專注的對象是DB2資料庫設計人員、DBA、資料庫性能分析人員、資料庫開發人員、運維人員及套用開發工程師。
還請注意的是,在閱讀本書前,讀者無須具備性能最佳化的專業知識,但希望讀者接觸過DB2資料庫並且了解SQL語言。同時,本書還提供了三條學習路徑:
第一,從解決問題的角度來看,讀者可以在學習了第1章介紹的PAT方法學和第2章介紹的金融電信行業經營分析系統的真實案例後,直接使用PAT方法學並結合後續章節來解決實際工作中遇到的性能問題。
第二,從掌握DB2知識的角度看,讀者可以直接從第3章開始學習DB2資料庫設計、監控和最佳化等知識。
第三,從解決問題和學習結合的角度來看,PAT樹最重要的特點就是葉子節點給出的最佳化方法準確對應到本書的相應章節,所以在解決性能問題的同時,可以利用這個特點有針對性地學習DB2資料庫相關知識。
另外,考慮到本書可以作為資料庫設計以及性能最佳化的教學用書,所以對資料庫相關專業的高校學生以及從事相關課程教學的教師具有良好的參考價值。
本書涵蓋哪些版本
本書中絕大多數概念適用於包括DB2 8 for Linux, UNIX and Windows以來的所有版本。但不可避免的是,我們討論到的某些特性只是針對特定版本的,具體如下。
表分區和MDC特性(第3章):適用於DB2 9及其以後版本。
自動資料庫管理、數據壓縮和STMM(第4章):適用於 DB2 9及其以後版本。
pureXML資料庫設計(第5章):適用於DB2 9及其以後版本。
DB2工作負載設計(第6章):適用於DB2 9.5及其以後版本。
新監控框架(第7章):適用於DB2 9及其以後版本。
當前提交特性(第9章):適用於DB2 9.7及其以後版本。
DB2 pureScale 海量事務處理技術(第10章):適用於DB2 9.8及其以後版本。
solidDB Cache高速快取技術(第11章):適用於DB2 9.1及其以後版本。
如果沒有特別指明某特性只針對某個版本,則默認對所有版本都適用。
致謝
首先感謝電子工業出版社的高洪霞編輯,她在本書出版過程中給予了我們大力支持和幫助!感謝IBM信息管理產品架構師陳奇博士及Cognos行業解決方案架構師王慶法,他們在本書的選題方面提供了重要幫助。同時,本書在審稿中還得到了IBM軟體開發實驗室經理劉慎鋒的熱心幫助,在此表示衷心感謝。此外,感謝趙文峰博士,他審核了本書的PAT方法論及大部分章節並提出了寶貴建議;感謝秦怡,她在繁忙的工作之餘審核了所有章節的引言和案例部分,並提供了非常重要的建議;感謝張昱,他審核了書中部分章節並製作了PAT樹的插圖;感謝劉暢,她審核了本書的前兩章並提出了有益的修改意見;感謝所有參與本書審核的同事們,孫岳、李玉明、李睿明、侯占友和陳詩然。
王飛鵬2010年感恩節寫於聖淘沙島
後 記
當我們走近DBA,大家對DBA的第一印象是什麼呢?是活力四射,還是默默工作?是銳意創新,還是墨守成規?他們是否看時尚雜誌,還是每天手捧厚厚的技術手冊一頭扎進技術的海洋?其實,我們聯想的是一種氛圍。說起開源,你能聯想到開放的氛圍;當使用“蘋果”產品,你能感受到時尚的氛圍;當聽到擁有專利數量世界第一的IBM,你能體會到創新的氛圍。那么,DBA的氛圍是什麼?
Gosling曾寫過,“在機房裡,就像身處荒漠一樣。那裡人跡罕至,沒有人願意端著一杯香濃的咖啡在那裡聊天。”從窗外眺望,機房外是寬敞而幽靜的區域,而機房裡只有各種機器、線纜和帶電設備,當然也少不了機器發出來的各種噪聲。難道DBA的氛圍就是精神荒漠嗎?我想說的是,DBA的氛圍絕不是枯燥和無助的,相反,是輕盈、充滿活力的。
對於熱愛資料庫工作的人來說,投入工作更像是伴著節奏,和著旋律邁出的輕鬆舞步。這種節奏和旋律,既可以理解為技術人員的文化素養或者職業水準,也可以理解為一種工作思路或一種工作方法。不願意邁出舞步的資料庫工作者永遠在猶豫“技術上是否能實現?”而資料庫的舞者卻在思考“用戶需要我們的資料庫提供更多更優質的服務。”本書面對的不是滿足於讓資料庫能“跑”起來的DBA技術人員,期望讀者是一個對資料庫有深刻感知和理解,一個想要在資料庫工作中和“舞伴”共同呈現精美絕倫表演的舞者。
其實,資料庫是一個龐大的生態系統,對DBA素質要求非常全面。DBA不但要對資料庫這一層了如指掌,還要兼顧上層業務套用和下層硬體結構的融會貫通。一上一下,既有廣度上的蔓延,也有深度上的延伸,這正是資料庫技術人員區別於其他職業的重要特徵。他們需要有很強的組織協調能力;需要有準確地診斷資料庫和其他層面問題的能力;需要有及時地解決突發問題的能力;需要有條理的培訓能力;需要超負荷時,還能有條不紊、全力投入的意志能力;還需要大量其他的能力,包括一點點幽默能力。
通過大量實踐證明,最終決定資料庫項目能否成功的因素不僅是個人的技術,更多是個人的綜合能力。現在,資料庫業務覆蓋的範圍越來越廣,對技術人員的能力要求越來越綜合,這讓我意識到不但要把資料庫技術展現給大家,更要把對DBA綜合能力的要求說明白。
我從自己經歷中挑選了一些艱難的,包括出過事故的項目作為案例寫進書中。我之所以把那些看起來更漂亮的項目從文稿中刪除,是因為我深知,對錯誤的反省和總結遠比對成功的展示更有意義。在這本書里,你可以看到資料庫套用時的真實景象;可以讀到在資料庫系統中,因為不起眼的失誤、疏忽、差錯而引起的嚴重後果,有的是因為不規範的行為,有的是因為不合理的計畫,有的是因為不成熟的思路,還有的是因為不過關的技術素質。但究其根本原因,還是對資料庫的理解不深入,對資料庫的認知不全面。該是我們改變自己認識上的誤區,改變對待資料庫的印象,改變資料庫工作方式的時候了!當你與資料庫一同邁出輕盈的舞步,你將擁有主動權,你將會感受到這支舞曲給你帶來前所未有的全身心感官體驗。
舞姿千變萬化,但任何一種舞動,哪怕是世界上最複雜、最炫目的舞蹈,都一定是有基本步法的,在這本書里,我們看到的就是資料庫設計與性能最佳化的基本步法。只要你按照這樣的步法加以實踐,你就能演繹出完美的舞蹈,舞動你自己的“資料庫小宇宙”,這正是智慧與技術的完美結合。讀完本書,你會明白,沒有方法思路,沒有旋律感和步法感,一味追求技術至上的技術人員,面對日新月異的技術變革,會覺得越來越力不從心,最終會發現徒有技術的增長也無法掩飾綜合實力的停滯不前甚至倒退。
最後,我贈給讀者一句話:如果你把舞動資料庫當做自己的夢想,不妨先調整自己的腳步,找到領先的一步,自信的一步,主動的一步,開始邁出輕盈的舞步吧。
王飛鵬2010年聖誕節寫於香港西貢
目 錄
第一部分 DB2基礎
第1章 我看DB2設計與最佳化 1
1.1 資料庫設計與性能最佳化 2
1.1.1 收集需求 3
1.1.2 設計概念模型 4
1.1.3 設計邏輯結構 5
1.1.4 設計物理結構 6
1.1.5 實施、運行和維護階段 8
1.2 性能問題 8
1.2.1 什麼是性能問題 8
1.2.2 為系統做性能基準測試 9
1.2.3 制訂性能最佳化目標 10
1.2.4 把問題分類 10
1.3 使用PAT方法學解決問題 11
1.3.1 什麼是PAT方法學 11
1.3.2 PAT方法學最佳化策略 11
1.3.3 使用PAT方法學 15
1.3.4 使用PAT方法學的步驟 25
1.3.5 PAT樹使用建議 26
1.4 小結 26
第2章 性能最佳化利器——PAT方法 28
2.1 最佳化步驟 29
2.2 業務分析 29
2.2.1 經營分析系統的架構 29
2.2.2 性能問題的提出 31
2.3 系統分析 31
2.3.1 硬體和作業系統 32
2.3.2 資料庫物理設計 33
2.3.3 分析結果 34
2.4 制訂最佳化計畫 35
2.4.1 最佳化計畫安排 35
2.4.2 實踐最佳化策略 35
2.5 使用PAT方法 36
2.5.1 最佳化“每天下午系統回響慢”問題(Perf_SlowAfterNoon_Sys) 36
2.5.2 最佳化“大數據轉入”問題(Perf_Load_App) 37
2.5.3 最佳化“客戶流失分析”問題(Perf_Customer_App) 38
2.5.4 最佳化“賬戶資費”問題(Perf_ACC_App) 39
2.5.5 最佳化“數據質量管理”問題(Perf_Data_App) 41
2.5.6 最佳化“系統逐漸變慢”問題(Perf_SlowDown_Sys) 42
2.5.7 最佳化總結 45
2.6 小結 45
第二部分 DB2資料庫設計
第3章 高質量邏輯設計 48
3.1 常規表設計 49
3.1.1 表設計的原則 49
3.1.2 列定義原則 52
3.1.3 數據完整性設計 53
3.1.4 其他考慮因素 54
3.2 索引設計 56
3.2.1 索引的概念 56
3.2.2 深入解析索引原理 60
3.2.3 創建索引 67
3.2.4 索引設計原則 67
3.2.5 索引維護 70
3.3 MDC表設計 71
3.3.1 多維群集(MDC) 71
3.3.2 塊索引 72
3.3.3 MDC表的優勢 73
3.3.4 MDC表設計原則 74
3.4 表分區設計 76
3.4.1 分區表 76
3.4.2 分區表索引 78
3.4.3 轉入轉出 80
3.4.4 案例分析 82
3.5 DPF設計 83
3.5.1 資料庫分區 83
3.5.2 資料庫分區組 87
3.5.3 DPF設計原則 88
3.5.4 MDC、DPF和表分區 90
3.6 MQT表設計 91
3.6.1 MQT表介紹 91
3.6.2 MQT表適用範圍 93
3.6.3 MQT表設計原則 93
3.6.4 MQT表設計示例 94
3.7 臨時表設計 95
3.7.1 全局臨時表(CGTT/DGTT) 95
3.7.2 臨時表設計 96
3.7.3 設計示例 97
3.8 小結 98
第4章 高質量物理設計 100
4.1 物理設計 101
4.1.1 確定資料庫的物理結構 101
4.1.2 評價物理結構 102
4.2 設定和管理CPU 103
4.2.1 DB2的並行處理SMP 103
4.2.2 DB2的並行處理MPP 104
4.2.3 SMP集群(SMP+MPP) 105
4.3 設定和管理I/O 106
4.3.1 磁碟和存儲設計 107
4.3.2 磁碟陣列技術 109
4.3.3 條帶化 111
4.3.4 I/O相關配置參數 113
4.3.5 I/O存儲設計小結 114
4.3.6 I/O設計範例 116
4.4 表空間設計 116
4.4.1 表空間概念 116
4.4.2 表空間類型 117
4.4.3 表空間設計總結 119
4.4.4 表空間設計範例 127
4.5 設定和管理記憶體 128
4.5.1 記憶體 128
4.5.2 緩衝池設計 134
4.5.3 STMM記憶體自動管理 140
4.6 數據壓縮 143
4.6.1 壓縮的重要性 143
4.6.2 壓縮的種類 144
4.7 小結 146
第5章 pureXML資料庫設計 149
5.1 DB2 pureXML 150
5.1.1 pureXML之風采 150
5.1.2 XML存儲 151
5.1.3 XQuery與SQL/XML 153
5.1.4 XML Schema 157
5.2 XML索引 159
5.2.1 XML索引類型 159
5.2.2 創建索引 160
5.2.3 XML索引最佳化 161
5.3 使用pureXML設計高效的資料庫 164
5.3.1 動態表單類設計 164
5.3.2 元數據類設計 165
5.3.3 數據交換類設計 166
5.3.4 社交網路類設計 167
5.4 XML資料庫的性能最佳化 168
5.5 小結 170
第6章 工作負載設計 172
6.1 DB2工作負載介紹 173
6.2 工作負載管理器組件 176
6.2.1 工作負載 176
6.2.2 服務類 178
6.2.3 閾值 180
6.2.4 工作類集合和工作操作集合 182
6.2.5 DB2和AIX / Linux WLM 185
6.2.6 小結 186
6.3 WLM監控 187
6.3.1 監控環境 187
6.3.2 工作負載監控示例 189
6.4 設計DB2工作負載 193
6.5 工作負載範例 194
6.6 小結 195
第三部分 DB2資料庫性能最佳化
第7章 DB2配置最佳化與監控 197
7.1 配置參數最佳化 198
7.1.1 作業系統參數最佳化 198
7.1.2 DBM參數最佳化 199
7.1.3 DB參數最佳化 201
7.1.4 註冊變數最佳化 207
7.1.5 常見問題總結 207
7.2 性能監控的途徑 209
7.2.1 快照監控 209
7.2.2 事件監控 216
7.2.3 db2pd監控 219
7.3 新監控框架 222
7.3.1 表函式 222
7.3.2 管理視圖 225
7.4 系統監控的方法 227
7.4.1 CPU監控 227
7.4.2 記憶體監控 230
7.4.3 I/O監控 233
7.5 DB2高級監控工具 236
7.5.1 db2top 236
7.5.2 Data Studio管理控制台 237
7.5.3 Optim性能管理器 239
7.6 本章小結 239
第8章 SQL語句性能最佳化實戰 241
8.1 SQL語句編寫 242
8.1.1 謂詞 242
8.1.2 多餘的連線 243
8.1.3 子查詢 244
8.1.4 外連線 244
8.1.5 UNION ALL的使用 245
8.1.6 Having子句 245
8.1.7 OFNR和FFNR子句 245
8.1.8 使用參數標記 246
8.2 最佳化器 246
8.2.1 最佳化級別 248
8.2.2 註冊變數 250
8.2.3 記憶體參數 251
8.2.4 表和索引設計 251
8.2.5 統計信息 251
8.2.6 信息性約束 253
8.3 SQL語句訪問計畫分析 254
8.3.1 解釋工具 254
8.3.2 查詢重寫 258
8.3.3 訪問路徑 260
8.3.4 連線方法 265
8.3.5 問題SQL語句分析 268
8.4 其他最佳化建議 275
8.4.1 特殊的最佳化方法 275
8.4.2 Design Advisor最佳化指導 278
8.4.3 語句集中器 278
8.5 存儲過程最佳化 280
8.6 XQuery最佳化 288
8.6.1 XQuery簡介 288
8.6.2 如何使用 289
8.7 數據線上最佳化 294
8.7.1 REORGCHK 294
8.7.2 REORG 296
8.8 本章小結 298
第9章 鎖和日誌最佳化 302
9.1 鎖 303
9.1.1 鎖等待和逾時 303
9.1.2 鎖升級 304
9.1.3 死鎖 304
9.2 鎖的類型與兼容性 306
9.2.1 鎖的類型 306
9.2.2 鎖兼容 309
9.3 隔離級別與影響並發的因素 310
9.3.1 隔離級別介紹 310
9.3.2 DB2註冊變數 311
9.3.3 當前已落實 312
9.4 鎖監控和問題解決 313
9.4.1 鎖等待監控 314
9.4.2 鎖逾時監控 318
9.4.3 死鎖監控 327
9.5 日誌與性能 331
9.5.1 循環日誌 332
9.5.2 歸檔日誌 332
9.5.3 日誌的使用 333
9.5.4 寫日誌和寫表 333
9.5.5 日誌配置參數 334
9.6 日誌監控與最佳化 337
9.6.1 日誌監控 337
9.6.2 日誌瓶頸與最佳化 339
9.7 本章小結 340
第四部分 高級最佳化技術
第10章 pureScale海量事務處理 342
10.1 什麼是pureScale 343
10.2 pureScale架構 344
10.3 DB2 pureScale和 Oracle RAC的對比 346
10.4 DB2 pureScale實例 347
10.4.1 實例背景 347
10.4.2 硬體配置 348
10.4.3 軟體安裝配置 351
10.4.4 客戶套用測試 354
10.5 小結 358
第11章 solidDB高速快取最佳化 360
11.1 什麼是solidDB高速快取 361
11.2 solidDB高速快取DB2數據 364
11.3 solidDB高速快取套用場合 364
11.4 solidDB高速快取架構 365
11.5 電信行業套用案例 366
11.5.1 套用背景 366
11.5.2 使用solidDB高速快取加速 367
11.6 小結 375
附錄A 常用監控命令用法 377
附錄B 縮略語釋義 382
後記 389
參考文獻 391