第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
· · · · · · (
收起)