基本信息
· 出版日期:2009 年5月
· 開本:16開
· 頁碼:499
· 版次:1-1
內容簡介
這本書正是覆蓋了性能調優所需要的全部領域,並提供了大量的性能調優的實際案例。.
最難得的是作者分享了10年積累的DB2性能調優案例和經驗總結
編輯推薦
從全局的角度(作業系統、存儲、資料庫設計和套用SQL)來講解如何調優。.
本書將基本概念、深入研究、性能監控、調整案例等相關內容,按照每章一條主線展開,從而使讀者通過每章的閱讀,能夠對相關知識有一個縱向的深入認知。..
本書性能問題基本上涵蓋了實際工作中90%的性能問題,具有重大參考價值。
書籍目錄
第1章 性能調整概述. 1
1.1 性能概述 2
1.2 性能評估 4
1.3 建立性能目標 7
1.4 什麼時候需要做性能調整 8
1.5 性能調整準則 9
1.6 性能調整的方法和過程 10
1.6.1 性能調整的步驟 10
1.6.2 性能調整的限制 11
1.6.3 向客戶了解情況 11
1.6.4 性能調整流程圖 12
1.7 性能調整總結 15
第2章 存儲I/O設計 19
2.1 存儲基本概念 20
2.1.1 硬碟 20
2.1.2 磁碟陣列技術 21
2.1.3 存儲的Cache 22
2.1.4 IOPS 22
2.1.5 網路存儲技術 23
2.2 存儲架構 24
.2.2.1 存儲I/O處理過程 24
2.2.2 套用系統I/O流動圖 24
2.2.3 RAID IOPS 26
2.2.4 RAID 10和RAID 5的比較 28
2.3 存儲相關性能調整案例 31
2.4 存儲I/O設計總結 32
第3章 作業系統相關性能問題 35
3.1 HP-UX系統性能監控綜述 35
3.1.1 監控資源對象和標準 35
3.1.2 監控工具 36
3.1.3 監控系統總體運行狀態 36
3.1.4 性能狀態的判定流程和監控命令 38
3.2 AIX性能監控綜述 47
3.2.1 監控工具 47
3.2.2 監控系統總體運行狀態 48
3.2.3 監控CPU性能 51
3.2.4 監控記憶體使用 55
3.2.5 監控存儲系統狀態 57
3.2.6 監控網路狀態 58
3.3 作業系統性能最佳化 60
3.3.1 直接I/O和並發I/O 61
3.3.2 異步I/O和同步I/O 62
3.3.3 minpout和maxpout 65
3.3.4 檔案系統和裸設備 65
3.3.5 負載均衡及條帶化(Striping) 66
3.4 邏輯卷和lvmo最佳化 72
3.4.1 使用lvmo進行最佳化 73
3.4.2 卷組 pbuf 池 73
3.4.3 pbuf設定不合理導致性能問題調整案例 74
3.4.4 使用 ioo 進行最佳化 78
3.5 總結 83
第4章 資料庫物理設計和邏輯設計 85
4.1 資料庫物理設計 85
4.1.1 表空間容器放置原則 85
4.1.2 資料庫物理設計原則 86
4.2 資料庫邏輯設計 86
4.2.1 緩衝池設計原則 86
4.2.2 表空間設計原則 91
4.3 使用Autoconfig設計資料庫 99
4.4 其他高級設計技術 102
4.4.1 表分區及套用案例 102
4.4.2 資料庫分區及套用案例 104
4.4.3 多維群集(MDC)及套用案例 106
4.4.4 物化查詢表及套用案例 110
4.4.5 MDC、資料庫分區、MQT和表分區配合使用 114
4.4.6 表壓縮及套用案例 125
4.4.7 表壓縮套用案例二 132
4.4.8 XML及套用案例 140
4.5 資料庫設計總結 142
4.5.1 表空間與表設計方面的考慮 142
4.5.2 索引設計方面的考慮 146
4.5.3 緩衝池方面的考慮 147
4.5.4 總結 148
第5章 DB2性能監控 149
5.1 快照監視器案例 149
5.1.1 監控動態SQL語句 149
5.1.2 監控臨時表空間使用 152
5.2 事件監視器及監控案例 153
5.3 利用表函式監控 158
5.4 性能管理視圖及案例 163
5.4.1 監控緩衝池命中率 165
5.4.2 監控Package Cache大小 165
5.4.3 監控執行成本最高的SQL語句 166
5.4.4 監控運行最長的SQL語句 166
5.4.5 監控SQL準備和預編譯時間最長的SQL語句 167
5.4.6 監控執行次數最多的SQL語句 167
5.4.7 監控排序次數最多的SQL語句 168
5.4.8 監控LOCK WAIT等待時間 168
5.4.9 監控LOCK CHAIN 169
5.4.10 監控鎖記憶體使用 170
5.4.11 監控鎖升級、死鎖和鎖逾時 170
5.4.12 監控全表掃描的SQL 171
5.4.13 檢查page cleaners是否足夠 171
5.4.14 監控prefecher是否足夠 172
5.4.15 監控資料庫記憶體使用 173
5.4.16 監控日誌使用情況 173
5.4.17 監控占用日誌空間最舊的交易 174
5.4.18 用SQL監控健康指示器 174
5.4.19 監控存儲路徑 175
5.4.20 追蹤監控歷史 176
5.5 db2pd 176
5.5.1 常用db2pd監控選項和示例 177
5.5.2 使用db2pd監控死鎖案例 191
5.5.3 db2pd使用問題總結 196
5.6 db2mtrk及監控案例 197
5.7 本章小結 200
第6章 資料庫配置參數調整 201
6.1 資料庫配置參數 201
6.2 監控和調優實例(DBM)配置參數 203
6.2.1 代理程式相關配置參數 203
6.2.2 SHEAPTHRES 206
6.2.3 FCM_NUM_BUFFERS 206
6.2.4 SHEAPTHRES_SHR 207
6.2.5 INTRA_PARALLEL 208
6.2.6 MON_HEAP_SZ 208
6.2.7 QUERY_HEAP_SZ 208
6.3 監控和調優DB配置參數 208
6.3.1 緩衝池大小 209
6.3.2 日誌緩衝區大小(LOGBUFSZ) 215
6.3.3 應用程式堆大小(APPHEAPSZ) 216
6.3.4 SORTHEAP和SHEAPTHRES 217
6.3.5 鎖相關配置參數 219
6.3.6 活動應用程式的最大數目(MAXAPPLS) 223
6.3.7 PKGCACHESZ 224
6.3.8 CATALOGCACHE_SZ 224
6.3.9 異步頁清除程式的數目(NUM_IOCLEANERS) 224
6.3.10 異步I/O 伺服器的數目(NUM_IOSERVERS).. 226
6.3.11 組提交數目(MINCOMMIT) 226
6.3.12 AVG_APPLS 228
6.3.13 CHNGPGS_THRESH(DB) 228
6.3.14 MAXFILOP 229
6.3.15 LOGPRIMARY、LOGSECOND和LOGFILSZ 229
6.3.16 STMTHEAP 229
6.3.17 DFT_QUERYOPT 229
6.3.18 UTIL_HEAP_SZ (DB) 230
6.4 調整DB2概要註冊變數 230
6.4.1 DB2_PARALLEL_IO 230
6.4.2 DB2_EVALUNCOMMITTED 232
6.4.3 DB2_SKIPDELETED 232
6.4.4 DB2_SKIPINSERTED 232
6.4.5 DB2_USE_PAGE_CONTAINER_TAG 233
6.4.6 DB2_SELECTIVITY 233
6.5 記憶體自動調優 233
6.5.1 記憶體自動調優示例 234
6.5.2 啟用記憶體自動調優及相關參數 235
6.6 總結 237
第7章 鎖和並發 239
7.1 鎖等待及調整案例 239
7.1.1 鎖等待問題解決流程和步驟 240
7.1.2 捕獲引起鎖等待的SQL 242
7.1.3 利用db2pd捕獲鎖逾時 244
7.2 鎖升級及調整案例 248
7.2.1 監控鎖升級 249
7.2.2 鎖升級調整 250
7.3 死鎖及調整案例 252
7.3.1 利用事件監視器監控死鎖 253
7.3.2 死鎖案例 255
7.3.3 最小化死鎖建議 257
7.4 隔離級別與鎖 257
7.4.1 可重複讀(RR—Repeatable Read) 258
7.4.2 讀穩定性(RS—Read Stability) 259
7.4.3 游標穩定性(CS—Cursor Stability) 261
7.4.4 未提交讀(UR—Uncommitted Read) 263
7.4.5 隔離級別加鎖總結 265
7.4.6 隔離級別總結 269
7.5 最大化並發性 271
7.5.1 選擇合適的隔離級別 271
7.5.2 儘量避免鎖等待、鎖升級和死鎖 271
7.5.3 設定合理的註冊變數 271
7.6 鎖相關的性能問題總結 280
7.7 鎖與應用程式開發 282
7.8 本章小結 285
第8章 索引設計與最佳化 287
8.1 索引概念 287
8.1.1 索引優點 287
8.1.2 索引類型 289
8.2 索引結構 290
8.3 理解索引訪問機制 293
8.4 索引設計 296
8.4.1 創建索引 296
8.4.2 創建集群索引 297
8.4.3 創建雙向索引 297
8.4.4 完全索引訪問(index access only) 299
8.4.5 與創建索引相關的問題 299
8.4.6 創建索引示例 300
8.5 索引創建原則與示例 301
8.5.1 索引與謂詞 301
8.5.2 根據查詢所使用的列建立索引 303
8.5.3 根據條件語句中謂詞的選擇度創建索引 304
8.5.4 避免在建有索引的列上使用函式 305
8.5.5 在那些需要被排序的列上創建索引 306
8.5.6 合理使用INCLUDE關鍵字創建索引 307
8.5.7 指定索引的排序屬性 308
8.6 影響索引性能的相關配置 309
8.6.1 設定影響索引性能的配置參數 309
8.6.2 為索引指定不同的表空間 309
8.6.3 確保索引的集群度 310
8.6.4 使表和索引統計信息保持最新 310
8.6.5 重組索引 311
8.7 索引維護 311
8.7.1 異步索引清除(AIC) 312
8.7.2 在線上索引整理碎片 314
8.8 DB2 Design Advisor(db2advis) 315
8.9 索引調整總結 319
8.9.1 索引設計總結 319
8.9.2 索引性能總結 321
第9章 DB2最佳化器 325
9.1 DB2最佳化器介紹 326
9.2 SQL語句執行過程 328
9.3 最佳化器組件和工作原理 331
9.3.1 查詢重寫方法和示例:謂詞移動、合併和轉換 331
9.3.2 查詢重寫示例:視圖合併 332
9.3.3 查詢器重寫示例:消除DISTINCT 335
9.3.4 查詢器重寫示例:隱含謂詞 336
9.4 掃描方式 337
9.4.1 全表掃描 337
9.4.2 索引掃描 338
9.5 連線方法 341
9.5.1 嵌套循環連線 343
9.5.2 合併連線 344
9.5.3 哈希(hash)連線 345
9.5.4 選擇最佳連線的策略 346
9.6 最佳化級別 347
9.7 如何影響最佳化器來提高性能 348
9.7.1 使DB2統計信息保持最新 348
9.7.2 構建適當的索引 349
9.7.3 配置合理的資料庫配置參數 350
9.7.4 選擇合適的最佳化級別 351
9.7.5 合理的存儲I/O設計 351
9.7.6 良好的應用程式設計和編碼 352
9.8 最佳化器總結 352
第10章 統計信息更新與碎片整理 353
10.1 統計信息更新 353
10.1.1 統計信息的重要性 353
10.1.2 統計信息更新示例 357
10.1.3 LIKE STATISTICS統計信息更新 360
10.1.4 列組統計信息更新 361
10.1.5 分布統計信息更新 371
10.1.6 統計信息更新策略 377
10.2 碎片整理 379
10.2.1 碎片產生機制和影響 379
10.2.2 確定何時重組表和索引 380
10.2.3 執行表、索引檢查是否需要做REORG 383
10.3 重新綁定程式包 385
10.4 本章小結 386
第11章 SQL語句調優 389
11.1 通過監控找出最消耗資源的SQL語句 389
11.2 通過解釋工具分析SQL語句執行計畫 390
11.2.1 解釋表 391
11.2.2 Visual Explain(可視化解釋) 392
11.2.3 db2expln 400
11.2.4 db2exfmt 403
11.2.5 各種解釋工具比較 405
11.2.6 如何從解釋信息中獲取有價值的建議 406
11.3 理解SQL語句如何工作 406
11.3.1 理解謂詞類型 406
11.3.2 排序和分組 410
11.3.3 連線方法 412
11.3.4 掃描方式 413
11.4 SQL調優案例 413
11.4.1 用一條語句即可做到時避免使用多條語句 413
11.4.2 合理使用NOT IN和NOT EXISTS 414
11.4.3 合理使用子查詢減少數據掃描和利用索引 417
11.4.4 調整表的連線順序,減小中間結果集的數據量 418
11.4.5 在有偏差數據的情況下使用參數標記時,指定選擇性 420
11.4.6 SQL使用UDF代替查詢中複雜的部分 420
11.4.7 從多個SQL語句到一個 SQL表達式 422
11.4.8 使用SQL一次處理一個集合語義 423
11.4.9 在無副作用的情況下,請使用SQL 函式 425
11.4.10 小結 426
11.5 提高應用程式性能 426
11.5.1 良好的SQL編碼規則 426
11.5.2 提高SQL編程性能 428
11.5.3 改進游標性能 430
11.5.4 根據業務邏輯選擇最低粒度的隔離級別 431
11.5.5 通過REOPT綁定選項來提高性能 431
11.5.6 統計信息、碎片整理和重新綁定 432
11.5.7 避免不必要的排序 433
11.5.8 在C/S環境中利用SQL存儲過程降低網路開銷 433
11.5.9 高並發環境下使用連線池 433
11.5.10 使用Design Advisor(db2advis)建議索引 434
11.5.11 提高批量刪除、插入和更新速度 434
第12章 DB2調優案例、問題總結和技巧 437
12.1 調優案例一:某移動公司存儲設計不當和SQL引起的I/O瓶頸 437
12.2 調優案例二:某銀行知識庫系統鎖等待、鎖升級引起性能瓶頸 444
12.3 調優案例三:某汽車製造商ERP系統通過調整統計信息提高性能 453
12.4 調優案例四:某農信社批量代收電費批處理慢調優案例 464
12.5 調優學習案例:利用壓力測試程式學習DB2調優 468
後 記 501
參考文獻... 503
前言
在介紹本書前,我先講講我的資料庫學習之路。我在1999年剛剛開始念碩士時就給自己確定了以後的發展方向,當時定了兩個:網路和資料庫技術。因為2000年時,網路特別紅火,擁有CCNP、CCIE認證的特別牛。所以自己也考了CCNP證書,但是到後來我發現網路有很多是硬體層面的東西,對廠商的依賴特彆強,而且面特別窄。所以慢慢地就把這個方向放棄了,而我喜歡鑽研,就選擇了資料庫技術。在確認好資料庫這個方向後,我深入地學習了資料庫理論方面的知識,我記得中國人民大學王珊教授那本《資料庫系統原理教程》一書我讀了幾十遍。在對資料庫理論學習的同時,我也開始對DB2和Oracle進行深入學習。.
我是從1999年開始使用DB2 V5.2的,那時因為我導師做一個課題需要用到DB2資料庫。那時市場上關於DB2方面的技術書籍幾乎沒有,網際網路還不像現在這么發達,自己只能依靠查看DB2隨機文檔來學習。那時,我利用自己兼職幫別人做一些小軟體和課題的費用去考OCP認證和DB2認證。其實我認為考認證是一個很好的外界動力來促使自己學習,因為考試需要花費很大一筆費用,如果不想浪費錢就只能拚命地看書。這是一個很大的促使自己看書的外界動力。那時讀研究生有的是時間,所以在2000年我就把OCP 8i的認證通過了,後來又陸續通過了DB2 V5.2的認證。這些認證通過後能很大地增強自己的自信。當時我同時幫導師做應用程式開發工作,那時用PB、Delphi等編程工具。在開發中我有意識地增強自己對SQL的學習,這對我後來的性能調優非常有幫助。因為我很多時候在客戶現場看到同樣一個操作,本來在資料庫中利用函式或者其他高級SQL可以實現的,而開發人員卻頻繁地在資料庫和應用程式之間進行切換,殊不知,在過程層(程式)和資料庫層反覆上下文切換互動會顯著影回響用效率。我認為自己應該是國內寫SQL水平比較高的人,呵呵。所以,首先要有一個清晰的方向和規劃,然後有意識地去往這個方向努力。做好一個時期的人生規劃非常重要,它是你努力的方向,因為積極的學習比被動的學習效率要高太多。
機遇偏愛於有準備的人。記得2001年初的時候我在網上看到一個帖子說要找一個人去安裝DB2資料庫,差旅報銷,每天500元。那時我就喜出望外,因為需要有DB2認證才能去,而我那時DB2系統管理、套用開發的認證都有,所以很快就通過了。後來就去了客戶現場,到了以後才發現不是安裝,而是去給客戶講課,當時我就傻眼了,因為講課需要的遠比安裝配置要難得多,而之前我沒有講過課。沒辦法了,只能前一天夜裡看教材備課到凌晨5點,睡兩個小時,8點半去講課,就這樣4天講課,我每天都是休息3小時左右。還好自己畢竟使用過DB2,而且也過了DB2認證,還是有基礎的。這次講課雖然不太成功,但是畢竟通過了,勉強可以打60分吧,沒想到這次培訓竟是我以後幾年培訓生涯的開始。經過這次講課後,我也看到了自己的差距,知道僅僅擁有認證是不行的,因為客戶問的很多問題,書本上是沒有的,說明自己還需要進一步努力,而且自己看書有些概念雖然不太懂也不會太深入研究,但是如果講課你就自己必須把一些原理概念弄清楚,所以這需要對資料庫有更深入的學習。
後來經過一些其他的渠道,IBM培訓部知道我能講DB2並且有相關證書,就找我講DB2系列課程。所以從2001年開始,我就經常作為IBM官方講師開始講DB2系列所有課程。我感覺到講課是個很好的學習過程,因為講一些內容,你首先自己要搞清楚,這對提升自己有很大的幫助,我把課堂學員問的實際產生的問題自己深入地研究。我自己對培訓有這樣的認識,我是希望學員在這裡聽你講3個小時要遠遠勝過自己看3個小時,而且如果把講一堂課的內容比喻一杯水,那么老師至少應該儲備一桶水,才能駕馭。所以,我在講課準備過程中,精心準備實驗,深入和學員交流。爭取把一些概念能夠用淺顯易懂的例子來講解,而要想做到這些,首先自己必須對這個概念有深刻的理解。所以這在客觀上促進了自己的學習。
隨著培訓的增多,也有一些客戶找我去做一些實際的調優工作。我記得第一次去客戶現場調優是2001年去大連大通證券,當時主要解決鎖等待問題。客戶環境用到了AIX和CICS環境。當時雖然問題解決了,但自己心中還是感覺到比較虛,因為對AIX和CICS不了解,萬一如果是這兩個方面有問題,自己就沒辦法搞定了;同時認識到一個複雜系統的調整往往不是單方面的,需要具備全面的知識。經過這次事情後,我就在網上買了一個140的IBM工作站小機,自己安裝AIX,開始學習AIX。這個期間我一邊學習,一邊把AIX的認證全部過掉。我記得非常清楚,為了做HA的實驗著實費了很大的功夫,因為無法搞到7133陣列,那時小型機不像今天這么普及。後來自己又學習了CICS、WebSphere、MQ和存儲,所以我認為有目的的學習,有壓力和動力的學習效率是非常高的。就這樣,在我培訓的過程中,我發現自己哪個方面薄弱並且這個方向有前途,我就開始學習,不過那個時候我的技術主要以IBM為主。由於自己對培訓比較用心以及客戶的好評,開始找我做培訓的國內培訓機構開始變多,也感覺到這個期間自己的技術水平增長很快。
2002年11月,我參加首屆“IBM DeveloperWorksLive! China 2002”大會,並獲得IBM首次在國內評選的“傑出軟體技術專家”獎,在6名獲獎者中名列第2。獲得這個認證後對我有很大的幫助,因為找我的人更多了,所以2002、2003年是我技術提升最快的兩年,在這兩年我又陸續學習了HP-UX、WebSphere和MQ並通過了認證。其實我有時感覺到如果你把一門技術研究得非常深非常透,這時你再去學習另一門技術,就非常輕鬆,因為技術是觸類旁通的。我在學習完AIX再去學習HP-UX就感覺非常輕鬆。同時,在學習Oracle和DB2後再去學習Informix感覺到很容易。通過這種縱向的深入和橫向的比較,就會思考它們的區別,就能夠發現每一個產品的尺之所長、寸之所短,這樣技術視野更加全局。在學習過程中,不斷地把實踐和理論結合,不斷地補充理論來充實自己,知其然知其所以然。而且通過對一個產品的深入,往往能夠發現這個產品的缺點和需要改進的地方。就拿DB2來說,它的每次版本更新的新特性我基本上在新版本沒有出來之前就猜得差不多了。因為一是我是貼近真實用戶的,了解他們的真實需求;二是自己一直在用,自己不斷地總結思考;三是別的資料庫有,而DB2沒有,那么在下個版本就會增加。所以相對來說,對新版本的新特性學習就非常輕鬆了。..
就DB2而言,我是國內擁有DB2認證最多的人,我擁有DB2 V5.2 、V7.1、V8.1和V9的全部認證。我是國內第一個把DB2 V8認證全部通過的人,當然這也是巧合,因為2003年3月非典我被困在深圳,在網上看到DB2 V8認證從4月1日開始考,就在前一天報名註冊,第二天把DB2 V8(新特性、高級DBA、套用開發、BI等所有認證)全部pass。
2004~2005年基本上是我最忙碌的兩年。那個時候找我講課的培訓機構以及性能調優的客戶非常多,一年我基本上天天在天上飛(當然學校導師那邊我是有辦法搞定的),培訓機構找我講課常常需要提前一個月預約時間。那時除了過年在家幾天,其他時間都是在做培訓和診斷調優等,足跡踏遍國內主要城市。那時我基本上是國內六大行開發中心和數據中心培訓的指定老師,只要時間不衝突,還為北京銀信科技、山東農信、廣東農信、交行大集中IBP等項目做資料庫技術顧問。那時年輕很有精力,我記得有一次是2004年9月,我白天上午9點為上海移動IT部門做AIX動態邏輯分區(DLPAR)的培訓;17點打車前往揚州,20點到達揚州供電局協助他們進行電力負荷控制系統項目上線,徹夜奮戰到凌晨3點半;然後連夜打的趕往上海,凌晨6點到達酒店;休息兩小時,8點出發,準時出現在上海移動培訓現場。那時我對報酬不太在意,我想的是拚命積累技術和客戶資源,不斷對技術學習、鑽研、思考、提高,以及不斷向上成長和孜孜不倦的探索,我就是這樣在不斷的學習、積累以及實踐中成長起來的。
在很長一段時間內,我不斷奔波於國內的各個城市,不計較出差、報酬,在我看來能夠不斷通過實踐讓自己成長是第一要義。而且去的客戶現場越多、處理的問題越多,就越發現自己的不足,然後就拚命地學習,不斷地積累、總結和思考,這樣就進入了一個良性循環。至今我仍然懷念那種充實、緊張和激情的黃金年代。2004年和2005年,我分別在上海、北京註冊了公司。一方面因為以獨立諮詢顧問的個人身份無法出具發票;另一方面,隨著項目越做越大,尤其是很多銀行的資料庫架構和維護項目涉及契約金額也越來越大,需要簽訂契約,以公司的身份來簽契約更加合適。當然這些年並非所有都是一帆風順,也犯過一些重大錯誤。例如,我曾經在2002年5月1日把某機場的資料庫調死,導致機場航班信息管理系統癱瘓;早期也曾經把證券系統因為調整而宕機。這些都對客戶造成了重大影響,同時也讓我思考總結自己的不足。也許這是成長必須要走的路。所以,經過這兩次事件之後,我之後的調優基本上沒有犯過錯誤。
2006年8月我獲得“2006年中國首屆傑出資料庫工程師”稱號,也算是對我這么多年學習資料庫的一個總結吧。2007年開始,我專注於做一些大客戶的運維,相應就減少了培訓的次數。2008年我被建設銀行以217萬年薪聘請為資深技術專家來維護Oracle和Informix資料庫。做技術而言,以一己之力能掙到年薪百萬這常常是我感到自豪的地方,也是讓我感覺到技術的魅力和自己這么多年對技術鑽研的認可。
致學友
其實我講我的技術之路,主要給大家一些參考,尤其對在校學生,我希望我的學習之路大家能夠模仿(畢竟大師級的路是很難模仿的)。而且,這么多年,能取得這么一點小成績,勤奮、努力和堅持一直是我看重的。因為有了這些,不至於機遇惠顧你時,你悵然若失。
在現在的很多年輕人身上,我以為恰恰缺少的就是這樣的忘我與痴迷。在我熟悉的資料庫技術領域,很多年輕人越來越早地將注意力集中在薪水和職位上,開始變得浮躁,而我想說的是,往往是那些將諸如高薪與職位忘懷的人反而能更快地提升。不經一番寒徹骨,安得梅花撲鼻香。這樣的道理人人都懂,可是能夠真正實施的人並不多。
所以,結合我的學習經驗與感悟,有16個字送給進入這一領域的讀者:去除浮躁,認真學習,不斷積累,尋找機遇。
這些年我做資料庫,相對於Oracle資料庫而言,我深深感到DB2技術書籍的匱乏,所以我一直想寫一套DB2方面的技術書籍。坦白地說,寫書是我掙錢性價比最低的一種方式,但是我一直感覺到自己有義務和責任去寫一些東西來給大家分享,也算是對自己10年DB2學習經驗的一個總結吧!但是過去一直沒有時間,直到今年奧運保障期間,有了一些時間,我才寫了這套書。在這套書中,我把套用開發和系統管理剝離開,分成兩條線來講解:《DB2套用開發實戰指導》、《
循序漸進DB2》、《
深入解析DB2》,《DB2資料庫性能調整與最佳化》。其實關於DB2方面的技術還有很多我沒有涉及,例如高可用性、資料庫分區、HDAR、高級安全等,但是限於篇幅和時間,我無法做到全方位的解析。
關於本書
本書側重在資料庫的性能調優。而性能調優是一個系統工程:全面監控分析作業系統、I/O性能、記憶體、套用及資料庫才能快速找到問題根源;深刻理解DB2的鎖及並發機制、索引原理、資料庫參數、最佳化器原理、SQL語句調優等內部機理才能有針對性地快速提出解決問題的方法;快照、db2pd、db2expln及事件監控器等等則是必須要熟練掌握的工具。本書正是覆蓋了性能調優所需要的全部領域,並提供了大量的性能調優的實際案例。
本書系統性地總結了DB2資料庫的性能調整的方法、流程、思路和保持系統良好性能的注意要點。最後,與讀者分享了我10年積累的DB2性能調優案例和經驗總結。本書所講內容適用於DB2 V7、V8和V9.5的所有平台。
資料庫學習之路
這裡我對資料庫學習做個總結:目前市場上雖然有Oracle、DB2、Informix、Sybase和SQL Server資料庫,但是Informix資料庫已經被IBM收購,而Sybase資料庫在技術和市場上正走向沒落。那么剩下的其實就是Oracle、DB2和SQL Server資料庫。SQL Server資料庫非常好,但是很遺憾的是只能在Windows平台使用,所以如果你深入研究SQL Server資料庫我只能說你可以養家餬口,但掙大錢的機率小,因為用SQL Sever資料庫的企業通常錢不多的,呵呵。而國內做Oracle資料庫的人太多了,如果你想在Oracle領域出人頭地,難度極大。反而DB2資料庫做的人不太多,物以稀為貴。DB2資料庫廣泛套用在銀行、電信、製造、零售、保險等行業,所以我強烈建議你學習DB2資料庫,鑽研IBM技術一般相對來說掙大錢的機率會大些。我們的時間精力是有限的,所以必須選擇好方向然後努力為之。
序言
序一
這些年我負責中國DB2的售前技術團隊, 認識牛新莊已經好多年了。印象很深的是2006年與他的幾次交流,我們討論了許多資料庫的實用技術,以及用戶在資料庫管理和套用方面的主要挑戰。他豐富的實戰經驗給我留下了極深的印象。那時他正在參加首屆中國資料庫工程師大賽,最終獲得了最高的傑出資料庫工程師大獎。 .
新莊是國內較早使用DB2的技術人員。他從1999年開始使用DB2 V5.2, 後來在工作中又學習了AIX、WebSphere、CICS和MQ等IBM技術,對Informix和Oracle等資料庫也有非常深的理解。這些年他作為IBM培訓部的認證講師在國內講解資料庫技術,推動DB2在國內的傳播。從2001年至今,新莊作為獨立諮詢顧問往返於國內大中城市,在金融六大行(工農中建交招),農信,證券(國泰君安、海通、大通等),電力(江蘇電力公司、雲南電力公司、山東電力公司等),保險(中國人壽、信誠、平安等),電信,郵政,移動(北京移動、上海移動、江蘇移動、廣東移動、天津移動、湖南移動、西藏移動、新疆移動、山東移動、吉林移動等),青島海爾,雲南紅塔,中遠集團,寶鋼等行業和國內中小企業之間做資料庫設計、維護、問題診斷和性能調優。
深厚的產品知識和豐富的閱歷和經驗,使得新莊在對一些疑難問題的判斷和處理上有獨到的見解。他往往能夠跳出固有的框架從一個廣闊的視角來認識和分析, 並通過多年積累的方法論逐步排查,最終找到解決的方法。這一點在許多大型用戶的案例中都得到了有效的印證,這些年我聽到了很多大型用戶對新莊技能的高度認可。
DB2的學習資料在其信息文檔和網路中有很多,但是就性能調整而言,我認為本書將一系列相關的分散知識點真正形成了一個知識面。資料庫的性能調整實際上涉及很多方面,不僅僅是資料庫本身,而且需要考慮作業系統,存儲規劃,數據模型設計,套用設計,資料庫產品的配置和監控等一系列相關的內容。
這本書不僅從產品的角度來介紹DB2,而且從實戰的角度來剖析基於DB2設計和套用一個好的套用系統應該考慮哪些問題。本書系統性地總結了DB2資料庫的性能調整的方法,內容覆蓋了系統的整體設計規劃,DB2與性能相關的內部核心技術和架構,關鍵的相關套用設計要點,以及穩定運行監控所應考慮的內容。最難得的是分享了作者多年積累的DB2性能調優案例,使讀者有可能在實際的環境中去了解解決複雜問題的思路,將基本的理論和技術與實戰進行結合。
這本書不僅是新莊10年DB2套用經驗的總結,更是他10年對DB2資料庫執著鑽研的結晶。今天已有越來越多的用戶在使用DB2,我相信這本書能對學習和使用DB2提供很大的幫助。希望它能成為您DB2旅程上的一個朋友,為您答疑解惑,點亮您前進的道路。
IBM中國區DB2信息管理技術經理
劉晶煒
2009年1月
序二
2003年與新莊初次相識即給我留下了深刻印象,為人真誠、勤奮、踏實、富有熱情,有著雄厚的資料庫理論知識和高超的資料庫技術,曾為大量的金融機構及大型企業作過資料庫理論及操作培訓。他的授課深入淺出,將枯燥的理論知識講得通俗易懂,贏得了所有培訓人員和企業的高度肯定,為DB2資料庫知識在中國的普及作出了巨大貢獻。在實務上,新莊更是幫助多家金融企業和機構解決了長期困擾的資料庫性能問題。
和書店內滿是Oracle資料庫書籍不同的是,DB2資料庫雖進入國內年數已久,但僅有幾本IBM出版的介紹資料庫基本操作的書籍,介紹性能調優、資料庫內部機理機制等方面的書籍更是非常缺乏。本人在金融行業軟體開發以及系統最佳化的10年時間裡,深刻感受到DB2相關書籍稀少的困苦。偶與新莊談起資料缺乏、高水平DB2書籍稀少的苦惱,均感慨DB2在金融行業使用如此廣泛,大家在開發和運行最佳化時卻僅靠口口相傳,實在不符合DB2在國內金融行業的地位,也不利於這些核心繫統的安全穩定運行。因而突然看到新莊寫了這樣一本深入淺出、講解極為透徹且在實務上也極具操作性的書,不由得喜出望外。
本書側重於介紹DB2資料庫的性能調優,而性能調優是一個系統工程:全面監測分析作業系統、IO性能、網路傳輸、套用及資料庫才能快速找到問題根源;深刻理解DB2的鎖及並發機制、索引原理、資料庫參數、最佳化器原理、SQL語句調優等內部機理才能有針對性地快速提出解決問題的方法;快照、db2pd、db2expln及事件監控器等則是必須要熟練掌握的工具。這本書正是覆蓋了性能調優所需要的全部領域,並提供了大量的性能調優的實際案例,為DB2開發、維護及系統最佳化人員都帶來了福音,更為包括金融行業在內的眾多核心繫統的穩定運行及最佳化提供了指導利器。本書的推廣和熱賣,我極具信心!
海通證券股份有限公司信息技術部總經理助理
國內資料庫頂尖高手..
曾任國內某證券行業TOP5軟體公司技術總監
曾主持開發期貨交易所核心繫統,並主持設計開發多家大型證券公司核心交易系統及風控等管理系統,在金融IT領域有著豐富的實踐經驗和專業背景知識,特別在大型資料庫、大型系統架構設計等方面有著深厚的理論功底及實踐經驗。