第一部分 基 礎
第1章 性能問題 2
1.1 需要為性能做規劃嗎 2
1.1.1 需求分析 2
1.1.2 分析與設計 4
1.1.3 編碼和單元測試 4
1.1.4 集成和驗收測試 6
1.2 為性能而設計 6
1.2.1 缺乏數據庫邏輯設計 6
1.2.2 實現通用錶 7
1.2.3 未使用約束加強數據完整性 7
1.2.4 缺乏數據庫物理設計 7
1.2.5 未正確選擇數據類型 8
1.2.6 未正確使用綁定變量 8
1.2.7 未利用數據庫高級特性 8
1.2.8 未使用PL/SQL進行以數據為中心的處理 9
1.2.9 執行不必要的提交 9
1.2.10 持續打開和關閉數據庫連接 9
1.3 你真的麵臨性能問題嗎 9
1.3.1 係統監控 10
1.3.2 響應時間監控 10
1.3.3 強迫性調優障礙 10
1.4 如何處理性能問題 11
1.4.1 業務視角和係統視角 11
1.4.2 問題的編錄 12
1.4.3 解決問題 12
1.5 小結 15
第2章 關鍵概念 16
2.1 選擇率和基數 16
2.2 什麼是遊標 17
2.3 遊標的生命周期 18
2.4 解析的工作原理 20
2.4.1 可共享遊標 22
2.4.2 綁定變量 25
2.5 讀寫數據塊 35
2.6 檢測 36
2.6.1 應用程序代碼 37
2.6.2 數據庫調用 39
2.7 小結 42
第二部分 識 彆
第3章 分析可重現的問題 45
3.1 跟蹤數據庫調用 45
3.1.1 SQL跟蹤 45
3.1.2 跟蹤文件的結構 57
3.1.3 使用TRCSESS 59
3.1.4 探查器 60
3.1.5 使用TKPROF 60
3.1.6 使用TVD$XTAT 70
3.2 探查PL/SQL代碼 79
3.2.1 使用DMBS_HPROF 79
3.2.2 使用DBMS_PROFILER 85
3.2.3 觸發探查器 89
3.3 小結 90
第4章 實時分析不可重現的問題 91
4.1 分析路綫圖 91
4.2 動態性能視圖 93
4.2.1 操作係統統計信息 93
4.2.2 時間模型統計信息 94
4.2.3 等待級彆和等待事件 96
4.2.4 係統和會話統計信息 100
4.2.5 度量值 101
4.2.6 當前會話狀態 102
4.2.7 活動會話曆史 103
4.2.8 SQL語句統計信息 111
4.2.9 實時監控 112
4.3 使用Diagnostics Pack和Tuning Pack進行分析 115
4.3.1 數據庫服務器負載 115
4.3.2 係統級彆分析 116
4.3.3 會話級彆分析 120
4.3.4 SQL語句信息 122
4.4 不使用Diagnostics Pack進行分析 125
4.4.1 數據庫服務器負載 125
4.4.2 係統級彆分析 126
4.4.3 會話級彆分析 129
4.4.4 SQL語句信息 130
4.5 小結 131
第5章 不可重現問題的事後分析 132
5.1 知識庫 132
5.2 自動工作負載存儲庫 133
5.2.1 執行配置 133
5.2.2 捕獲快照 134
5.2.3 管理基綫 135
5.3 Statspack 136
5.3.1 執行安裝 137
5.3.2 配置存儲庫 137
5.3.3 捕獲和清除快照 138
5.3.4 管理基綫 139
5.4 使用Diagnostics Pack進行分析 140
5.5 不使用Diagnostics Pack進行分析 140
5.6 小結 145
第三部分 查詢優化器
第6章 查詢優化器簡介 148
6.1 基礎知識 148
6.2 體係結構 150
6.3 查詢轉換 152
6.3.1 計數轉換 152
6.3.2 公共子錶達式消除 153
6.3.3 “或”擴張 153
6.3.4 視圖閤並 154
6.3.5 選擇列錶裁剪 155
6.3.6 謂詞下推 156
6.3.7 謂詞遷移 158
6.3.8 非重復放置 158
6.3.9 非重復消除 159
6.3.10 Group-by放置 159
6.3.11 Order-By消除 160
6.3.12 子查詢展開 160
6.3.13 子查詢閤並 161
6.3.14 使用窗口函數移除子查詢 162
6.3.15 聯接消除 162
6.3.16 聯接因式分解 163
6.3.17 外聯接轉內聯接 163
6.3.18 完全外聯接 164
6.3.19 錶擴張 164
6.3.20 集閤操作聯接轉變 165
6.3.21 星型轉換 166
6.3.22 物化視圖查詢重寫 166
6.4 小結 166
第7章 係統統計信息 167
7.1 dbms_stats包 167
7.2 有哪些係統統計信息可用 168
7.3 收集係統統計信息 170
7.3.1 無工作負載統計信息 170
7.3.2 工作負載統計信息 171
7.3.3 在無工作負載統計信息和工作負載統計信息之間進行選擇 174
7.4 還原係統統計信息 174
7.5 使用備份錶 175
7.6 管理操作的日誌記錄 176
7.7 對查詢優化器的影響 177
7.8 小結 182
第8章 對象統計信息 183
8.1 dbms_stats包 183
8.2 有哪些對象統計信息可用 185
8.2.1 錶統計信息 186
8.2.2 列統計信息 187
8.2.3 直方圖 189
8.2.4 擴展統計信息 200
8.2.5 索引統計信息 205
8.2.6 分區對象統計信息 206
8.3 收集對象統計信息 207
8.3.1 目標對象 208
8.3.2 收集選項 212
8.3.3 備份錶 217
8.4 配置dbms_stats包 218
8.4.1 傳統方式 218
8.4.2 現代方式 219
8.5 處理全局臨時錶 221
8.6 處理掛起的對象統計信息 222
8.7 處理分區對象 223
8.7.1 挑戰 223
8.7.2 增量統計信息 226
8.7.3 復製統計信息 228
8.8 調度對象統計信息的收集 229
8.8.1 10g方式 229
8.8.2 11g和12c方式 231
8.9 還原對象統計信息 232
8.10 鎖定對象統計信息 234
8.11 比較對象統計信息 236
8.12 刪除對象統計信息 238
8.13 導齣、導入、獲取和設置對象統計信息 239
8.14 管理操作的日誌記錄 239
8.15 保持對象統計信息為最新的策略 241
8.16 小結 242
第9章 配置查詢優化器 243
9.1 配置還是不配置 243
9.2 配置路綫圖 244
9.3 設置正確的參數 245
9.3.1 查詢優化器參數 246
9.3.2 PGA管理 260
9.4 小結 266
第10章 執行計劃 267
10.1 獲取執行計劃 267
10.1.1 EXPLAIN PLAN語句 267
10.1.2 動態性能視圖 270
10.1.3 自動工作負載存儲庫和Statspack 272
10.1.4 跟蹤工具 274
10.2 dbms_xplan包 277
10.2.1 輸齣 277
10.2.2 display函數 281
10.2.3 display_cursor函數 286
10.2.4 display_awr函數 288
10.3 解釋執行計劃 289
10.3.1 父?子關係 290
10.3.2 操作的類型 292
10.3.3 獨立操作 292
10.3.4 迭代操作 295
10.3.5 無關聯組閤操作 295
10.3.6 關聯組閤操作 297
10.3.7 分而治之 305
10.3.8 特殊情況 307
10.3.9 自適應執行計劃 310
10.4 識彆低效的執行計劃 314
10.4.1 錯誤的估算 314
10.4.2 未識彆限製條件 316
10.5 小結 317
第四部分 優 化
第11章 SQL優化技巧 320
11.1 修改訪問結構 321
11.1.1 工作原理 321
11.1.2 何時使用 322
11.1.3 陷阱和謬誤 322
11.2 修改SQL語句 322
11.2.1 工作原理 322
11.2.2 何時使用 323
11.2.3 陷阱和謬誤 324
11.3 hint 324
11.3.1 工作原理 324
11.3.2 何時使用 330
11.3.3 陷阱和謬誤 330
11.4 修改執行環境 332
11.4.1 工作原理 332
11.4.2 何時使用 334
11.4.3 陷阱和謬誤 334
11.5 存儲概要 334
11.5.1 工作原理 335
11.5.2 何時使用 343
11.5.3 陷阱和謬誤 343
11.6 SQL配置文件 344
11.6.1 工作原理 345
11.6.2 何時使用 357
11.6.3 陷阱和謬誤 357
11.7 SQL計劃管理 358
11.7.1 工作原理 359
11.7.2 何時使用 372
11.7.3 陷阱和謬誤 372
11.8 小結 373
第12章 解析 374
12.1 識彆解析問題 374
12.1.1 快速解析 375
12.1.2 長解析 380
12.2 解決解析問題 381
12.2.1 快速解析 381
12.2.2 長解析 387
12.3 避開解析問題 387
12.3.1 遊標共享 388
12.3.2 服務器端語句緩存 390
12.4 使用應用編程接口 392
12.4.1 PL/SQL 392
12.4.2 OCI 395
12.4.3 JDBC 396
12.4.4 ODP.NET 398
12.4.5 PHP 399
12.5 小結 400
第13章 優化數據訪問 401
13.1 識彆次優訪問路徑 401
13.1.1 識彆 401
13.1.2 誤區 403
13.1.3 原因 405
13.1.4 解決方案 406
13.2 弱選擇性的SQL語句 409
13.2.1 全錶掃描 409
13.2.2 全分區掃描 411
13.2.3 範圍分區 411
13.2.4 散列和列錶分區 422
13.2.5 復閤分區 422
13.2.6 設計要素 424
13.2.7 全索引掃描 426
13.3 強選擇性的SQL語句 429
13.3.1 Rowid訪問 429
13.3.2 索引訪問 430
13.3.3 單錶散列群集訪問 468
13.4 小結 470
第14章 優化聯接 471
14.1 定義 471
14.1.1 聯接樹 471
14.1.2 聯接的類型 475
14.1.3 限製條件與聯接條件 478
14.2 嵌套循環聯接 479
14.2.1 概念 479
14.2.2 兩錶聯接 480
14.2.3 四錶聯接 481
14.2.4 緩衝區緩存預取 482
14.3 閤並聯接 484
14.3.1 概念 484
14.3.2 兩錶聯接 485
14.3.3 四錶聯接 488
14.3.4 工作區 489
14.4 散列聯接 494
14.4.1 概念 494
14.4.2 兩錶聯接 495
14.4.3 四錶聯接 496
14.4.4 工作區 498
14.4.5 索引聯接 498
14.5 外聯接 499
14.6 選擇聯接方法 499
14.6.1 First-Rows優化 500
14.6.2 All-Rows優化 500
14.6.3 支持的聯接方法 500
14.6.4 並行聯接 500
14.7 分區智能聯接 501
14.7.1 完全智能化分區連接 501
14.7.2 部分智能化分區聯接 504
14.8 星型轉換 505
14.9 小結 511
第15章 數據訪問和聯接優化之外 512
15.1 物化視圖 512
15.1.1 工作原理 512
15.1.2 何時使用 530
15.1.3 陷阱和謬誤 531
15.2 結果緩存 531
15.2.1 工作原理 532
15.2.2 何時使用 538
15.2.3 陷阱和謬誤 538
15.3 並行處理 539
15.3.1 工作原理 540
15.3.2 何時使用 567
15.3.3 陷阱和謬誤 567
15.4 直接路徑插入 571
15.4.1 工作原理 572
15.4.2 何時使用 574
15.4.3 陷阱和謬誤 574
15.5 行預取 575
15.5.1 工作原理 575
15.5.2 何時使用 579
15.5.3 陷阱和謬誤 580
15.6 數組接口 580
15.6.1 工作原理 580
15.6.2 何時使用 583
15.6.3 陷阱和謬誤 583
15.7 小結 583
第16章 優化物理設計 584
16.1 最優列順序 584
16.2 最優數據類型 586
16.2.1 數據類型選擇中的陷阱 586
16.2.2 數據類型選擇最佳實踐 589
16.3 行遷移和行鏈接 591
16.3.1 遷移與鏈接 591
16.3.2 問題描述 593
16.3.3 問題識彆 593
16.3.4 解決方案 594
16.4 塊爭用 594
16.4.1 問題描述 594
16.4.2 問題識彆 595
16.4.3 解決方案 599
16.5 數據壓縮 602
16.5.1 概念 602
16.5.2 要求 603
16.5.3 方法 603
參考文獻 606
· · · · · · (
收起)