讓DB2跑得更快——DB2內部解析與性能最佳化

讓DB2跑得更快——DB2內部解析與性能最佳化

《讓DB2跑得更快——DB2內部解析與性能最佳化》是2013年10月出版的圖書,作者是洪燁。

基本介紹

  • 書名:讓DB2跑得更快——DB2內部解析與性能最佳化
  • 作者:洪燁
  • ISBN:978-7-121-21431-8
  • 頁數:480頁
  • 定價:79.00元
  • 出版時間:2013年10月
  • 開本:16開
內容簡介,編輯推薦,目錄,精彩節摘,作者簡介,媒體評論,前言,

內容簡介

本書以最佳化為主題,根據資料庫內部原理將DB2資料庫對SQL語句及其他操作的內部機制進行詳細剖析,並將RDS、DMS、IXM、BPS等DB2內部組件不為人知的一面展現給大家,以期做到對資料庫的調優過程知其然並知其所以然。同時本書結合回響時間與資源瓶頸兩種性能問題的現象,對資料庫調優的整體思路進行詳細講解,對原來老式的調優思路進行整理和改動,結合了DB2 V10.1版本的一些新的監控工具及特性,以一種全新的方式闡述DB2資料庫性能調優的基本思路及實踐方法。
本書適合DB2資料庫管理員、資料庫相關應用程式開發人員、系統管理員、系統架構師及有一定資料庫基礎的用戶自學和參考,也可作為DB2培訓的參考用書。

編輯推薦

宣傳語:DB2資料庫領域的精彩強音,DB2技巧精髓的熱心分享,資深資料庫專家牛新莊、乾毅民、成孜論、唐志剛聯袂推薦!
本書作者在DB2China資料庫論壇擔任熱點討論版塊版主,主持多次熱點討論以及專家現場診斷,擅長DB2資料庫及相關產品的性能調優及故障分析,對DB2技能及實踐經驗有多年積累,並且近年來多位業界專家一直在積極推動DB2領域的技術交流,真正理解DB2技術人員真正的需求與痛楚,是DB2系統知識及技巧精髓的熱心分享者及貢獻者。
作者本人出於對DB2的狂熱與追求,通過長期的凝練與匯聚,將DB2知識系統化,把DB2資料庫調優技巧的精髓熱心地分享給廣大讀者,並且憑藉深厚而紮實的理論及經驗,對DB2資料庫的內部進行了深入解析,這是對資料庫領域所做出的重要貢獻與精彩強音!
單看“內部解析”四個字,就已經能體現本書的寶貴价值,在“內部解析”的基礎上進行“性能調優”,定會讓您的DB2“跑得更快”!

目錄

第1篇 性能定義及整體架構
第1章 DB2性能最佳化概述 2
1.1 性能目標 2
1.1.1 回響時間 4
1.1.2 吞吐量 5
1.2 工作負載類型 6
1.2.1 在線上事務處理(OLTP) 6
1.2.2 在線上分析處理(OLAP) 7
1.2.3 決策支持系統(DSS) 8
1.2.4 企業資源規劃(ERP) 9
1.3 影響性能的因素 10
1.3.1 軟體代碼編寫對性能的影響 12
1.3.2 應用程式架構設計對性能的影響 14
1.3.3 資料庫設計對性能的影響 14
1.3.4 系統設計對性能的影響 27
1.4 本章小結 34
第2章 DB2架構介紹 36
2.1 DB2整體概況 36
2.1.1 DB2進程/執行緒體系簡介 37
2.1.2 DB2記憶體體系簡介 41
2.1.3 DB2相關檔案簡介 42
2.2 DB2組件介紹 51
2.2.1 作業系統服務 52
2.2.2 基本系統調度 53
2.2.3 關係數據服務 58
2.2.4 數據管理服務 59
2.2.5 緩衝池服務 60
2.2.6 數據保護服務 63
2.3 SQL語句處理過程 65
2.3.1 數據查詢語言(DQL) 66
2.3.2 數據操作語言(DML) 68
2.3.3 事務處理語言(TPL) 69
2.4 本章小結 70
第2篇 性能監控工具及監控技巧
第3章 性能監控工具 72
3.1 實時監控工具 72
3.1.1 db2trc 72
3.1.2 db2top 75
3.1.3 db2pd 77
3.2 歷史監控工具 81
3.2.1 快照 81
3.2.2 快照視圖及快照函式 83
3.2.3 事件監視器 86
3.3 DB2工作負載管理(DB2 Workload Manager) 87
3.3.1 標識階段(Identification Stage) 88
3.3.2 管理階段(Management Stage) 89
3.3.3 監控階段(Monitoring Stage) 90
3.4 語句解釋說明工具 94
3.4.1 db2exfmt 94
3.4.2 db2expln 102
3.4.3 語句解釋說明工具對比 105
3.5 監控技巧 105
3.5.1 查找資料庫中耗時最長的語句 107
3.5.2 分析特定語句的時間分布 108
3.5.3 捕獲所有的SQL語句 111
3.6 本章小結 113
第3篇 性能分析及內部原理剖析
第4章 深入探討最佳化器 116
4.1 語法語義分析 117
4.1.1 查詢解析 117
4.1.2 語義檢查 117
4.2 SQL語句重寫 118
4.2.1 謂詞簡介 119
4.2.2 掃描方式 122
4.2.3 連線運算 125
4.2.4 查詢重寫 130
4.3 最佳化器編譯 135
4.3.1 生成備選執行計畫 135
4.3.2 基數評估 137
4.3.3 成本計算公式 156
4.3.4 生成可執行的代碼 157
4.4 基數評估檢查 157
4.4.1 通過COUNT語句檢查基數評估 157
4.4.2 使用Section Actuals分析執行計畫 162
4.5 本章小結 164
第5章 SQL語句性能最佳化之7種武器 165
5.1 長生劍——基本統計信息 165
5.1.1 統計信息收集方法 170
5.1.2 統計信息收集策略 171
5.2 碧玉刀——分布統計信息 172
5.3 孔雀翎——列組統計信息 177
5.4 離別鉤——REOPT 182
5.4.1 REOPT處理機制 184
5.4.2 REOPT的啟用方式及監控 187
5.5 多情環——靜態視圖 188
5.6 霸王槍——最佳化概要檔案 193
5.6.1 最佳化概要檔案的使用方法 194
5.6.2 最佳化概要檔案規則 196
5.7 拳頭——語句最佳化 199
5.8 本章小結 202
第6章 數據對象存儲設計 203
6.1 表類型及設計方法 204
6.1.1 常規表 204
6.1.2 MDC表 205
6.1.3 分區表 212
6.1.4 MQT 214
6.1.5 表設計原則 217
6.2 索引類型及設計方法 220
6.2.1 索引的作用 220
6.2.2 索引創建原則 224
6.2.3 索引鍵順序的選擇 226
6.2.4 索引設計性能考慮 227
6.3 DB2設計顧問程式 228
6.3.1 戰略性的索引創建 229
6.3.2 戰略性的表類型選擇 230
6.4 本章小結 232
第7章 DB2物理結構深入解析 233
7.1 表空間結構剖析 233
7.1.1 SMS(系統管理表空間)結構剖析 238
7.1.2 DMS(資料庫管理表空間)結構剖析 240
7.1.3 高水位對於性能的影響 243
7.1.4 對容器進行重新平衡對性能的影響 246
7.2 數據頁詳解 247
7.2.1 數據頁結構剖析 247
7.2.2 欄位類型與行遷移 251
7.2.3 頁重組 259
7.3 索引頁詳解 263
7.3.1 索引內部結構剖析 263
7.3.2 索引的分裂 266
7.3.3 索引維護和清除 269
7.4 日誌檔案結構剖析 273
7.5 本章小結 275
第8章 I/O管理及最佳化 276
8.1 數據I/O管理 277
8.1.1 緩衝池I/O原理 278
8.1.2 緩衝池邏輯讀取 282
8.1.3 緩衝池物理讀取 285
8.1.4 緩衝池寫入操作 292
8.1.5 基於塊的緩衝池I/O 297
8.1.6 緩衝池I/O監控 298
8.1.7 直接I/O管理 305
8.2 日誌I/O管理 307
8.2.1 日誌讀取 308
8.2.2 日誌寫入 309
8.2.3 日誌I/O原理 310
8.2.4 日誌檔案I/O相關調優參數 314
8.2.5 歸檔日誌對I/O的影響 315
8.3 本章小結 319
第9章 記憶體管理 320
9.1 記憶體模型 320
9.1.1 實例共享記憶體 326
9.1.2 資料庫共享記憶體 328
9.1.3 應用程式全局記憶體 335
9.1.4 代理程式私有記憶體 338
9.1.5 排序堆 339
9.1.6 其他記憶體區域 341
9.2 STMM 345
9.2.1 STMM運行機制 345
9.2.2 STMM監控 347
9.3 如何定位及修復記憶體泄漏 348
9.3.1 記憶體泄漏診斷方法 348
9.3.2 記憶體泄漏的處理方法 350
9.4 本章小結 352
第10章 DB2等待事件 353
10.1 鎖對象及兼容性 354
10.1.1 鎖對象及鎖模式 355
10.1.2 鎖兼容性及鎖轉換 360
10.2 鎖問題的監控與解決 361
10.2.1 鎖事件監控 365
10.2.2 鎖問題解決方法 370
10.2.3 鎖案例分享 377
10.3 latch事件 381
10.3.1 latch監控 382
10.3.2 案例分析 383
10.4 本章小結 384
第4篇 實用工具調優及作業系統最佳化
第11章 實用工具調優 386
11.1 備份恢復工具 386
11.1.1 backup 386
11.1.2 restore 391
11.2 數據移動 392
11.2.1 export 392
11.2.2 import 394
11.2.3 load 396
11.3 其他管理工具 401
11.3.1 reorg 401
11.3.2 runstats 407
11.4 本章小結 409
第12章 作業系統相關問題 410
12.1 AIX 411
12.1.1 虛擬記憶體管理 411
12.1.2 磁碟及檔案系統管理 417
12.1.3 網路調優參數 422
12.1.4 作業系統相關參數 423
12.1.5 系統監控工具 425
12.2 Windows 429
12.2.1 記憶體管理 429
12.2.2 磁碟及檔案系統相關參數 432
12.2.3 系統監控工具 432
12.3 本章小結 435
第5篇 性能分析思路及最佳化總結
第13章 性能問題分析思路 438
13.1 回響時間問題 439
13.1.1 回響時間總結 439
13.1.2 通過快照進行分析 442
13.1.3 通過快照函式進行分析 444
13.2 資源占用問題 447
13.2.1 磁碟瓶頸 447
13.2.2 CPU瓶頸 450
13.2.3 記憶體瓶頸 455
13.3 本章小結 457

精彩節摘

9.3 如何定位及修復記憶體泄漏
在懷疑遇到記憶體泄漏的問題之前,必須謹慎地判斷當前資料庫中是否真實存在記憶體泄漏。判斷資料庫中存在記憶體泄漏時需要注意以下幾點:
 系統中的記憶體在逐漸減少,甚至導致換頁(paging);
 SQL語句越來越慢(經常是換頁導致);
 隨著時間增長,由DB2分配的記憶體在不斷增加。
9.3.1 記憶體泄漏診斷方法
正如之前介紹的,從DB2 V9.5版本開始,可以很輕鬆地檢查當前各個記憶體集的使用情況。每個資料庫分區都會保留當前分區中記憶體使用信息的實時狀態。其中包括所有的私有記憶體、套用記憶體、資料庫共享記憶體、資料庫管理器共享記憶體及分區間共享的FCM記憶體。我們可以通過db2pd -dbptnmem命令觀察當前資料庫中各部分記憶體的使用情況。
可以看到當前分區中INSTANCE_MEMORY的限制值大約為28GB,當前記憶體總共使用了898MB大小。其中271MB作為申請後並未使用的記憶體,意味著當前已經提交的記憶體大約為627MB。如果將這些記憶體按照記憶體集分開觀察,可以分為以下幾個部分:Mem Used代表向作業系統中已經申請的記憶體部分,DB2會提前向作業系統申請部分多餘記憶體;Mem Used區域是目前可以被DB2分配給各個記憶體池的總共大小;CACHED部分是還沒有被任何記憶體池占用的記憶體數量,同時也代表當作業系統中記憶體不足時,可以釋放的最大記憶體數量。
對於單次調用db2pd -dbptnmem命令所得到的輸出結果,很難從中發現當前是否存在潛在的記憶體泄漏問題。還需要了解以下情況來證實我們的猜測:
 如果沒有任何激活的應用程式,實際提交的套用共享記憶體應該非常小(Used -Cached);
 如果沒有任何監控開關打開,則實例共享記憶體的值應該非常小;
 私有記憶體的大小應該根據執行緒數量浮動。如果發現每個執行緒需要消耗1~2MB的記憶體,代表可能會發生記憶體泄漏(除非啟用私有排序,如果啟用私有排序,則每個執行緒消耗的記憶體應該不大於SORTHEAP定義的值);
 對於單分區實例,FCM_RESOURCES應該是不變的。對於多分區實例,如果存在大量跨節點連線的操作,則FCM_RESOURCES會占用相當大一部分記憶體;
 對於資料庫共享記憶體,其記憶體集大小應該等於內部所有記憶體池之和(緩衝池、鎖列表、Package cache等)。
如果有緩慢的記憶體泄露發生,僅僅祈禱是不起作用的,需要定期檢查當前正在使用的記憶體量。在開發環境中,以下幾個關鍵點在對記憶體泄露檢查時非常有用。例如:
 資料庫激活之後,還沒有任何應用程式連線時;
 應用程式準備執行前;
 應用程式執行過程中;
 應用程式執行後。
判斷記憶體泄漏需要定期地對比當前資料庫中的記憶體情況。在應用程式數量、執行語句類型及數據量變化不大的情況下,記憶體的使用應該也會保持恆定。如果發現記憶體在緩慢增長,則可以認為是記憶體出現泄漏。但是有一點例外,當啟用STMM功能且資料庫參數DATABASE_MEMORY是自動調整的情況下,可能會出現資料庫共享記憶體會基於資料庫中的空閒記憶體數量增加或減少,但是其他記憶體集不會受到任何影響。

作者簡介

洪燁,畢業於湖南大學,曾在IBM擔任資料庫現場技術支持,為北京移動、北京聯通、中國銀聯、中國銀行、中信銀行、聯想集團、國家氣象局、中華聯合保險、唐山商業銀行等多家企業進行DB2故障診斷、技術支持以及技術培訓工作,擁有DB2開發、高級管理以及AIX管理等多項國際認證。
並在DB2China資料庫論壇擔任熱點討論版塊版主,主持多次熱點討論以及專家現場診斷,擅長DB2資料庫及相關產品的性能調優及故障分析,對DB2技能及實踐經驗有多年積累。
近年來多位業界專家一直在積極推動DB2領域的技術交流,真正理解DB2技術人員真正的需求與痛楚,是DB2系統知識及技巧精髓的熱心分享者及貢獻者。

媒體評論

推薦序一
畫家相信繪畫可以描繪我們的人生,哲學家認為意識可以歸納我們的生活,物理學家想找個支點來撬動地球,而我們從事數據領域的工作者大概更傾向於通過數據來改變世界。
為什麼數據可以改變世界?為什麼數據可以改善生活?為什麼數據會帶來藝術品位,提供心靈享受,推動科技成果?有人會想到蘋果,有人會想到微博,更多的資料庫技術人員還會列出許多數據引起的科技革命:物聯網、大數據、雲計算、移動網際網路……數據正在撼動每一個角落:金融業、製造業、電力、國防、醫藥、交通等眾多領域。簡單來講,數據蘊含著神奇而美妙的能量,它正使更多的人變成數據的信徒。
而我本人正是一名數據的信徒,多年來在著書、培訓、諮詢和管理等多項工作中,始終在數據的海洋中忘我與痴迷。在受邀為本書作序之時,我回想起五年前正埋頭於寫作的我。那時,每日工作繁忙,仍筆耕不輟,把之前在資料庫領域的各項工作中所獲得的技術積累、經驗總結都儘可能地通過文字展現給讀者。自認為寫資料庫的書很苦,寫DB2的書更苦,在出版多部著作之後,我對優秀資料庫著作的評判標準,可以套用新聞界的行話:“如果事件報導得不夠好,那是因為離得不夠近”。
本書正符合優秀資料庫著作的評判標準。其對於DB2的技術理念與解決方法、實戰性與科學性貫穿始終,這也與作者多年的DB2技能經驗的積累與自我不斷地改進完善有重要關係,同時,作者與多位業界專家一直在積極推動DB2領域的技術交流,這也使得他們距離DB2微觀社會“足夠近”,因此可以與DB2讀者“同呼吸”,理解DB2技術人員真正的需求與痛楚,分析與歸納出專業的技術總結。
作為資料庫領域的一位積極參與者,看到這樣一部精彩的DB2著作出爐,我深感欣喜與慰藉。本書作者從浩如煙海的資料庫寶庫中挑選出重要的知識點,引述了許多有意義的案例、搭配實例與配圖,以輕鬆的筆調深入淺出、娓娓道來。可以看出,作者並非以單純地解決DB2問題為目的,本書也不僅僅單純地是為希望找到能解決這些問題的人們而寫的,作者的寫作目的更多的是為了傳播DB2知識,激發讀者對資料庫技術的熱情!
說到這裡,又想起讓我推而崇之的那句話:古之成大事者,不唯有超世之才,亦唯有堅韌不拔之志也!學習資料庫技能,從事資料庫技術工作,建議大家去除浮躁,認真學習,不斷積累,尋找機遇,從而通過一己之力,與志同道合者共同為我們國家添磚加瓦,做出自己的奉獻!
牛新莊
國內頂尖數據架構和信息治理專家
對外經濟貿易大學客座教授、北京交通大學兼職教授
中國DB2用戶協會(CDUG)理事長
亞洲金融合作聯盟信息科技委員會主任
中國民生銀行總行科技部總經理
推薦序二
DB2的發展需要什麼?答案很多,在本書的序言裡,我更想提到的是,DB2的發展需要更多的冬粉及草根。一名冬粉的評論或許無力,一名草根的聲音可能無法被人聽清,但是數量多了呢?氣勢大了呢?有句話說到:世間最柔最弱的事物是水,遇到小的石子也會改變流向,盛在碗裡就是圓形,倒在樽里就是方形。不過,如果水聚成川,那么再大的岩石都無法阻擋。
如今,我們可以欣喜地在論壇、微博、講壇、大會等眾多傳播媒介中,看到與日俱增的DB2冬粉們的熱情,聽到DB2草根們的聲音,得到DB2新手們的關注。這是我們IBM工作者的動力,也是最好的鞭策。可以這樣講:對於汲取DB2知識的渴望,有如細碎的火花,遍布遼闊的原野;針對DB2解決方案的執著,好像匯聚的江川,奔流不息。
同樣令人喜悅的是,本書作者出於對DB2的狂熱與追求,通過長期的凝練與匯聚,將DB2知識系統化,把DB2技巧的精髓熱心地分享給廣大讀者,這是對資料庫領域所做出的重要貢獻與精彩強音!
為了滿足社會高速發展的需求,已然歷經百年的IBM正經歷著前所未有的積極變革與快速發展。在資料庫領域,我們可以看到DB2 pureScale技術正綻放於中國眾多關係國計民生的系統中;我們的大數據解決方案PureData Systems,正在引領數據行業發展潮流;而DB2 10.5即將吹起新一代數據分析技術BLU的號角,使我們的客戶對IBM資料庫解決方案的信仰更加堅定。這么多的精彩時刻,離不開冬粉們的積極參與,離不開草根們的支持。
而在出版領域,本書將給我們帶來最新的收穫。我相信這本匯集作者的技術、經驗和總結於一身的專業書籍,一定能吸引中國廣大DB2愛好者沉浸於書中,並幫助他們取得重要的技術提升與進步。在DB2領域,你、我、他、她,都需要這份吸引力,使DB2獲得更多的冬粉、更廣泛的草根群和更令人滿意的溝通、交流渠道。
乾毅民
DB2開發及客戶支持總監,IBM中國開發中心
2013年5月26日
推薦序三
一直以來,我都認為數據管理與數據維護是一項神聖且充滿愛心的職責與工作。我在講課中常以“提燈女神Florence Nightingale”為例,她是世界上第一位真正意義上的護士,開創了護理之先河,不但是護理大師,還是數據大師、統計大師。
Florence Nightingale出身富貴,卻心繫窮苦人。在當時殘酷的克里米亞戰爭中,戰死數十萬人。她自願擔任戰地護士,每晚提燈巡視,她通過考察發現,因傷致亡的人數遠大於在前線陣亡的人數。之後她通過自學的統計學知識提煉收集的數據,繪製了世界上首例扇形圖。清晰的傷亡數據對比圖形的震撼展示傳回國內後,輿論譁然,政府立刻組建戰地醫院,大力增加護理人員,從而挽救了更多的生命。她的壯舉在中國也成就了奉獻與愛心的代名詞:南丁格爾精神。我想,對於同樣從事維護與治理工作的數據人員,這種精神與睿智同樣具有榜樣的力量!
本書所要面對的資料庫管理與性能最佳化的讀者,應該心存幾個長久不衰的問題:
如何著書立傳?怎樣寫出高水平的著作
寫作這門藝術,是我多年探索的目標。在出版幾部資料庫著作後,通過親身經歷,現在為有志向著書立說的朋友分享一些經驗。從技術著作的寫作技巧來看,按水平高低分為幾個檔次:
1.善用圖、表、例者,贊而嘉之
視覺效果需要衝擊。人的大腦皮層中,有41%是視覺反應區。圖像比文字傳遞信息更加快捷、直觀,無論是對會場中的聽眾,還是對高高在上的決策者,抑或正在翻看書籍的讀者。因此,善用圖表來解釋證明技術問題,是聰明而合理的方式。在數據領域,這種美學範疇也導致了商業智慧型、數據可視化等細分學科的迅猛發展。因而在寫作過程中,應毫不吝嗇地增加圖表的數量與質量。
而舉例,則是寫作技巧中更能展示實力的方法。實際上讀者更傾向於閱讀實戰類的書籍,例子多多益善、案例不勝枚舉的書想必會大受歡迎。
2.比喻,是講述問題的更高層次的方式
從事計算機領域的工作,需要邏輯思維、形象思維、抽象思維。枯燥的理論闡述常使讀者昏昏欲睡,不知所云。而打比喻,無疑是亮點。通過打比喻,可以把深奧的技術點帶進我們熟知的領域。我所仰慕的墨家學說里有種理念是:世間的道理只有那么一點點。所謂大道至簡,分化在各個領域出現了不同的形態,而比喻恰恰能夠把看似複雜的理論提煉為我們易懂的道理。記得王濤有篇文章是通過我們所熟悉的在銀行交易的場景做比喻,來講解代理進程、分區內並行、分區間並行、分區資料庫等概念,這種講述方式受到了廣泛讚許,也是比喻這種方式的功力展現。
3.講故事,是比喻的更為生活化的闡述方法
我們現在已經可以接觸到越來越多的筆記類的資料庫著作,我在著作中也曾有嘗試,也期待著有更多類似書籍的出現。
4.什麼樣的著作才稱得上經典中的經典
我認為,一本讀物,尤其是資料庫著作,如果能使讀者在通讀全書後,對人生有所感悟,在哲理層面有所收穫,甚至還有勵志的效果,那么這樣的著作實為經典中的經典。
為什麼性能最佳化這么重要
資料庫性能最佳化之所以愈發重要,究其原因是數據爆炸的發生,迫使我們追求更為快捷、高效的生活狀態與工作方式。這其中涉及多種辭彙:信息增長、數據爆炸、海量數據、大數據等。
之前我曾讀過一本關於數據的科幻小說,叫作Cagatis。它講的是在未來,人類掌握了預知本領,那並非是占卜,而是通過關聯數據分析來預測人類的行為,比如一個人的信用卡記錄、網聊記錄、駕駛記錄、旅行記錄、醫療記錄、通話記錄等,之後對這個人自出生後的所有相關數據進行綜合分析,利用生物資料庫模型與人類行為分析算法,就可以準確地預測此人下一步的所作所為。事情遙遠嗎?其實正逐步發生!有新聞報導,美國曾發生有公職人員參與非法賭博,通過獲取對手的車牌號、教育背景、網路留言等個人信息,分析預測出對方在投賭時的心理。
而從目前看來,微博、微信都已不再是新鮮事物,個人的數據逐漸開放與透明,而計算機系統捕捉與分析信息的能力也愈發強大,這延伸了一個倫理層面的重大問題:在不遠的將來,是我們更懂我們,還是機器更懂我們?古老中國的“知己知彼,百戰不殆”的精髓將會被數據預測系統演繹得淋漓盡致!也許你我正一步步地從生物王國走向數據王國,而在這根鏈條上,與日俱增的海量信息的處理與分析,一定對系統的運營最佳化與性能處理提出了持久的需求與考驗。
如何深入學習資料庫知識
要想深入學習資料庫知識,不能僅僅著眼於技術問題的積累,更要通觀體系與全局。回顧整個資料庫的發展史,可以說,數據的演進發展使我們的生活趨向開放與透明,是從封閉到開放的過程。最初,二進制的出現,是對數據組織與處理的革命性貢獻,也是軟體運行的支點。之後IBM的研究員Edgar F.Codd提出了關係型資料庫,首次將之前軟體的混沌形態分解為數據與程式,使對信息的禁錮得以解放。最顯著的效果就是基於事務處理的OLTP(Online Transaction Processing)系統的誕生,在航空、金融、軍事等領域遍地開花。在這個過程產生了大量的數據(Data),大量的記錄(Record)被存儲,但是數據並非信息(Information),也不是知識(Knowledge),更不能成為智慧(Wisdom)。當系統愈發龐大、複雜時,人們發現正確、合理的決策愈發困難,面對大量的數據,竟然會失去對數據的正確判斷與控制!
之後,決策支持系統應運而生,這需要將原有的數據系統進一步劃分為運營處理系統與決策分析支持系統,這使得數據倉庫橫空出世。數據倉庫是從數據到智慧的過程中的轉折點,是對多類數據源的強有力的整合,又通過ETL(Extraction Transformation Load)工具的支持輔佐,一躍成為進入21世紀時的明星。不過對於真正的由數據衍生出的智慧,還需要更高層面上的系統——OLAP(Online Analytical Processing)在線上分析處理系統。它首次將多維的理念引入分析領域,使得我們可以在各個維度之間任意切換,從不同的維度、粒度對數據進行分析整理,繼而得到動態、完整、靈活的分析報告。
之後離商業智慧型的實現越來越近,這主要基於新的技術走向前台——數據挖掘。最典型的案例就是啤酒與尿布的例子,它代表著數據挖掘技術帶來的智慧與體驗。它可以發現規律,而發現規律意味著可在一定程度上預測未來。這種從已知到未知的進程,使數據的生命發生了質變。
報表,這一將數據轉化為知識的展現工具已經成熟,新一代的數據展現工具百花齊放,這實現了商業智慧型從數據整合、分析、挖掘到展現的完整鏈條。這個鏈條的發端是若干獨立的關係型資料庫,經過數據整合而形成多源統一的數據倉庫,之後經過在線上分析處理,或者是數據挖掘,找到其內在的趨勢,而這就形成了知識。如果將這些知識進行可視化處理,合理的展現結果就會為決策者形成意識與認識。如今,大數據時代的到來,更加個人化、更加分散、更加難以處理的非結構化的海量數據,給高效地形成認識這一資料庫的終極目標,帶來了有趣而艱巨的挑戰。
深入理解資料庫的過程就像資料庫本身的歷史一樣漫長而複雜。本書有一章在講述SQL語句性能最佳化武器時,套用了武俠小說里的7種武器。這是作者在寫作風格上的大膽嘗試,也是從古龍小說中借鑑的對資料庫工作在哲學層面上的思考。這說明了資料庫性能最佳化技術是單調的,但使用這一技術的人是靈活的,不管掌握的是武器,還是工具,都不如對人的心靈與精神的把握更具有內涵與力量。想起年少時,武術老師講授內家功與外家拳,曾講到:“內家十年不出手,十年之後打平手,十年下來遍地走”。本書書名中“內部解析”其實就是在講授“內練一口氣,外練筋骨皮”的道理。若按此精神堅持下去,一定會有所建樹,綻放光彩。
筆者在為本序落筆時,再次建議大家加入知識分享與傳播智慧的大軍中來,所謂以小愛博眾終無大智慧,以大愛感召必會驚天動地。
成孜論
資深資料庫專家、著名資料庫專著作者
推薦序四
讀書,品書,回味與思索,一直是我工作生活的一部分。對於本書,一見書名《讓DB2跑得更快——DB2內部解析與性能最佳化》,立刻就使我產生了興趣與期望。在讀過上百本資料庫方面的書籍後,感到有的書催人思考,有的書主推實踐,還看過有的書是技術達人對技術菜鳥的煽動,也見過技術牛人寫書像是擺下擂台孤獨求敗,但是結合資料庫內部機理介紹性能調優等方面的書籍卻非常缺乏。本人在銀行業從事系統設計及性能最佳化的十多年時間裡,深切感受到DB2這方面書籍的稀少對從業者的困惑。因此我更青睞於那些重在強調理論與實踐結合的技術作品,而對有關資料庫性能最佳化的書籍則更是期待。
一直以來,資料庫性能最佳化都是大型套用系統中技術含量較高的工作。是否能夠針對業務特點合理地設計一個資料庫的架構,能否更好地保證擴展性並將套用性能發揮到最大化,能否編寫高效的SQL語句,這對於系統的穩定與安全運行至關重要。而在解決問題的表象背後,資料庫性能最佳化的工作遠遠不止表面看到的那么簡單,有時發現的問題只是冰山一角,有時解決掉的故障只是偏安一隅。值得注意的是,本書作者曾經在DB2技術支持的第一線奮鬥過,其對於DB2性能最佳化、故障排除等各種技術工作的經驗總結與技能提煉,對讀者來說肯定是極好的知識盛宴與分享。
在思考為本書作序時,突然想起在一次資料庫技術交流會上,有位業界朋友描述了兩種典型的DBA工作狀態:一種是不求有功但求無過;另一種是只見樹木,不見森林。
第一種工作狀態可以延伸到一個有趣的現象:羊群效應。這種效應說的是頭羊向哪個方向走,後面的羊就低著頭跟在頭羊後面沒有異議,沒有懷疑地走。在金融與投資領域,這被解釋為跟從模仿與盲目效仿的行為方式。其實這種現象,在從事資料庫技術的領域中也常有發生:當之前有人說該如何做時,後來的人往往以為這就是定論,懷疑的人不多,想去嘗試的人就更少;當不曾有人嘗試,或者講授改動某個參數的設定,調整某個參數,避免某種隱患的時候,有些技術人員往往對問題避而遠之,抑或知其然而不知所以然。常可以見聞有些DBA的工作態度是:多一事不如少一事;能少做,就少做;能不動就不動,能不改就不改,因為擔憂困擾的是在這一改一動之間,不知道會引發什麼樣的事故。不求功但求無過的想法,確實成了資料庫技術人員提高能力、最佳化思路、增強實戰解決問題能力的攔路虎。
接著講一下前面提及的第二種工作狀態:只見樹木,不見森林。對於已經有一定DB2使用經驗的技術人員,比如做過安裝、管理、備份操作,對DB2資料庫具備一定感性認識,但是大腦里還沒有形成完整的理論框架的技術人員,在接下來的工作積累的過程中,隨著經驗的增加,是不是離把控全局的階段更近了呢?我們可以做個比喻:畫一個圓圈,圓內代表你擁有的知識,圓外代表未知領域,這個圓圈畫得越大,代表你擁有的知識就越多,而圓圈接觸到的未知領域就更廣。因此,這就可以解釋為何有的技術人員,在解決一個問題後,本以為掌握了處理這個問題的方法,可過一段時間後,實戰經驗更豐富些了,在遇到同樣的問題後,反倒弄不明白該如何解決了。所謂只見樹木,不見森林,正是漫長學習、積累過程中的一個關鍵階段的寫照。對於技術層面的問題分析,更需要我們追逐本質,挖掘內涵,這樣在故障解決、性能最佳化等高技術含量的工作中,才能做到舉重若輕,正確判斷。
而我有幸在本書出版之前先睹為快,其中就分析講解了如上所述的幾種現象,我感到本書最大的特點是側重於系統的理論分析與實戰經驗講解,內容全面,深入淺出,例題豐富,圖文並茂,這將會是廣大資料庫愛好者的重要參考書籍。
因此當資料庫技術愛好者在學習、研究和套用DB2資料庫時,感到可用的參考資料比較少,實戰性的方案與經驗分享缺乏,抑或感到在DB2系統部署、性能最佳化、故障診斷等工作環節中,需要更好的技術指導與參照時,我可以鄭重地說:一本理性、科學的DB2性能最佳化著作出爐了!大家可從中一同品悟DB2,共賞精華!
唐志剛
崑崙銀行信息科技部資深技術經理兼數據中心主任

前言

寫作背景
作為最早出現的關係型資料庫,DB2提供了高層次的數據利用性、完整性、安全性、可恢復性,以及小規模到大規模應用程式的執行能力。並且DB2以擁有一個非常完備的查詢最佳化器而著稱,其外部連線改善了查詢性能,並支持多任務並行查詢。近幾年來,為了應對爆炸式增長的數據量,DB2也在進行推陳出新,不斷推出完美應對大數據的技術,並持續增強DB2的性能以及可用性。到本書出版之時,DB2已經推出了V10.5版本,並在該版本中提供了列式存儲功能及更加強大的性能提升。
DB2隨著一代代版本的發展,已經成為一個龐然大物,其內部組件眾多,對於SQL語句的處理有時甚至需要調動數十個內部組件進行相互協同。當遇到性能問題時更需要對內部原理有詳細的了解才能進行有效的處理以及應對,否則就會讓人感到無從下手。與Oracle資料庫相比,DB2資料庫的資料顯得相對匱乏,其中鮮有對其內部運行機制進行詳細剖析的資料,這也給DB2的傳播發展帶來了一定的弊端。因此對於這種情況,儘可能地將自己所知分享出來的想法從我腦中湧現,儘可能地對DB2處理過程在流程上進行闡述的念頭一直支持著我完成本書的寫作。
在常見的資料庫問題中,性能問題不僅出現的頻率較高並且很多生產系統中並不存在一個對性能問題進行隔離的高可用機制,正因為如此,在很多關鍵行業的系統中,性能問題往往成為影響生產系統正常運行的最大因素。而性能問題的影響時間有時長達數小時,這樣不僅給生產系統帶來了極大的負面影響,也使業務很難正常進行。
由於性能問題的特殊性,很多情況下問題發生過後並沒有留下任何有效的故障信息,這又給之後的分析處理帶來了一定的難度和困擾,往往並無相關線索可以對其進行求證。而對於性能問題的信息收集及調優方法,目前關於DB2性能調優的資料過於分散,並沒有提供一個很完善的性能解決體系,甚至有些資料中僅僅在套用各個KPI指標對性能問題進行調節,雖然這種方式有時能夠解決一些問題,但在更多時候會顯得無能為力。
在本書中,通過對DB2資料庫的內部機制進行探討,希望能夠讓讀者更好地理解資料庫的運行機制,當性能問題發生時能夠在腦海中對資料庫的整體運作機制有個清晰的認識,這樣才能夠直接有效地對資料庫進行分析與最佳化。
感謝讀者選擇本書,筆者水平有限,書中錯漏在所難免,敬請讀者朋友諒解,並期望讀者朋友進行指正。
本書結構
全書分為5大篇共13章。第1篇主要對性能問題的定義、影響性能問題的因素、DB2的整體組件結構,以及對於各種類型語句的處理機制進行詳細的探討;第2篇主要針對DB2提供的各個監控工具進行闡述,並提供了一些監控建議;第3篇主要闡述DB2的內部運行機制及各個組件的原理;第4篇包含DB2中內部工具的最佳化與運行機制,以及DB2在各個平台中需要注意的性能參數;第5篇對性能最佳化思路進行了概括性的總結。
第1篇 性能定義及整體架構
第 1 章主要對性能問題的目標進行了闡述和定義,並描述了可能影響各個工作負載的特徵,以及可能對其產生性能影響的因素。
第2章對DB2的體系結構進行了基本介紹,並描述了DB2各個組件處理SQL語句的基本原理與機制。
第2篇 性能監控工具及監控技巧
第3章按照監控特性對DB2提供的監控工具進行了基本介紹,並介紹了一些基本的監控技巧。
第3篇 性能分析及內部原理剖析
第4章對最佳化器的原理進行了探討,闡述了最佳化器的重寫機制、最佳化原理及編譯原理,並介紹了如何檢查最佳化器的估算結果的兩種方法。
第5章介紹了解決最佳化器編譯問題的的7種性能最佳化武器,以及何時且如何才能有效地使用這些武器解決實際問題。
第6章描述了為了避免性能問題應該如何對資料庫表及索引進行有效設計,針對合適的場景使用適合的技術才能更有效地避免性能問題的發生。
第7章詳細描述了DB2資料庫的I/O原理,I/O性能通常是資料庫運行過程中最為耗時的一環,本章詳細介紹了DB2相關I/O情景,以及如何有效地提高I/O性能。
第8章詳細介紹了DB2中各個記憶體池的分配以及作用,並講述了怎樣定位及修復記憶體泄露的方法。
第9章對資料庫的物理結構進行了詳細剖析,並講解了各種情況下物理結構對於資料庫性能的負面影響及避免方法。
第10章對DB2中鎖及latch等待事件進行了描述與分析,並分享部分等待事件解決案例及心得。
第4篇 實用工具調優及作業系統最佳化
第11章講述了backup、restore、export、import、load、reorg、runstats等DB2提供的多種實用工具的執行原理以及性能調優方法。
第12章介紹了AIX及Windows平台上CPU、記憶體、磁碟I/O及網路等方面的相關最佳化參數。
第5篇 性能分析思路及最佳化總結
第13章對性能分析思路進行了歸納與總結,並按照資源占用問題及回響時間緩慢的問題對資料庫性能問題提供了整體分析的思路與解決方案。

相關詞條

熱門詞條

聯絡我們