內容介紹
本書是資深資料庫專家、UNIX系統專家、系統架構師近20年工作經驗的結晶。本書內容高屋建瓴,用辯證法中的系統化分析方法,不僅從硬體(伺服器系統、存儲系統、網路系統等)、軟體(作業系統、中間件系統、套用軟體等)和套用場景(用戶訪問模式、用戶使用頻度、數據承載壓力等)等多個相關聯的維度深入闡述了具有普適意義的資料庫性能評估與最佳化的思維方法和工作流程,而且還從流程的角度詳細講解了應該如何在資料庫系統的架構階段、設計階段、開發階段、部署階段、運行階段等各環節中去尋找性能問題的瓶頸和解決方案。
全書一共12章:第1章從系統工程的角度總結了性能問題可以分為哪些階段去考慮、性能問題有哪些種類,以及性能改進的工程方法等;第2章詳細講解了在資料庫的設計階段如何去考慮資料庫的性能問題;第3~6章從物理資料庫部署、資料庫訪問設定、硬體資源設定、存儲空間和記憶體資源的使用、實例配置與快取最佳化等多方面講解了資料庫系統在部署階段的性能最佳化問題;第7章探討了如何平衡資料庫可靠性和性能之間的矛盾;第8章完整呈現了Oracle資料庫的表分區能力,是解決與大規模數據處理相關的性能問題的關鍵;第9章從索引和執行計畫的角度講解了資料庫性能最佳化的方法;第10~12章著重介紹了在資料庫系統部署並運行後,如何獲得資料庫運行時的性能狀態,如何對正在使用的各種資源進行分析,分析時使用什麼工具,以及如何解讀這些工具返回的信息。
本書重在“授人以漁”,雖然主要內容是圍繞Oracle資料庫系統展開的,但是書中的觀點同樣適用於DB2、SQL Server、MySQL、PostgreSQL等資料庫系統。
作品目錄
前言第1章 綜述:最佳化是一個系統工程 / 1
1.1 性能問題是一個系統工程 / 3
1.1.1 考慮性能問題的不同階段 / 3
1.1.2 考慮性能問題的不同方面 / 4
1.1.3 性能架構中的問題分類 / 5
1.2 性能改進的工程方法 / 23
1.2.1 不要希望一步到位! / 23
1.2.2 有時也能一步到位? / 24
1.2.3 性能改進工作流程 / 26
1.2.4 建立性能分析流程圖 / 28
1.2.5 編程中應儘量避免的問題 / 30
1.2.6 緊急事件性能處理 / 35
第2章 設計與最佳化:物理資料庫結構設計 / 39
2.1 資料庫的特定運行平台 / 40
2.2 物理設計與性能的關係 / 41
2.3 套用框架與性能特徵 / 43
2.4 物理表設計的關注點 / 44
2.4.1 從邏輯模型到物理模型 / 44
2.4.2 物理資料庫設計的範圍 / 48
2.4.3 規範化的設計 / 49
2.4.4 反規範化設計 / 55
2.4.5 另類反規範化 / 59
2.4.6 是否反規範化 / 59
2.5 索引的初始設計 / 60
2.5.1 索引對象的基本結構 / 61
2.5.2 索引的可選擇性指標 / 62
2.5.3 索引的雙面性特徵 / 62
2.5.4 索引的類型 / 64
2.5.5 索引的初始確定 / 69
2.5.6 臨時表的使用 / 71
第3章 部署與最佳化:準備基本運行環境 / 73
3.1 性能問題在表象上的欺騙性 / 74
3.2 理解資料庫需要的系統資源 / 76
3.2.1 I/O資源的使用 / 78
3.2.2 記憶體資源的使用 / 82
3.2.3 CPU資源的使用 / 86
3.2.4 解讀記憶體與CPU狀態 / 93
3.3 小型機資料庫部署準備 / 94
3.3.1 AIX的部署準備 / 94
3.3.2 HP-UX的部署準備 / 98
3.3.3 Solaris的部署準備 / 102
3.4 X86系統資料庫部署準備 / 107
3.4.1 Linux系統的部署準備 / 107
3.4.2 Windows系統的部署準備 / 110
第4章 部署與最佳化:資料庫的最佳化部署 / 112
4.1 實例初始配置注意點 / 114
4.2 資料庫空間使用關注 / 119
4.3 表空間的創建管理 / 130
4.4 創建表時的性能因素 / 135
4.5 數據導入與索引維護 / 144
第5章 實例最佳化:配置高效運行環境 / 145
5.1 實例配置與快取最佳化 / 146
5.1.1 啟用自動記憶體管理 / 148
5.1.2 主機記憶體分配原則 / 152
5.1.3 使用快取顧問工具 / 155
5.1.4 快取的命中率問題 / 158
5.1.5 快取命中率分析 / 160
5.1.6 精細化快取的配置 / 161
5.2 SQL與快取的使用 / 165
5.2.1 快取最佳化 / 165
5.2.2 查看數據快取內容 / 165
5.2.3 共享池的效率檢查 / 166
5.2.4 重做日誌快取問題 / 173
5.3 PGA記憶體分配原則 / 175
5.4 Oracle虛擬化關注點 / 176
5.4.1 I/O問題上的關注點 / 178
5.4.2 記憶體問題上的關注點 / 178
5.4.3 CPU問題上的關注點 / 179
5.4.4 故障恢復問題的解決 / 179
第6章 存儲最佳化:配置高效存儲環境 / 181
6.1 I/O問題的表象與內涵 / 182
6.2 存儲介質的基礎配置 / 183
6.2.1 使用邏輯卷技術 / 184
6.2.2 設定存儲參數 / 187
6.3 存儲I/O能力探究 / 197
6.3.1 Orion的安裝 / 197
6.3.2 Orion的使用 / 198
第7章 綜合部署:Oracle可靠性設定 / 201
7.1 資料庫設定的綜合考慮 / 202
7.1.1 設定資料庫的記憶體使用 / 203
7.1.2 資料庫的進程使用設定 / 208
7.1.3 設定資料庫I/O模式 / 211
7.1.4 設定資料庫的歸檔模式 / 213
7.1.5 使用閃回恢復區歸檔 / 214
7.1.6 設定冗餘控制檔案 / 215
7.1.7 保留控制檔案信息 / 216
7.1.8 設定在線上重做日誌檔案 / 217
7.1.9 設定在線上重做日誌組數 / 218
7.1.10 設定數據塊校驗和檢查 / 220
7.1.11 打開性能時間統計 / 221
7.1.12 表空間和段管理方式 / 221
7.1.13 設定多臨時表空間和組 / 222
7.1.14 使用自動撤銷管理 / 223
7.1.15 設定空間錯誤延時 / 223
7.1.16 設定資料庫閃回 / 224
7.2 RAC下的設定 / 225
7.2.1 註冊遠程監聽器的實例 / 226
7.2.2 設定內部網際網路 / 226
7.3 加密表數據 / 227
7.4 加密表空間 / 231
第8章 對象最佳化:大表分區方式部署 / 232
8.1 分區技術適用的範圍 / 233
8.2 分區技術的基本概念 / 234
8.2.1 分區表的結構 / 234
8.2.2 分區部署的收益 / 235
8.2.3 分區部署的成本 / 236
8.2.4 索引分區 / 237
8.3 分區表的管理操作 / 238
8.3.1 面向分區的管理 / 238
8.3.2 面向分區的操作 / 238
8.3.3 面向分區的恢復 / 239
8.4 分區的技術實現 / 239
8.4.1 基礎分區的實現 / 240
8.4.2 組合分區的擴展 / 246
8.4.3 擴展分區技術 / 249
8.4.4 分區表的數據壓縮 / 254
8.4.5 查看數據存儲位置 / 255
8.4.6 分區鍵數據的改變 / 256
8.4.7 分區方式選擇問題 / 257
8.4.8 使用分區顧問工具 / 258
第9章 索引定義:索引設定與執行計畫 / 260
9.1 索引對象 / 261
9.2 Oracle最佳化器 / 263
9.2.1 最佳化器的選擇 / 264
9.2.2 最佳化器的設定 / 266
9.2.3 數據掃描問題 / 268
9.3 索引的技術指標 / 285
9.3.1 索引的選擇性 / 285
9.3.2 索引的簇化率 / 286
9.3.3 索引二元高度 / 289
9.3.4 直方圖的使用 / 290
9.4 索引與SQL最佳化 / 294
9.5 避免索引不作為 / 296
9.5.1 非等式運算 / 297
9.5.2 Null值的比對 / 298
9.5.3 函式的調用 / 301
9.6 創建虛擬的索引 / 303
9.7 創建壓縮的索引 / 305
9.8 索引的使用監測 / 305
9.8.1 創建不可視索引 / 305
9.8.2 索引的可用狀態 / 308
9.8.3 監測索引的使用 / 309
9.9 對分區表建立索引 / 310
第10章 實例效率:識別資料庫內部作為 / 312
10.1 研究資料庫運行效率 / 313
10.1.1 定義和量化性能 / 314
10.1.2 統計分析的要素 / 314
10.1.3 性能狀態的統計 / 327
10.1.4 其他相關統計 / 334
10.2 作業系統的使用方法 / 338
10.2.1 性能監視的手段 / 338
10.2.2 使用vmstat / 338
10.2.3 使用iostat / 341
10.2.4 使用sar / 345
10.2.5 使用nmon命令 / 347
10.3 調整計畫探討 / 349
第11章 最佳化踐行:資料庫層面的最佳化 / 351
11.1 Oracle自動統計 / 352
11.1.1 統計數據的解釋 / 354
11.1.2 匯總的統計數據 / 355
11.2 使用AWR / 355
11.2.1 在OEM中訪問AWR / 357
11.2.2 用API管理AWR快照 / 359
11.2.3 使用度量基線 / 360
11.2.4 AWR工作報告 / 362
11.3 使用ADDM / 363
11.3.1 ADDM內部結構 / 364
11.3.2 ADDM使用示例 / 365
11.3.3 ADDM環境設定 / 367
11.3.4 ADDM手工獲得 / 367
第12章 最佳化踐行:作業系統層面的最佳化 / 369
12.1 平台的性能相關性 / 370
12.2 分配和調度記憶體資源 / 372
12.2.1 使用大的記憶體頁面 / 373
12.2.2 設定記憶體替換閾值 / 375
12.2.3 設定記憶體空閒閾值 / 379
12.2.4 對應設定套用記憶體 / 380
12.3 設定系統進程資源 / 381
12.4 系統I/O資源的使用 / 382
12.4.1 最佳化使用異步I/O / 382
12.4.2 最佳化檔案系統掛載 / 384
12.4.3 最佳化套用I/O模式 / 386
12.5 關閉系統中無用的服務 / 387
12.6 監控主機資源使用 / 387
12.6.1 伺服器性能監控 / 388
12.6.2 分析系統的性能 / 389
寫在最後 / 391