內容介紹
Oracle資料庫的性能最佳化直接關係到系統的運行效率,而影響資料庫性能的一個重要因素就是SQL性能問題。本書是作者十年磨一劍的成果之一,深入分析與解剖Oracle SQL最佳化與調優技術,主要內容包括:第一篇“執行計畫”詳細介紹各種執行計畫的含義與操作,為後面的深入分析打下基礎。重點講解執行計畫在SQL語句執行的生命周期中所處的位置和作用,SQL引擎如何生成執行計畫以及如何獲取SQL語句的執行計畫,如何從各種數據源顯示和查看已經生成的執行計畫。
第二篇“SQL最佳化技術”深入分析Oracle的SQL最佳化技術,包括邏輯最佳化技術和物理最佳化技術。用大量示例詳盡分析Oracle 中現有的各種查詢轉換技術,先分析Oracle如何收集、統計系統和對象的數據,然後推導各種代價估算公式,給出各種情形下的代價計算演示。
第三篇“SQL調優技術”深入剖析Oracle提供的各項調優技術。先對語句實際運行的性能統計數據進行了深度分析,介紹各項統計數據是由什麼操作導致的以及如何統計。然後介紹如何對SQL語句進行最佳化以獲得穩定、高效的性能。最後,依據對SQL最佳化及調優技術的分析,介紹如何快速最佳化SQL的思路。
本書內容豐富且深入,破解了Oracle技術的很多秘密,適合Oracle資料庫管理員、套用開發人員參考。
作者介紹
黃瑋(Fuyuncat),資深Oracle DBA,從事Oracle資料庫管理、維護與開發工作十餘年,有豐富的大型資料庫設計、開發與維護方面的經驗,涉及航空、水利、軍工、電信等多個行業。曾供職於某世界著名物流公司,負責公司的電子物流系統的資料庫開發和維護工作。2005年創建了個人網站www.HelloDBA.com,致力於資料庫底層技術的研究,整理和發布了大量關於資料庫系統底層機制、存儲結構、性能調優以及基礎算法方面的文章,獲得廣大同行的高度評價。開發了多個與數據恢復、性能監控、核心跟蹤相關的免費實用工具,深受歡迎,為Oracle社區做出了很大貢獻。作品目錄
序前言
第一篇 執行計畫
第1章 生成和顯示執行計畫 / 3
1.1 生成執行計畫 / 3
1.2 顯示執行計畫 / 4
1.2.1 通過查詢語句顯示計畫 / 4
1.2.2 通過包DBMS_XPLAN顯示計畫 / 4
1.2.3 AUTOTRACE / 12
1.2.4 其他方法 / 13
第2章 解讀執行計畫 / 15
2.1 執行計畫的基本數據 / 15
2.2 內部函式與操作 / 17
2.3 執行計畫各個列的含義 / 19
2.4 執行計畫各個操作的含義 / 21
2.4.1 語句類型 / 21
2.4.2 訪問路徑方法 / 23
2.4.3 點陣圖操作 / 31
2.4.4 排序操作 / 33
2.4.5 關聯操作 / 36
2.4.6 層次查詢操作 / 42
2.4.7 視圖操作 / 45
2.4.8 數據集合操作 / 45
2.4.9 分區操作 / 48
2.4.10 並行查詢操作 / 51
2.4.11 聚合操作 / 57
2.4.12 分析函式操作 / 58
2.4.13 模型化操作 / 60
2.4.14 數據和對象管理操作 / 63
2.4.15 其他操作 / 65
2.5 執行計畫中其他信息的含義 / 69
2.5.1 查詢塊和對象別名 / 69
2.5.2 計畫概要數據 / 70
2.5.3 綁定變數信息 / 70
2.5.4 分散式查詢語句信息 / 72
2.5.5 注釋 / 72
第二篇 SQL最佳化技術
第3章 查詢轉換 / 75
3.1 啟發式查詢轉換 / 75
3.1.1 簡單視圖合併 / 76
3.1.2 子查詢反嵌套 / 81
3.1.3 子查詢推進 / 86
3.1.4 舊關聯謂詞推入 / 87
3.1.5 簡單過濾謂詞推入 / 90
3.1.6 謂詞遷移 / 91
3.1.7 “或”操作擴張 / 91
3.1.8 物化視圖查詢重寫 / 92
3.1.9 集合操作關聯轉變 / 94
3.1.10 由約束生成過濾謂詞 / 95
3.1.11 星形轉換 / 96
3.1.12 排序消除 / 98
3.1.13 DISTINCT消除 / 99
3.1.14 表消除 / 99
3.1.15 子查詢合併 / 102
3.1.16 公共子表達式消除 / 104
3.1.17 計數函式轉變 / 105
3.1.18 表達式和條件評估 / 105
3.1.19 聚集子查詢消除 / 111
3.1.20 DISTINCT聚集函式轉換 / 111
3.1.21 選擇欄位裁剪 / 113
3.1.22 DISTINCT消除 / 114
3.1.23 DISTINCT推入 / 114
3.1.24 集合分組查詢轉換 / 115
3.1.25 集合分組查詢重寫 / 115
3.1.26 集合分組裁剪 / 117
3.1.27 外關聯消除 / 118
3.1.28 真正完全外關聯 / 119
3.1.29 左(右)外關聯轉換為側視圖 / 120
3.2 基於代價的查詢轉換 / 123
3.2.1 複雜視圖合併 / 123
3.2.2 關聯謂詞推入 / 124
3.2.3 謂詞提取 / 126
3.2.4 GROUP BY配置 / 127
3.2.5 表擴張 / 128
3.2.6 關聯因式分解 / 130
3.2.7 DISTINCT配置 / 131
3.2.8 WITH子查詢轉換 / 132
第4章 統計數據 / 134
4.1 系統統計數據 / 134
4.1.1 系統統計數據收集 / 136
4.1.2 系統統計數據管理 / 137
4.1.3 根據系統負載狀況靈活管理 / 140
4.1.4 全局參數管理 / 142
4.1.5 項管理 / 143
4.2 對象統計數據 / 146
4.2.1 表統計數據 / 150
4.2.2 索引統計數據 / 150
4.2.3 欄位統計數據 / 151
4.2.4 擴展統計數據 / 152
4.2.5 對象統計數據的管理 / 153
4.2.6 “待定”統計數據的管理 / 160
4.3 對象統計數據收集過程分析 / 161
4.3.1 表統計數據收集與計算 / 161
4.3.2 欄位統計數據收集與計算 / 164
4.3.3 柱狀圖數據收集與計算 / 170
4.3.4 索引統計數據收集與計算 / 182
第5章 執行計畫的代價估算 / 186
5.1 代價模型 / 187
5.2 基本代價計算公式 / 187
5.3 選擇率計算 / 190
5.3.1 單過濾條件 / 190
5.3.2 綁定變數無具體數值 / 190
5.3.3 綁定變數有數值無柱狀圖 / 191
5.3.4 使用柱狀圖 / 192
5.3.5 過濾條件的組合 / 196
5.4 多數據塊讀操作代價計算 / 197
5.4.1 代價模型 / 197
5.4.2 IO代價計算 / 199
5.4.3 CPU代價計算 / 202
5.4.4 執行計畫中其他數據的計算 / 209
5.4.5 全表掃描代價計算演示 / 209
5.5 並行掃描操作代價計算 / 218
5.5.1 IO代價計算 / 219
5.5.2 CPU代價計算 / 221
5.6 單數據塊讀操作代價計算 / 222
5.6.1 IO代價計算 / 222
5.6.2 CPU代價計算 / 226
5.6.3 單數據塊讀操作代價計算演示 / 228
5.7 排序操作代價計算 / 233
5.7.1 是否需要寫入磁碟 / 233
5.7.2 IO代價計算 / 234
5.7.3 CPU代價計算 / 236
5.7.4 臨時磁碟空間計算 / 236
5.7.5 排序代價計算演示 / 237
5.8 關聯操作代價計算 / 241
5.8.1 關聯選擇率 / 242
5.8.2 嵌套循環關聯代價計算 / 242
5.8.3 排序合併關聯代價計算 / 249
5.8.4 哈希關聯代價計算 / 252
5.9 並行模式下的關聯代價計算 / 260
5.9.1 IO代價計算 / 262
5.9.2 CPU代價計算 / 263
5.9.3 代價計算演示 / 263
第三篇 SQL調優技術
第6章 SQL語句運行性能分析 / 270
6.1 性能統計數據 / 270
6.1.1 邏輯讀 / 272
6.1.2 一致性獲取 / 273
6.1.3 一致性直接獲取 / 273
6.1.4 由快取一致性獲取 / 273
6.1.5 一致性修改 / 274
6.1.6 數據塊修改 / 275
6.1.7 物理讀入快取 / 276
6.1.8 物理預提取讀入快取 / 276
6.1.9 排序數據行 / 277
6.1.10 遞歸調用 / 278
6.2 邏輯讀分析 / 280
6.2.1 一致性讀分析 / 280
6.2.2 當前模式讀分析 / 309
6.3 物理讀分析 / 319
6.3.1 物理直接讀 / 319
6.3.2 物理讀入快取與LRU算法 / 378
第7章 Oracle調優技術 / 387
7.1 存儲概要 / 387
7.1.1 什麼是存儲概要 / 388
7.1.2 創建存儲概要 / 389
7.1.3 管理存儲概要 / 391
7.1.4 使用存儲概要 / 392
7.2 SQL執行計畫管理 / 394
7.2.1 創建和增加執行計畫基線 / 395
7.2.2 進化歷史執行計畫 / 405
7.2.3 最佳化器從基線中選擇執行計畫 / 407
7.3 Oracle自動調優 / 409
7.3.1 創建調優任務 / 410
7.3.2 SQL調優建議器的參數 / 410
7.3.3 自動調優分析 / 412
7.4 SQL性能分析器 / 423
7.4.1 性能分析過程 / 424
7.4.2 SQL性能分析示例 / 426
7.5 SQL訪問建議器 / 428
7.5.1 建議器選擇新索引分析過程 / 428
7.5.2 使用SQL訪問建議器 / 433
第8章 快速調優思路 / 441
8.1 統計數據檢查 / 441
8.2 從執行計畫中找到潛在問題 / 444
8.2.1 是否存在多個游標 / 444
8.2.2 輸出結果中特別注釋 / 447
8.2.3 存在潛在性能問題的操作 / 448
8.2.4 謂詞信息 / 452
8.2.5 概要數據以及最佳化器環境檢查 / 455
8.3 物理設計最佳化 / 456
8.3.1 索引 / 456
8.3.2 分區 / 457
8.3.3 物化視圖 / 458
8.3.4 約束 / 458