留言點贊前三名送《Oracle Database 12cR2 性能調整與優化》

《ORACLE DATABASE 12CR2性能調整與優化(第5版)》ios

     Richard Niemiec(理查德·尼米克) 著  算法

     董志平 劉永甫 呂學勇 譯sql

    清華大學出版社   2019-04-01出版   訂價 168.00元shell


做者簡介:數據庫

    Richard Niemiec(理查德·尼米克)是優選知名的IT 專家,他是Oracle ACE 總監、Oracle 認證大師,還曾經是 TUSC 的首席執行官和創始人之一。TUSC 始創於1988 年,總部在美國芝加哥,是專一於Oracle 業務解決方案 的系統集成商,躋身於全美髮展速度很快的500 強之列,在美國各地有10 家分號。Richard 還曾經擔任Rolta 國 際董事會執行顧問,Rolta TUSC 總裁和Rolta EICT 靠前總裁。 TUSC 是Oracle 公司在2002 年、2004 年、2007 年、2008 年、2010 年、2011 年和2012 年的年度合做夥伴(很後兩年是Rolta TUSC)。Rolta 是基於IT 的地理空間 解決方案的靠前市場領頭羊,可知足基礎設施、電信、電力、機場、國防、國土安全、城市發展、城市規劃和環 境保護等多種行業的需求。 編程

    Richard 是靠前Oracle 用戶組(IOUG)的前任主席,也是中西部Oracle 用戶組(MOUG)的現任主席。在過去的 30 年間,他爲弘揚Oracle 技術而頻頻發表演說,到過美國幾乎全部的主要城市,還到過不少靠前大都市。他6 次被 評爲Oracle 合做者/優選用戶大會很好演講者,10 次被評爲中西部用戶大會很好演講者,還曾經被評爲Oracle 全 球大會很好演講者。在過去的25 年間,他爲不少名列財富500 強的客戶設計過系統架構並實施過優化,這些客戶 包括ACT、瑪氏公司、麥當勞、諾基亞、Navteq(MapQuest)、密西根大學、AT&T 和百事可樂。他在數據處理方 面的經驗,從創新和架構延伸到教學和諮詢,重點是執行方向、數據庫管理和架構、性能優化、項目管理和技術 教育。他是優選很早榮獲Oracle 大師認證(OCM)的6 強人之一,常常與Oracle 開發團隊一道工做,特別是在beta 測試的過程當中。2011 年,他撰寫的《Oracle Database 11g 性能調整與優化》一書被評爲Oracle 叢書中的很暢銷書, 在此以前,該書的8i、9i 和10g 版也被評爲性能優化類中的很暢銷書。 數組

    Richard於2006年得到全國貧困家庭學生成功者獎,於2007年得到普渡大學校友傑出電氣和計算機工程師獎, 還兩次榮獲 IOUG 有名的 Chris Wooldridge 獎。他於1998 年入選美國企業家名人堂。緩存


中譯本譯者簡介:安全

    注:上圖最後一張照片是本書譯者呂學勇先生造訪本書做者Richard Niemiec的公司TUSC時與其合影。性能優化


目錄列表:

 

第1章 Oracle Database 12cR1和12cR2新特性介紹(針對DBA和開發人員)  1

1.1 Oracle Database 12cR1(12.1.0.1) 4 

1.1.1 VARCHAR2和NVARCHAR2的大小限制增長到32K 4 

1.1.2 局部索引 4 

1.1.3 不可視列 5 

1.1.4 相同列上的多個索引 5 

1.1.5 獲取前x行 6 

1.1.6 可插拔數據庫(PDB) 7 

1.1.7 Oracle數據庫雲服務(數據庫即服務) 9 

1.1.8 PDB級別:MEMORY_LIMIT和MEMORY_MINIMUM(12cR2) 14 

1.1.9 在導入時改變壓縮方式 14 

1.1.10 自適應查詢優化 15 

1.1.11 PGA_AGGREGATE_LIMIT 15 

1.1.12 UNION / UNION ALL的併發執行 16 

1.1.13 調用者權限函數能夠作結果集緩存 16 

1.1.14 新的DBMS_UTILITY.EXPAND_SQL_TEXT包 16 

1.1.15 列的默認值能夠基於序列 16 

1.1.16 用於智能閃存的多個SSD設備 16 

1.1.17 基於成本的優化器統計信息的併發收集 16 

1.1.18 加強的系通通計信息 17 

1.1.19 用於可能失控的查詢的資源管理器 17 

1.1.20 自動數據優化(ADO) 17 

1.1.21 全局索引維護:DROP和TRUNCATE分區操做 18 

1.1.22 ASM磁盤清理 18 

1.1.23 在線操做能力的提高 18 

1.1.24 數據衛士的改進 19 

1.1.25 RMAN改進 19 

1.2 Oracle Database 12cR1(12.1.0.2) 19 

1.2.1 IM內存數據庫 19 

1.2.2 不錯索引壓縮 22 

1.2.3 自動大表緩存 22 

1.2.4 FDA對容器數據庫的支持 22 

1.2.5 全數據庫緩存 22 

1.2.6 JSON支持 22 

1.2.7 FIPS 140加密參數 22 

1.2.8 PDB子集克隆 22 

1.2.9 快速Home目錄建立:建立「黃金映像」 22 

1.3 Oracle Database 12cR2(12.2) 23 

1.3.1 應用開發 23 

1.3.2 下降遷移到Oracle的成本和問題的加強功能 23 

1.3.3 可用性 24 

1.3.4 大數據 25 

1.3.5 壓縮和存檔 26 

1.3.6 Oracle RAC和GI 26 

1.3.7 安全 27 

1.4 Oracle 12c中新的後臺進程 27 

1.5 Exadata——新版本X6! 27 

1.6 版本對比 28 

1.7 新特性回顧 31 


第2章 索引的基本原理(針對DBA和初級開發人員) 33 

2.1 索引的基本概念 34 

2.2 不可視索引 36 

2.3 相同列上的多個索引 38 

2.4 複合索引 41 

2.5 索引抑制 42 

2.5.1 使用不等於運算符(<>、!=) 43 

2.5.2 使用IS NULL或IS NOT NULL 43 

2.5.3 使用LIKE 44 

2.5.4 使用函數 45 

2.5.5 比較不匹配的數據類型 45 

2.6 選擇性 46 

2.7 聚簇因子 46 

2.8 二元高度 47 

2.9 使用直方圖 50 

2.10 快速全掃描 51 

2.11 跳躍式掃描 51 

2.12 索引的類型 52 

2.12.1 B樹索引 52 

2.12.2 位圖索引 53 

2.12.3 哈希索引 55 

2.12.4 索引組織表 56 

2.12.5 反向鍵索引 56 

2.12.6 基於函數的索引 56 

2.12.7 分區索引 57 

2.12.8 12cR2中分區索引的新特性 59 

2.12.9 位圖鏈接索引 60 

2.13 快速重建索引 60 

2.14 在線重建索引 60 

2.15 要訣回顧 61 


第3章 可插拔數據庫、磁盤實施方法和ASM(針對DBA) 63 

3.1 可插拔數據庫(Oracle 12c新增) 64 

3.1.1 CDB或PDB建立的對象 65 

3.1.2 建立PDB的多種方法 66 

3.1.3 可插拔數據庫的一些強大命令 66 

3.1.4 在PDB中使用ALTER SYSTEM和其餘一些命令 70 

3.1.5 在可插拔數據庫中使用In-Memory(IM) 71 

3.1.6 可插拔數據庫在12cR2中的其餘新特性 71 

3.1.7 子集備庫(12cR2新增特性) 71 

3.2 磁盤陣列 72 

3.2.1 使用磁盤陣列改進性能和可用性 72 

3.2.2 所需的磁盤數量 72 

3.2.3 可用的RAID級別 73 

3.2.4 更新的RAID 5 73 

3.2.5 SSD固態硬盤 74 

3.2.6 ASM存儲管理(條帶/鏡像) 74 

3.3 傳統文件系統的安裝和維護 75 

3.3.1 考慮成本 75 

3.3.2 分開存儲數據和索引文件 75 

3.3.3 避免I/O磁盤爭用 76 

3.4 Oracle 12c熱圖和自動數據優化(ADO) 77 

3.5 Oracle 12c I/O性能跟蹤視圖(Outliers) 78 

3.6 Oracle大文件表空間 78 

3.7 ASM簡介 79 

3.7.1 IT部門內各個角色之間的溝通 80 

3.7.2 ASM實例 80 

3.7.3 ASM初始化參數 81 

3.7.4 12c版本中ASM的安裝 82 

3.7.5 srvctl命令加強 88 

3.7.6 ASM磁盤清洗(scrubbing) 91 

3.7.7 ASM再平衡加強 92 

3.7.8 ASM快速鏡像再同步 94 

3.7.9 ASM過濾驅動器(Filter Driver) 94 

3.7.10 ASM和權限 101 

3.7.11 ASM和多路徑 103 

3.7.12 大文件和ASM 104 

3.8 使用分區來避免磁盤爭用 104 

3.8.1 得到關於分區的更多信息 106 

3.8.2 其餘類型的分區 106 

3.8.3 (本地)分區索引 109 

3.8.4 部分索引 109 

3.8.5 全局索引維護:刪除或截斷分區操做 111 

3.8.6 其餘分區選項 111 

3.8.7 使用索引分區 113 

3.8.8 導出分區 113 

3.9 消除碎片(按需操做——當心使用!) 114 

3.9.1 使用正確的區塊大小 114 

3.9.2 正確設定PCTFREE以免鏈化(Chaining)現象 115 

3.9.3 使用自動段空間管理(ASSM) 115 

3.10 增長日誌文件尺寸和LOG_CHECKPOINT_INTERVAL以提升速度 116 

3.11 肯定重作日誌文件的大小是否存在問題 116 

3.11.1 肯定日誌文件的大小和檢查點的時間間隔 117 

3.11.2 其餘有幫助的重作日誌命令 117 

3.12 在不一樣的磁盤和控制器上存放多個控制文件 118 

3.13 磁盤I/O的其餘注意事項和提示 119 

3.14 設計階段須要注意的問題 119 

3.15 要訣回顧 120 


第4章 經過初始化參數調優數據庫(針對DBA) 123 

4.1 升級到Oracle 12c以後 124 

4.2 使用SEC_CASE_SENSITIVE_LOGON 125 

4.3 與性能相關的重要的內存初始化參數 126 

4.4 PDB級:MEMORY_LIMIT和MEMORY_MINIMUM 128 

4.5 內存數據庫(INMEMORY_SIZE) 129 

4.6 在不重啓數據庫的狀況下修改初始化參數 133 

4.7 修改PDB級別的初始化參數 136 

4.8 經過Oracle實用程序洞察初始化參數 137 

4.9 用企業管理器查看初始化參數 137 

4.10 優化DB_CACHE_SIZE來提升性能 138 

4.11 使用V$DB_CACHE_ADVICE優化DB_CACHE_SIZE 140 

4.12 設定DB_BLOCK_SIZE來反映數據讀的大小 143 

4.13 把SGA_MAX_SIZE設置爲主內存大小的25%~50% 144 

4.14 優化SHARED_POOL_SIZE以獲取最佳性能 144 

4.14.1 使用存儲過程來優化共享SQL區域的使用 145 

4.14.2 設定足夠大的SHARED_POOL_SIZE以保證充分利用DB_CACHE_SIZE 146 

4.14.3 保證數據字典緩存可以緩存足夠對象 146 

4.14.4 保證庫緩存的重載率爲0,並使命中率在95%以上 147 

4.14.5 使用可用內存來判斷SHARED_POOL_SIZE是否設置正確 149 

4.14.6 使用X$KSMSP表詳細觀察共享池 150 

4.14.7 關於緩存大小須要記住的要點 151 

4.14.8 與初始化參數相關的等待 151 

4.15 在Oracle中使用多個緩衝池 152 

4.15.1 與DB_CACHE_SIZE相關併爲數據分配內存的池 152 

4.15.2 修改LRU算法 153 

4.15.3 與SHARED_POOL_SIZE相關併爲語句分配內存的池 153 

4.16 調整PGA_AGGREGATE_TARGET以優化內存的使用 154 

4.17 修改SGA大小以免換頁(Paging)和交換(Swapping) 155 

4.18 瞭解Oracle優化器 155 

4.19 建立足夠的調度程序(Dispatcher) 156 

4.19.1 要有足夠的打開遊標(OPEN_CURSORS) 157 

4.19.2 不要讓DDL語句失敗(使用DDL鎖超時機制) 157 

4.20 兩個重要的Exadata初始化參數(僅針對Exadata) 157 

4.21 25個須要深思熟慮的重要初始化參數 157 

4.21.1 歷年的初始化參數 159 

4.21.2 查找未公開的初始化參數 160 

4.22 理解典型的服務器 161 

4.22.1 典型服務器的建模 161 

4.22.2 Oracle Application數據庫選型 162 

4.23 要訣回顧 166 


第5章 Oracle企業管理器雲控制器(針對DBA和開發人員) 169 

5.1 Oracle企業管理器(EM)基礎和經過Oracle雲訪問OEM 170 

5.2 從All Targets和其餘分組開始 173 

5.3 使用OEM的Performance菜單進行監控和優化 175 

5.3.1 Performance選項卡:Top Activity 175 

5.3.2 Performance選項卡:SQL | SQL Performance Analyzer 176 

5.3.3 Performance選項卡:Real-Time ADDM 178 

5.3.4 Performance選項卡:SQL | Access Advisor 181 

5.3.5 Performance選項卡:管理Optimizer Statistics 182 

5.3.6 Performance選項卡:AWR | AWR Administration 182 

5.3.7 Performance選項卡:ASH Analytics 184 

5.4 使用OEM Administration菜單進行監控和優化 185 

5.4.1 Database Administration選項卡:Storage | Tablespaces 185 

5.4.2 Database Administration選項卡:In-Memory Central和Initialization Parameters 187 

5.4.3 Database Administration選項卡:所有初始化參數 188 

5.4.4 Database Administration選項卡:Resource Manager (Consumer Groups) 188 

5.5 使用OEM Database或Cluster Database菜單進行監控和優化 189 

5.5.1 Database選項卡:Job Activity 189 

5.5.2 Cluster Database選項卡:Configuration | Database Topology 190 

5.6 監控主機 190 

5.7 監控應用服務器和Web應用 191 

5.8 真正應用測試(數據庫回放) 193 

5.9 小結 194 

5.10 要訣回顧 194 


第6章 使用EXPLAIN PLAN、TRACE和SQL計劃管理(針對開發人員和DBA) 195 

6.1 Oracle的SQL跟蹤(SQL TRACE)實用工具 196 

6.1.1 對簡單查詢使用SQL跟蹤的簡單步驟 196 

6.1.2 TRACE輸出部分 200 

6.1.3 深刻探討TKPROF輸出 201 

6.2 使用DBMS_MONITOR 203 

6.3 單獨使用EXPLAIN PLAN 207 

6.3.1 對簡單查詢使用的另外一個EXPLAIN示例 208 

6.3.2 EXPLAIN PLAN—— 自頂而下仍是從下往上讀取 209 

6.3.3 在開發者產品中利用跟蹤/EXPLAIN發現有問題的查詢 213 

6.3.4 PLAN_TABLE表中的重要列 214 

6.3.5 使用DBMS_XPLAN 215 

6.3.6 未公開的TRACE初始化參數 216 

6.4 使用STORED OUTLINES(存儲綱要) 217 

6.5 使用SQL計劃管理(SPM)和SPM示例 218 

6.5.1 SPM術語 218 

6.5.2 使用SPM 219 

6.5.3 使用固定的SQL計劃基線 223 

6.5.4 從STORED OUTLINES移植到SQL計劃管理 223 

6.5.5 自適應計劃(Oracle 12c新特性)和SPM 225 

6.6 要訣回顧 231 


第7章 基本的提示語法(針對開發人員和DBA) 235 

7.1 最經常使用的提示 236 

7.1.1 慎用提示 237 

7.1.2 首先修正設計方案 237 

7.2 可用提示及歸類 238 

7.2.1 執行路徑提示 238 

7.2.2 訪問方法提示 238 

7.2.3 查詢轉換提示 239 

7.2.4 鏈接操做提示 239 

7.2.5 並行執行提示 239 

7.2.6 其餘提示 240 

7.3 指定提示 240 

7.4 指定多個提示 241 

7.5 使用別名時,提示別名而非表名 241 

7.6 提示 242 

7.6.1 Oracle的演示樣板:HR方案 242 

7.6.2 FIRST_ROWS提示 242 

7.6.3 ALL_ROWS提示 243 

7.6.4 FULL提示 243 

7.6.5 INDEX提示 244 

7.6.6 NO_INDEX提示 245 

7.6.7 INDEX_JOIN提示 246 

7.6.8 INDEX_COMBINE提示 246 

7.6.9 INDEX_ASC提示 246 

7.6.10 INDEX_DESC提示 247 

7.6.11 INDEX_FFS提示 247 

7.6.12 ORDERED提示 248 

7.6.13 LEADING提示 249 

7.6.14 NO_EXPAND提示 249 

7.6.15 DRIVING_SITE提示 250 

7.6.16 USE_MERGE提示 250 

7.6.17 USE_NL提示 251 

7.6.18 USE_HASH提示 252 

7.6.19 QB_NAME提示 253 

7.6.20 PUSH_SUBQ提示 253 

7.6.21 PARALLEL提示 254 

7.6.22 NO_PARALLEL提示 255 

7.6.23 PARALLEL_INDEX提示 255 

7.6.24 APPEND提示 255 

7.6.25 NOAPPEND提示 256 

7.6.26 CACHE提示 256 

7.6.27 NOCACHE提示 257 

7.6.28 RESULT_CACHE提示 257 

7.6.29 CURSOR_SHARING_EXACT提示 258 

7.6.30 INMEMORY、NO_INMEMORY及其餘IM提示 258 

7.6.31 USE_INVISIBLE_INDEXES提示 259 

7.6.32 CONTAINERS提示 260 

7.6.33 WITH_PLSQL提示 260 

7.7 雜項提示及注意事項 260 

7.7.1 未公開的提示 262 

7.7.2 如何在視圖中使用提示 263 

7.7.3 關於提示和STORED OUTLINES(或SPM)的注意事項 263 

7.8 提示爲何不起做用 263 

7.9 提示一覽 264 

7.10 要訣回顧 265 


第8章 查詢優化(針對開發人員和初級DBA) 267 

8.1 應該優化哪些查詢?查詢V$SQLAREA和V$SQL視圖 268 

8.1.1 從V$SQLAREA視圖中選出最糟糕的查詢 268 

8.1.2 從V$SQL視圖中選出最糟糕的查詢 270 

8.2 使用Oracle 12c視圖定位佔用大量資源的會話和查詢 271 

8.2.1 從V$SESSMETRIC視圖中選出當前最佔用資源的會話 271 

8.2.2 查看可用的AWR快照 272 

8.2.3 從DBA_HIST_SQLSTAT視圖中發現最糟糕的查詢 272 

8.3 什麼時候應該使用索引 272 

8.3.1 從DBA_HIST_SQLTEXT視圖中選擇查詢文本 273 

8.3.2 從DBA_HIST_SQL_PLAN視圖中選出查詢的EXPLAIN PLAN 274 

8.4 忘記了索引怎麼辦 275 

8.4.1 創建索引 275 

8.4.2 不可視索引(Invisible Index) 276 

8.4.3 查看錶上的索引 276 

8.4.4 在列上正確創建索引了嗎 276 

8.5 創建了差的索引怎麼辦 277 

8.6 刪除索引時保持謹慎 279 

8.7 在SELECT和WHERE子句中的列上創建索引 280 

8.8 使用索引快速全掃描 281 

8.9 使查詢「魔術」般加速 283 

8.10 在內存中緩存表 283 

8.11 使用結果集緩存(Result Cache) 285 

8.12 在多個索引間選擇(使用選擇性最佳的索引) 285 

8.13 索引合併 287 

8.14 可能被抑制的索引 289 

8.15 基於函數的索引 290 

8.16 虛擬列(Virtual Column) 291 

8.17 「古怪」的OR 291 

8.18 使用EXISTS函數和嵌套子查詢 292 

8.19 表就是視圖 293 

8.20 SQL和「大一統」理論 293 

8.21 Oracle Database 12c中的優化變化 294 

8.21.1 Oracle 12c自適應查詢優化 294 

8.21.2 自適應統計信息 300 

8.21.3 Oracle 12c統計信息收集的更新和兩種新的直方圖 304 

8.21.4 Oracle 12c SQL計劃管理的更新 305 

8.22 Oracle自動SQL優化 306 

8.22.1 保證執行優化操做的用戶能訪問API 307 

8.22.2 建立優化任務 307 

8.22.3 肯定從顧問日誌中能夠查看到任務 307 

8.22.4 執行SQL優化任務 307 

8.22.5 查看優化任務的狀態 308 

8.22.6 顯示SQL優化顧問生成的報告 308 

8.22.7 檢查報告輸出 308 

8.23 使用SQL優化顧問自動優化SQL語句 310 

8.23.1 啓用自動SQL優化顧問 310 

8.23.2 配置自動SQL優化顧問 310 

8.23.3 查看自動SQL優化的結果 311 

8.24 使用SQL性能分析器(SPA) 314 

8.25 要訣回顧 319 


第9章 錶鏈接和其餘不錯優化(針對不錯DBA和開發人員) 321 

9.1 數據庫回放(捕獲/回放) 322 

9.1.1 設置源數據庫,爲數據庫回放捕獲負載 323 

9.1.2 準備捕獲負載 323 

9.1.3 捕獲負載 323 

9.1.4 準備負載以回放 324 

9.1.5 爲回放處理負載 325 

9.1.6 準備回放負載 325 

9.1.7 執行負載回放 325 

9.2 SQL性能分析器(SPA) 327 

9.2.1 建立SQL優化集 327 

9.2.2 建立分析任務 328 

9.2.3 執行分析任務 328 

9.2.4 查詢性能分析的顧問任務 329 

9.2.5 取消正在執行的SPA分析任務 329 

9.2.6 刪除SPA分析任務 329 

9.2.7 肯定活動的SQL優化集 330 

9.2.8 移除SQL優化集引用 330 

9.2.9 刪除SQL優化集 330 

9.3 鏈接方法 331 

9.3.1 嵌套循環鏈接 331 

9.3.2 排序合併鏈接 332 

9.3.3 聚簇鏈接 333 

9.3.4 哈希鏈接 333 

9.3.5 索引合併鏈接 334 

9.4 錶鏈接相關的初始化參數 336 

9.5 雙錶鏈接:等尺寸表(基於成本) 337 

9.6 雙表索引鏈接:等尺寸表(基於成本) 340 

9.7 強制使用特定的鏈接方法 343 

9.8 排除多表鏈接中的鏈接記錄(候選行) 345 

9.9 大小不一樣的表間的雙錶鏈接 346 

9.10 三表鏈接:不那麼有趣 349 

9.11 位圖鏈接索引 350 

9.11.1 位圖索引 351 

9.11.2 位圖鏈接索引 352 

9.11.3 位圖鏈接索引的最佳應用 353 

9.12 第三方產品性能優化 355 

9.13 優化分佈式查詢 359 

9.14 一切就緒 360 

9.15 其餘優化技術 361 

9.15.1 外部表 361 

9.15.2 數據快照太舊(Snapshot Too Old):開發人員的編程問題 364 

9.15.3 設置事件以轉儲每次等待 365 

9.15.4 從14小時到30秒—— EXISTS操做符 366 

9.16 在塊級別進行優化(不錯內容) 367 

9.16.1 數據塊轉儲中的關鍵部分 370 

9.16.2 索引塊轉儲簡介 376 

9.17 使用簡單的數學方法進行優化 378 

9.17.1 傳統的數學分析 378 

9.17.2 七步方法論 378 

9.17.3 性能推導公式 379 

9.17.4 模式分析 383 

9.17.5 數學方法總結 387 

9.18 要訣回顧 387 


第10章 使用PL/SQL提高性能(針對開發人員和DBA) 391 

10.1 利用PL/SQL函數結果集緩存提高性能(Oracle 12c中有改進) 393 

10.2 在SQL語句中定義PL/SQL子程序(Oracle 12c新特性) 401 

10.3 直接在PL/SQL表達式中引用序列 403 

10.4 自增加(Identity)字段(Oracle 12c新特性) 404 

10.5 將VARCHAR二、NVARCHAR2和RAW數據類型的優選長度增長到32K(Oracle 12c新特性) 406 

10.6 語句中容許綁定PL/SQL專用數據類型(Oracle 12c新特性) 407 

10.7 在SQL函數調用中使用命名參數 407 

10.8 使用CONTINUE語句簡化循環 410 

10.9 利用編譯時警告捕捉編程錯誤(Oracle 12c加強特性) 412 

10.10 使用本地編譯提高性能 414 

10.11 使用優化的編譯器使性能最優 416 

10.12 使用DBMS_APPLICATION_INFO包進行實時監控 421 

10.13 在數據庫表中記錄計時信息 422 

10.14 減小PL/SQL程序的單元迭代數量和迭代時間 424 

10.15 使用ROWID進行迭代處理 426 

10.16 將數據類型、IF條件排序和PLS_INTEGER標準化 428 

10.16.1 確保比較運算中的數據類型相同 428 

10.16.2 根據條件出現的頻率排序IF條件 430 

10.16.3 使用PL/SQL數據類型PLS_INTEGER進行整數運算 430 

10.17 減小對SYSDATE的調用 431 

10.18 減小MOD函數的使用 432 

10.19 經過固定PL/SQL對象提高共享池的使用 433 

10.19.1 將PL/SQL對象語句固定(緩存)到內存中 434 

10.19.2 固定全部的包 434 

10.20 識別須要固定的PL/SQL對象 435 

10.21 使用和修改DBMS_SHARED_POOL.SIZES 435 

10.22 從DBA_OBJECT_SIZE中獲取詳細的對象信息 436 

10.23 發現無效對象 437 

10.24 發現已禁用的觸發器 438 

10.25 將PL/SQL關聯數組用於快速參考表查詢 439 

10.26 查找和優化所使用對象的SQL 441 

10.27 在處理DATE數據類型時使用時間組件 444 

10.28 使用PL/SQL優化PL/SQL 446 

10.29 理解PL/SQL對象定位的含義 446 

10.30 使用回滾段打開大型遊標 447 

10.31 使用數據庫臨時表提升性能 449 

10.32 限制動態SQL的使用 449 

10.33 使用管道表函數創建複雜的結果集 450 

10.34 別管調試命令 454 

10.35 「跟着感受走」:爲初學者準備的例子 458 

10.35.1 PL/SQL示例 459 

10.35.2 建立過程的例子 459 

10.35.3 從PL/SQL中執行過程的例子 459 

10.35.4 建立函數的例子 460 

10.35.5 在SQL中執行get_cust_name函數 460 

10.35.6 建立程序包 460 

10.35.7 在數據庫觸發器中使用PL/SQL 460 

10.36 要訣回顧 461 


第11章 Oracle雲、Exadata、RAC調優和並行特性的使用 463 

11.1 雲計算的演進(過去和如今) 465 

11.2 Oracle雲 467 

11.3 Exadata數據庫一體機 474 

11.3.1 Exadata術語和基礎知識 474 

11.3.2 Exadata詳細信息 475 

11.3.3 Exadata存儲擴展櫃簡介 477 

11.3.4 智能掃描(Smart Scan) 478 

11.3.5 閃存(Flash Cache) 478 

11.3.6 存儲索引(Storage Indexes) 480 

11.3.7 混合列壓縮 481 

11.3.8 IORM 484 

11.3.9 在Exadata中使用全部的Oracle安全優點 484 

11.3.10 最佳實踐 485 

11.3.11 小結:Exadata=根本性改變! 485 

11.4 Oracle Database Appliance(ODA) 486 

11.5 M7 SPARC芯片的SuperCluster 486 

11.6 其餘能夠考慮的Oracle硬件 486 

11.6.1 Oracle大數據設備X6-2 486 

11.6.2 ZFS存儲服務器 487 

11.6.3 StorageTek模塊化磁帶庫系統 487 

11.7 並行數據庫 487 

11.8 RAC 488 

11.8.1 Oracle RAC架構 488 

11.8.2 Oracle RAC系統的內部工做原理 489 

11.9 RAC性能優化概述 492 

11.9.1 RAC集羣互連的性能 492 

11.9.2 尋找RAC等待事件——會話等待 493 

11.9.3 RAC等待事件和互連統計信息 494 

11.9.4 集羣互連優化—— 硬件層 498 

11.10 並行操做 501 

11.10.1 並行操做的基本概念 501 

11.10.2 並行DML和DDL語句及操做 503 

11.10.3 管理並行服務器資源和並行語句排隊 503 

11.10.4 並行和分區 504 

11.10.5 操做內並行和操做間並行 504 

11.10.6 使用操做內並行和操做間並行的示例(PARALLEL和NO_PARALLEL提示) 505 

11.10.7 使用並行操做建立表和索引的示例 506 

11.10.8 經過V$視圖監控並行操做 507 

11.10.9 在並行操做中使用EXPLAIN PLAN和AUTOTRACE 509 

11.10.10 使用set autotrace on命令 511 

11.10.11 優化並行執行和初始化參數 512 

11.10.12 並行加載 514 

11.10.13 優化RAC中的並行操做 515 

11.10.14 並行操做的目標 515 

11.10.15 RAC並行使用模型 515 

11.10.16 並行相關的初始化參數 515 

11.10.17 查看並行統計數據的V$視圖 515 

11.10.18 Create Table As 516 

11.10.19 並行創建索引 516 

11.10.20 性能注意事項和小結 516 

11.10.21 其餘的並行操做注意事項 516 

11.11 Oracle的聯機文檔 517 

11.12 要訣回顧 517 


第12章 V$視圖(針對開發人員和DBA) 519 

12.1 建立和受權訪問V$視圖 520 

12.2 獲取構建V$視圖的X$腳本列表 524 

12.3 使用有幫助的V$腳本 526 

12.3.1 基本的數據庫信息 527 

12.3.2 基本的自動負載資料庫(AWR)信息 527 

12.3.3 基本的許可信息 528 

12.3.4 數據庫中已安裝的數據庫選項 529 

12.4 內存分配概要(V$SGA) 530 

12.4.1 設置INMEMORY_SIZE後查詢V$IM_SEGMENTS 531 

12.4.2 自動內存管理與MEMORY_TARGET參數 532 

12.4.3 詳盡的內存分配(V$SGASTAT) 533 

12.4.4 PDB和根CDB內存分配的詳細信息(V$SGASTAT) 534 

12.5 在V$PARAMETER視圖裏找出 spfile.ora/init.ora參數設置 534 

12.6 在PDB級別修改初始化參數 535 

12.7 肯定數據所需內存(V$SYSSTAT和V$SYSMETRIC) 536 

12.8 肯定數據字典所需內存(V$ROWCACHE) 537 

12.9 肯定共享SQL和PL/SQL所需內存(V$LIBRARYCACHE) 538 

12.10 查詢V$CONTAINERS 和V$PDBS以獲取容器的信息 539 

12.10.1 使用可插拔數據庫時查詢V$CONTAINERS 540 

12.10.2 使用可插拔數據庫時查詢V$PDBS 540 

12.10.3 使用結果集緩存(Result Cache) 541 

12.11 肯定須要保留在內存中(固定住)的PL/SQL對象 543 

12.12 監控V$SESSION_LONGOPS視圖以定位有問題的查詢 543 

12.13 經過V$SQLAREA發現有問題的查詢 545 

12.14 檢查用戶的當前操做及其使用的資源 546 

12.14.1 查找用戶正在訪問的對象 547 

12.14.2 獲取詳細的用戶信息 547 

12.15 使用索引 548 

12.16 肯定鎖定問題 549 

12.16.1 殺掉有問題的會話 551 

12.16.2 找出使用多個會話的用戶 552 

12.16.3 查詢當前的概要文件 552 

12.17 找出磁盤I/O問題 553 

12.18 檢查權限和角色 556 

12.19 等待事件V$視圖 558 

12.20 一些主要的V$視圖類別 561 

12.21 要訣回顧 568 


第13章 X$表(針對不錯DBA) 571 

13.1 X$表介紹 572 

13.1.1 有關X$表的誤解 573 

13.1.2 受權查看X$表 573 

13.2 在Oracle 12c中建立V$視圖和X$表 574 

13.3 得到Oracle 12c中全部X$表的列表 577 

13.4 得到Oracle 12c中全部X$索引的列表 578 

13.5 對X$表和索引使用的提示 579 

13.6 監控共享池的空間分配 580 

13.7 建立查詢腳原本監控共享池 581 

13.7.1 ORA-04031錯誤 581 

13.7.2 空間分配過大而引發的爭用 582 

13.7.3 共享池碎片化 582 

13.7.4 共享池和Java池中空閒內存太低 584 

13.7.5 使用庫緩存內存 584 

13.7.6 太高的硬解析 586 

13.7.7 互斥鎖/閂鎖等待和/或休眠 587 

13.7.8 其餘X$表說明 588 

13.8 得到重作日誌的信息 589 

13.9 設置初始化參數 589 

13.10 緩衝區緩存/數據塊的詳細信息 592 

13.10.1 緩存狀態 593 

13.10.2 佔用數據塊緩存的段 595 

13.10.3 熱數據塊/閂鎖爭用和等待事件 596 

13.11 得到實例/數據庫相關的信息 600 

13.12 高效使用X$表及相關策略 601 

13.13 Oracle的內部主題 601 

13.13.1 跟蹤 601 

13.13.2 DBMS_TRACE包 605 

13.13.3 事件 606 

13.13.4 轉儲 607 

13.13.5 oradebug命令 607 

13.13.6 trcsess工具 609 

13.14 閱讀跟蹤文件 609 

13.14.1 等待信息和響應時間 612 

13.14.2 遞歸調用 613 

13.14.3 模塊信息 613 

13.14.4 提交 613 

13.14.5 UNMAP 613 

13.14.6 綁定變量 614 

13.14.7 錯誤 614 

13.15 X$表分組 615 

13.16 X$表與非V$固定視圖的聯繫 628 

13.17 常見的X$錶鏈接 629 

13.18 X$表的命名 630 

13.19 12cR2中將來版本的影響 638 

13.20 要訣回顧 638 


第14章 使用Statspack和AWR報告調優等待、閂鎖和互斥鎖 641 

14.1 Oracle 12cR2(12.2)中Statspack和AWR報告的新特性 642 

14.2 安裝Statspack 643 

14.2.1 perfstat帳戶的安全管理 643 

14.2.2 安裝以後 644 

14.2.3 收集統計數據 645 

14.2.4 運行統計數據報告 647 

14.3 AWR和AWR報告 648 

14.3.1 手動管理AWR 649 

14.3.2 AWR自動快照 650 

14.3.3 AWR快照報告 650 

14.3.4 在Oracle企業管理器雲控制器中運行AWR報告 651 

14.4 Statspack和AWR輸出解析 654 

14.4.1 報告頭信息和緩存大小 654 

14.4.2 負載概要 654 

14.4.3 實例效率 656 

14.4.4 共享池統計 658 

14.4.5 Top等待事件 658 

14.4.6 Oracle Bug 668 

14.4.7 Oracle影子進程的生命週期 669 

14.4.8 RAC等待事件和互連統計數據 669 

14.4.9 Top SQL語句 670 

14.4.10 實例活動統計數據 672 

14.4.11 表空間和文件I/O的統計數據 676 

14.4.12 段統計數據 678 

14.4.13 其餘的內存統計數據 679 

14.4.14 UNDO統計數據 684 

14.4.15 閂鎖和互斥鎖統計信息 684 

14.4.16 在塊級別調優和查看(不錯) 692 

14.4.17 數據字典和庫緩存的統計數據 694 

14.4.18 SGA內存統計數據 696 

14.4.19 非默認的初始化參數 697 

14.5 AWR報告和Statspack輸出結果中須要首先查看的15項內容 698 

14.5.1 管理Statspack數據 699 

14.5.2 升級Statspack 700 

14.5.3 卸載Statspack 700 

14.6 新ADDM報告的快速說明 700 

14.7 12cR2腳本 704 

14.8 要訣回顧 706 


第15章 施行快速系統審查(針對DBA) 709 

15.1 整體績效指數(TPI) 710 

15.2 訓練績效指數(EPI) 710 

15.3 系統績效指數(SPI) 712 

15.4 內存績效指數(MPI) 715 

15.4.1 排名前25的「內存濫用」語句是否被優化 715 

15.4.2 十大「內存濫用」語句在全部語句中所佔的比重 716 

15.4.3 緩衝區緩存命中率 717 

15.4.4 數據字典緩存命中率 718 

15.4.5 庫緩存命中率 719 

15.4.6 PGA內存排序命中率 719 

15.4.7 空閒的數據緩衝區的比例 720 

15.4.8 有效地使用結果集緩存 721 

15.4.9 固定/緩存對象 722 

15.5 磁盤績效指數(DPI) 723 

15.5.1 優化濫用磁盤讀操做的前25條語句 723 

15.5.2 最濫用磁盤讀操做的前10條語句佔全部語句磁盤讀的比例 724 

15.5.3 分離表和索引,或者使用ASM 725 

15.5.4 關鍵任務表管理 725 

15.5.5 分離關鍵的Oracle文件 726 

15.5.6 自動UNDO管理 726 

15.5.7 有效地使用可插拔數據庫 728 

15.6 整體績效指數 729 

15.7 系統綜合檢查示例 730 

15.7.1 評級系統 730 

15.7.2 系統審查評級類別的示例 730 

15.7.3 須要當即採起行動的問題項 731 

15.7.4 其餘須要採起行動的問題項 732 

15.8 系統信息列表 732 

15.8.1 與內存有關的數值 732 

15.8.2 與磁盤有關的數值 732 

15.8.3 與CPU有關的數值 733 

15.8.4 與備份和恢復有關的信息 733 

15.8.5 命名約定和/或標準以及安全信息問題 734 

15.8.6 DBA知識評級 734 

15.9 TPI和系統檢查須要考慮的其餘項 735 

15.10 要訣回顧 735 


第16章 運用UNIX實用工具來監控系統(針對DBA) 737 

16.1 UNIX/Linux實用工具 738 

16.2 使用sar命令來監控CPU的使用狀況 738 

16.2.1 sar -u(檢查CPU的繁忙程度) 738 

16.2.2 sar -d命令(找出I/O問題) 739 

16.2.3 sar -b命令(檢查緩衝區高速緩存) 742 

16.2.4 sar -q命令(檢查運行隊列和交換隊列的長度) 742 

16.3 使用sar命令和vmstat命令監控調頁/交換 743 

16.3.1 使用sar命令的-p選項報告調頁活動 743 

16.3.2 使用sar命令的-w選項來報告交換和切換活動 744 

16.3.3 使用sar命令的-r選項來報告空閒內存和空閒交換空間 744 

16.3.4 使用sar命令的-g選項來報告調頁活動 744 

16.3.5 使用sar -wpgr命令來報告內存資源的使用狀況 745 

16.4 使用top命令找出系統上最差的用戶 747 

16.5 使用uptime命令監控CPU負載 748 

16.6 使用mpstat命令辨認CPU瓶頸 749 

16.7 結合使用ps命令和選定的V$視圖 749 

16.8 使用iostat命令辨認磁盤I/O瓶頸 752 

16.8.1 爲磁盤驅動器sd1五、sd1六、sd17和sd18使用iostat的-d選項 752 

16.8.2 使用iostat的-D選項 752 

16.8.3 使用iostat的-x選項 753 

16.8.4 將iostat的-x選項與shell腳本中的邏輯相結合 753 

16.9 使用ipcs命令來肯定共享內存 754 

16.10 使用vmstat命令監控系統負載 755 

16.11 監控磁盤的空閒空間 756 

16.11.1 df命令 756 

16.11.2 du命令 757 

16.12 使用netstat監控網絡性能 757 

16.13 修改配置信息文件 758 

16.14 改善性能的其餘途徑 760 

16.15 要訣回顧 760 


附錄A 重要的初始化參數(針對DBA) 763 

附錄B V$視圖(針對DBA和開發人員) 803 

附錄C X$表(針對DBA) 821 


老虎劉簽名贈書規則:

   截止到本週五(2019-06-07)晚8點,成功留言,而且點贊數超過50的前三位朋友,將會獲贈老虎劉簽名的這本書(包郵)。

本文分享自微信公衆號 - 老虎劉談oracle性能優化(sql_tigerliu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索