DB2資料庫性能調整和最佳化(第2版)

DB2資料庫性能調整和最佳化(第2版)

《DB2資料庫性能調整和最佳化(第2版)》是清華大學出版社出版的圖書,作者是牛新莊。

基本介紹

  • 作者:牛新莊
  • ISBN:9787302325260
  • 頁數:528
  • 定價:78
  • 出版社:清華大學出版社
  • 出版時間:2013-7
  • 裝幀:平裝
內容介紹,作者介紹,作品目錄,

內容介紹

本書側重於介紹DB2資料庫的性能調優。性能調優是一個系統工程:全面監控分析作業系統、I/O性能、記憶體、套用及資料庫才能快速找到問題根源;深刻理解DB2的鎖及並發機制、索引原理、資料庫參數、最佳化器原理、SQL語句調優等內部機理才能針對性地快速提出解決問題的方法;快照、db2pd、db2expln及事件監控器等則是必須熟練掌握的工具。這本書覆蓋了進行DB2資料庫性能調優所需的全部知識和工具,並提供了大量的性能調優的實際案例。
本書系統性地總結了DB2資料庫性能調整的方法、流程、思路和保持系統良好性能的注意要點。最難得的是作者分享了其10年積累的DB2性能調優案例和經驗總結。

作者介紹

牛新莊,國內頂尖數據架構和信息治理專家,擔任對外經濟貿易大學客座教授、北京交通大學兼職教授、中國DB2用戶協會(CDUG)理事長、亞洲金融合作聯盟信息科技委員會主任。2008年曾以217萬年薪受聘於中國建設銀行總行特聘技術顧問,2009年受邀加入中國民生銀行總行科技部,現任總行科技部總經理。
牛新莊博士擁有20多項國際廠商認證(包括DB2 V5~V9的全部認證),獲得過國內資料庫領域最高榮譽的“2006年中國首屆傑出資料庫工程師獎”、“首屆IBM傑出軟體專家獎”、“2006年IT168技術卓越獎”等獎項。

作品目錄

第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
1.7.1 輸入 17
1.7.2 處理 17
1.7.3 輸出 23
1.8 本章小結 24
第2章 作業系統及存儲的性能調優 27
2.1 AIX性能監控綜述 29
2.1.1 監控工具 29
2.1.2 監控系統總體運行狀態 30
2.1.3 監控CPU性能 34
2.1.4 監控記憶體使用 38
2.1.5 監控存儲系統狀態 40
2.1.6 監控網路狀態 42
2.2 作業系統性能最佳化 43
2.2.1 直接I/O和並發I/O 44
2.2.2 異步I/O和同步I/O 45
2.2.3 minpout和maxpout 47
2.2.4 檔案系統和裸設備 47
2.2.5 負載均衡及條帶化
(Striping) 48
2.3 邏輯卷和lvmo最佳化 53
2.3.1 使用lvmo進行最佳化 54
2.3.2 卷組pbuf池 55
2.3.3 pbuf設定不合理導致性能
問題調整案例 56
2.3.4 使用ioo進行最佳化 60
2.4 作業系統性能調整總結 65
2.5 存儲I/O設計 65
2.6 存儲基本概念 65
2.6.1 硬碟 65
2.6.2 磁碟陣列技術 67
2.6.3 存儲的Cache 67
2.6.4 網路存儲技術 68
2.7 存儲架構 69
2.7.1 存儲I/O處理過程 69
2.7.2 RAID IOPS 70
2.7.3 RAID 10和RAID 5的
比較 71
2.8 良好存儲規劃的目標 74
2.9 良好存儲規劃的設計原則 75
2.10 存儲相關性能調整案例 76
2.11 存儲I/O性能調整總結 79
2.12 本章小結 80
第3章 DB2性能監控 81
3.1 快照監視器案例 81
3.1.1 監控動態SQL語句 81
3.1.2 監控臨時表空間使用 84
3.2 事件監視器及監控案例 87
3.3 利用表函式監控 93
3.4 性能管理視圖及案例 99
3.4.1 監控緩衝池命中率 100
3.4.2 監控Package Cache大小 101
3.4.3 監控執行成本最高的SQL
語句 102
3.4.4 監控運行時間最長的SQL
語句 102
3.4.5 監控SQL準備和預編譯
時間最長的SQL語句 103
3.4.6 監控執行次數最多的SQL
語句 103
3.4.7 監控排序次數最多的SQL
語句 104
3.4.8 監控鎖等待時間 104
3.4.9 監控Lock Chain 105
3.4.10 監控鎖記憶體的使用 108
3.4.11 監控鎖升級、死鎖和
鎖逾時 108
3.4.12 監控全表掃描的SQL 109
3.4.13 檢查頁清理器是否足夠 110
3.4.14 監控prefecher是否足夠 110
3.4.15 監控資料庫記憶體使用 111
3.4.16 監控日誌使用情況 112
3.4.17 監控占用日誌空間最舊的
事務 112
3.4.18 監控存儲路徑 113
3.4.19 追蹤監控歷史 114
3.5 db2pd 114
3.5.1 常用db2pd監控選項和
示例 115
3.5.2 使用db2pd監控死鎖
案例 127
3.5.3 db2pd使用問題總結 132
3.6 記憶體監控 134
3.6.1 db2pd 記憶體監控 134
3.6.2 db2mtrk 記憶體監控 138
3.7 本章小結 140
第4章 DB2配置參數調整 141
4.1 初識DB2配置參數 141
4.2 監控和調優實例級(DBM)
配置參數 143
4.2.1 代理程式相關配置參數 143
4.2.2 sheapthres 146
4.2.3 fcm_num_buffers 146
4.2.4 sheapthres_shr 147
4.2.5 intra_parallel 147
4.2.6 mon_heap_sz 148
4.2.7 query_heap_sz 148
4.3 監控和調優資料庫級配置
參數 148
4.3.1 緩衝池大小 149
4.3.2 日誌緩衝區大小(logbufsz) 155
4.3.3 應用程式堆大小
(applheapsz) 156
4.3.4 sortheap和sheapthres_shr 157
4.3.5 鎖相關配置參數 159
4.3.6 活動應用程式的最大數目
(maxappls) 163
4.3.7 pckcachesz 163
4.3.8 catalogcache_sz 164
4.3.9 異步頁清除程式的數目
(num_iocleaners) 164
4.3.10 異步I/O 伺服器的數目
(num_ioservers) 166
4.3.11 組提交數目(mincommit) 166
4.3.12 avg_appls 168
4.3.13 chngpgs_thresh(DB) 168
4.3.14 maxfilop 169
4.3.15 logprimary、logsecond和
logfilsz 169
4.3.16 stmtheap 170
4.3.17 dft_queryopt 170
4.3.18 util_heap_sz (DB) 170
4.4 調整DB2概要註冊變數 170
4.4.1 db2_parallel_io 171
4.4.2 db2_evaluncommitted 173
4.4.3 db2_skipdeleted 173
4.4.4 db2_skipinserted 173
4.4.5 db2_use_page_
container_tag 173
4.4.6 db2_selectivity 173
4.4.7 db2_logger_non_
buffered_io 174
4.5 記憶體自動調優 174
4.5.1 記憶體自動調優示例 175
4.5.2 啟用記憶體自動調優及
相關參數 176
4.5.3 記憶體配置參數的配置原則 178
4.6 本章小結 179
第5章 高級鎖與最佳化 181
5.1 隔離級別與鎖 181
5.1.1 可重複讀(RR—Repeatable
Read) 182
5.1.2 讀穩定性(RS—Read
Stability) 184
5.1.3 游標穩定性(CS—Cursor
Stability) 186
5.1.4 當前提交
(Currently Committed) 188
5.1.5 未提交讀
(UR—Uncommitted Read) 190
5.1.6 隔離級別總結 193
5.2 加鎖總結 195
5.2.1 如何獲取鎖 195
5.2.2 意圖鎖和非意圖鎖 196
5.2.3 讀鎖和寫鎖 197
5.2.4 LRB(Lock Resource Block) 197
5.2.5 USE AND KEEP LOCKS 198
5.2.6 索引類型和下一鍵鎖 199
5.2.7 掃描方式與加鎖 201
5.3 樂觀鎖 204
5.3.1 悲觀鎖和樂觀鎖 204
5.3.2 DB2 V9.5中的樂觀鎖 205
5.3.3 樂觀鎖套用案例 212
5.4 內部鎖 221
5.4.1 內部方案鎖
(Internal Plan Lock) 221
5.4.2 內部V鎖(Internal Variation
Lock) 222
5.4.3 內部S鎖 223
5.4.4 內部C鎖 224
5.4.5 其他內部鎖 225
5.5 鎖等待及調整案例 228
5.5.1 鎖等待問題解決流程和
步驟 228
5.5.2 捕獲引起鎖等待的SQL
語句 230
5.5.3 利用db2pd捕獲鎖逾時 233
5.5.4 利用事件監視器捕獲鎖
逾時 236
5.6 鎖升級及調整案例 238
5.6.1 監控鎖升級 239
5.6.2 鎖升級調整 239
5.7 死鎖及調整案例 241
5.7.1 利用事件監視器監控死鎖 242
5.7.2 死鎖案例 243
5.7.3 最小化死鎖建議 246
5.8 最大化並發性 246
5.8.1 選擇合適的隔離級別 246
5.8.2 儘量避免鎖等待、鎖升級和
死鎖 246
5.8.3 設定合理的註冊表變數 247
5.9 鎖相關的性能問題總結 255
5.10 鎖與應用程式開發 256
5.11 本章小結 259
第6章 索引設計與最佳化 261
6.1 索引概念 261
6.1.1 索引優點 261
6.1.2 索引類型 263
6.2 索引結構 263
6.3 理解索引訪問機制 266
6.4 索引設計 269
6.4.1 創建索引 269
6.4.2 創建集群索引 270
6.4.3 創建雙向索引 271
6.4.4 完全索引訪問 272
6.4.5 與創建索引相關的問題 273
6.4.6 創建索引示例 273
6.5 索引創建原則與示例 274
6.5.1 索引與謂詞 274
6.5.2 根據查詢使用的列建立
索引 276
6.5.3 根據條件語句中謂詞的
選擇度創建索引 277
6.5.4 避免在建有索引的列上使用
函式 278
6.5.5 在那些需要被排序的列上
創建索引 278
6.5.6 合理使用INCLUDE關鍵字
創建索引 280
6.5.7 指定索引的排序屬性 281
6.6 影響索引性能的相關配置 282
6.6.1 設定影響索引性能的配置
參數 282
6.6.2 為索引指定不同的表空間 282
6.6.3 確保索引的集群度 283
6.6.4 使表和索引統計信息保持
最新 283
6.6.5 重組索引 283
6.7 索引維護 284
6.7.1 異步索引清除(AIC) 285
6.7.2 在線上索引整理碎片 287
6.7.3 查找使用率低下的索引 287
6.7.4 索引壓縮 289
6.8 DB2 Design Advisor
(db2advis) 289
6.9 本章小結 293
第7章 DB2最佳化器 299
7.1 DB2最佳化器介紹 300
7.2 SQL語句執行過程 302
7.3 最佳化器組件和工作原理 304
7.3.1 查詢重寫示例:謂詞移動、
合併和轉換 305
7.3.2 最佳化器成本評估 310
7.3.3 本地謂詞基數(cardinality)
估計 311
7.3.4 連線基數(cardinality)估計 313
7.3.5 分布統計信息 317
7.3.6 列組統計信息對基數的
影響 321
7.4 掃描方式 330
7.4.1 全表掃描 331
7.4.2 索引掃描 331
7.4.3 RID SCAN 334
7.5 連線方法 335
7.5.1 嵌套循環連線 336
7.5.2 合併連線 338
7.5.3 哈希連線 339
7.5.4 選擇最佳連線的策略 340
7.6 最佳化級別 340
7.6.1 最佳化級別概述 341
7.6.2 選擇最佳化級別 344
7.6.3 設定最佳化級別 345
7.7 基於規則的最佳化 347
7.7.1 最佳化器概要檔案概述 347
7.7.2 啟用最佳化概要檔案 349
7.7.3 最佳化概要檔案使用示例 350
7.8 如何影響最佳化器來提高性能 357
7.8.1 使DB2統計信息保持
最新 357
7.8.2 構建適當的索引 357
7.8.3 配置合理的資料庫配置
參數 358
7.8.4 選擇合適的最佳化級別 359
7.8.5 合理的存儲I/O設計 359
7.8.6 良好的應用程式設計和
編碼 360
7.9 本章小結 363
第8章 統計信息更新與碎片整理 365
8.1 統計信息更新 365
8.1.1 統計信息的重要性 365
8.1.2 統計信息更新示例 369
8.1.3 LIKE STATISTICS統計
信息更新 372
8.1.4 列組統計信息更新 374
8.1.5 分布統計信息更新 383
8.1.6 統計信息更新策略 389
8.2 自動統計信息更新 391
8.2.1 自動RUNSTATS的
基本概念 391
8.2.2 如何打開auto runstats 393
8.2.3 如何監控auto runstats 395
8.2.4 DB2 V10新特性——自動
收集統計視圖的統計信息 396
8.3 碎片整理 397
8.3.1 碎片產生機制和影響 397
8.3.2 確定何時重組表和索引 398
8.3.3 執行表、索引檢查是否
需要做REORG 401
8.3.4 REORG的用法和使用
策略 402
8.4 重新綁定程式包 405
8.5 本章小結 407
第9章 SQL語句調優 409
9.1 通過監控找出最消耗資源的
SQL語句 409
9.2 通過解釋工具分析SQL語句
執行計畫 410
9.2.1 解釋表 411
9.2.2 Visual Explain
(可視化解釋) 412
9.2.3 db2expln 419
9.2.4 db2exfmt 422
9.2.5 各種解釋工具的比較 424
9.2.6 如何從解釋信息中獲取有
價值的建議 424
9.3 理解SQL語句如何工作 425
9.3.1 理解謂詞類型 425
9.3.2 排序和分組 428
9.3.3 連線方法 430
9.3.4 掃描方式 431
9.4 SQL調優案例 431
9.4.1 儘量使用單條語句完成
邏輯 431
9.4.2 合理使用NOT IN和NOT
EXISTS 432
9.4.3 利用子查詢進行最佳化 434
9.4.4 調整表連線順序使JOIN
最優 436
9.4.5 數據非均勻分布時手工指定
選擇性 437
9.4.6 使用UDF代替查詢中的
複雜部分 438
9.4.7 合併多條SQL語句到單個
SQL表達式 439
9.4.8 使用SQL一次處理一個集合
語義 440
9.4.9 在無副作用的情況下使用
SQL函式 442
9.4.10 小結 443
9.5 提高應用程式性能 443
9.5.1 良好的SQL編碼規則 443
9.5.2 提高SQL編程性能 445
9.5.3 改進游標性能 447
9.5.4 根據業務邏輯選擇最低粒
度的隔離級別 448
9.5.5 通過REOPT綁定選項來
提高性能 448
9.5.6 統計信息、碎片整理和重新
綁定 449
9.5.7 避免不必要的排序 449
9.5.8 在C/S環境中利用SQL存儲
過程降低網路開銷 450
9.5.9 在高並發環境下使用
連線池 450
9.5.10 使用Design Advisor(db2advis)
建議索引 450
9.5.11 提高批量刪除、插入和
更新速度 451
9.5.12 提高插入性能 451
9.5.13 高效的SELECT語句 452
9.6 高性能SQL語句注意事項 453
9.6.1 避免在搜尋條件中使用
複雜的表達式 453
9.6.2 將 OPTIMIZE FOR n ROWS
子句與FETCH FIRST n
ROWS ONLY子句配合
使用 454
9.6.3 避免使用冗餘的謂詞 454
9.6.4 避免使用多個帶有DISTINCT
關鍵字的聚集操作 455
9.6.5 避免連線列之間數據類型
不匹配 456
9.6.6 避免對表達式使用連線
謂詞 456
9.6.7 避免在謂詞中使用空操作表
達式來更改最佳化器估算 456
9.6.8 確保查詢符合星型模式連線
的必需條件 457
9.6.9 避免使用非等式連線謂詞 458
9.6.10 避免使用不必要的
外連線 459
9.6.11 使用參數標記來縮短動態
查詢的編譯時間 459
9.6.12 使用約束來提高查詢最佳化
程度 460
9.7 本章小結 461
第10章 DB2調優案例、問題總結和
技巧 463
10.1 調優案例1:某移動公司存儲
設計不當和SQL引起的I/O
瓶頸 463
10.2 調優案例2:某銀行知識庫系統
鎖等待、鎖升級引起性能
瓶頸 470
10.3 調優案例3:某汽車製造商ERP
系統通過調整統計信息提高
性能 478
10.4 調優案例4:某農信社批量代收
電費批處理慢調優案例 488
10.5 調優案例5:某銀行系統SQL
執行慢,通過跟蹤信息獲取
調整信息 492
10.6 調優案例6:某銀行系統欄位
類型定義錯誤導致SQL執行
時間變長 495
10.7 調優學習案例:利用壓力測試
程式學習DB2調優 498

相關詞條

熱門詞條

聯絡我們