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

DB2跑得更快——DB2內部解析與性能優化數據庫

DB2數據庫領域的精彩強音,DB2技巧精髓的熱心分享,資深數據庫專家牛新莊、幹毅民、成孜論、唐志剛聯袂推薦!)緩存

 洪燁安全

201310月出版性能優化

訂價:79.00網絡

 

編輯推薦架構

    本書做者在DB2China數據庫論壇擔任熱點討論版塊版主,主持屢次熱點討論以及專家現場診斷,擅長DB2數據庫及相關產品的性能調優及故障分析,對DB2技能及實踐經驗有多年積累,而且近年來多位業界專家一直在積極推進DB2領域的技術交流,真正理解DB2技術人員真正的需求與痛楚,是DB2系統知識及技巧精髓的熱心分享者及貢獻者。數據庫設計

    做者本人出於對DB2的狂熱與追求,經過長期的凝練與匯聚,將DB2知識系統化,把DB2數據庫調優技巧的精髓熱心地分享給廣大讀者,而且憑藉深厚而紮實的理論及經驗,對DB2數據庫的內部進行了深刻解析,這是對數據庫領域所作出的重要貢獻與精彩強音!函數

    單看「內部解析」四個字,就已經能體現本書的寶貴价值,在「內部解析」的基礎上進行「性能優化」,定會讓您的DB2「跑得更快」!工具

內容提要性能

    本書以優化爲主題,根據數據庫內部原理將DB2數據庫對SQL語句及其餘操做的內部機制進行詳細剖析,並將RDS、DMS、IXM、BPS等DB2內部組件鮮爲人知的一面展示給你們,以期作到對數據庫的調優過程知其然並知其因此然。同時本書結合響應時間與資源瓶頸兩種性能問題的現象,對數據庫調優的總體思路進行詳細講解,對原來老式的調優思路進行整理和改動,結合了DB2 V10.1版本的一些新的監控工具及特性,以一種全新的方式闡述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命令觀察當前數據庫中各部份內存的使用狀況。輸出結果以下:

>>>> Database Partition 0 Memory Statistics <<<<

Controller Enabled:   Y

Controller Automatic: Y

Memory Limit:         28609436 KB  內存限制(INSTANCE_MEMORY的值)

Current usage:        898240 KB       當前內存的使用量

HWM usage:            898240 KB 內存最高使用量

Cached memory:        271424 KB   總共的緩存大小

 

Individual Memory Consumers:

Name             Mem Used (KB) HWM Used (KB) Mem Cached (KB)

============================================================

APPL-LIAM               160000        160000          159616

DBMS-lfinnie             36608         36608            3648

FMP_RESOURCES            22528         22528               0

PRIVATE                  12032         12032             256

FCM_RESOURCES            10048         10048               0

LCL-p1130882               128           128               0

DB-LIAM                 656896        656896          107904

    能夠看到當前分區中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已經推出了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章對性能分析思路進行了概括與總結,並按照資源佔用問題及響應時間緩慢的問題對數據庫性能問題提供了總體分析的思路與解決方案。

相關文章
相關標籤/搜索