![]() ![]() |
Oracle數據庫存儲管理與性能優(yōu)化 ![]()
本書以Oracle 11g為藍本,在某些實踐應用中也講到了12c版本,全面系統(tǒng)地介紹了大型對象關系型數據庫服務器Oracle性能優(yōu)化方面的大部分內容,包括看懂SQL執(zhí)行計劃、Oracle存儲管理、Oracle內存管理、Oracle性能指標及追蹤、Oracle性能報告、Oracle實戰(zhàn)案例等內容
透徹講述不同存儲方案的工作機理并驗證;性能優(yōu)化方面著重在問題發(fā)生、預判、防患、分析和解決上給出可行方案。
就大多數情況而言,先期的數據庫部署包括內存、存儲等部署均由DBA做好,唯有SQL語句不是DBA做的,是由應用開發(fā)者書寫的,這往往是導致后期數據庫性能瓶頸的主要因素。因此,本書將“SQL執(zhí)行計劃”作為本書開篇第2章進行闡述。通過本章,可以讓讀者明白SQL語句到底使得數據庫發(fā)生了什么,數據庫都干了什么,是如何干的等細節(jié),從而找出性能瓶頸的線索,為快速定位并解決問題提供依據。因此,看懂SQL執(zhí)行計劃是DBA的基本功。
本書傾向于Oracle DBA的讀者,是在“仿真”環(huán)境下模擬問題、分析問題、解決問題的基礎上撰寫而成,因此,“仿真”環(huán)境是本書的一大亮點和特色,其主導思想是一切從實踐出發(fā),立足問題、解決問題,把實操、實踐作為重點。不僅如此,書中把一些“極為抽象”的理論通俗化,便于讀者理解。 另外,本書旨在讓讀者充分理解Oracle在性能優(yōu)化方面的基礎理論及原理性的知識,其中性能優(yōu)化解決方案是本書重點闡述的內容,著重在問題發(fā)生、預判、防患、分析、解決上給出可行方案。 在性能優(yōu)化方面,首先給出不同優(yōu)化方案的工作機理,然后循著看懂SQL執(zhí)行計劃→內存管理實驗→性能指標分析→得出性能實驗結論→提出性能提升改進方案的步驟展開講解。 在存儲方面,首先給出不同存儲方案的工作機理以及對性能的影響并加以驗證,然后給出合理的解決方案。 在具體細節(jié)方面,針對具體問題,闡明有可能導致問題的原因并加以驗證,然后給出針對具體細節(jié)的解決方案并進行驗證。 本書也涉及幾個有關性能的報告,由數據庫自身提供。 關于《Linux下Oracle 10g 遷移到Oracle 11g的案例》是筆者于2018年為天津市海關成功實施的案例,總結出來與大家分享并以電子文檔的形式贈與讀者。讀者完全可以參考借鑒其中的做法,極具實踐指導意義。 總之,性能優(yōu)化涉及數據庫自身內存優(yōu)化、存儲優(yōu)化以及外部應用優(yōu)化等。是既細致又復雜,充滿挑戰(zhàn)的一件事情,要求DBA掌握必要的數據庫機理,在此基礎上得出自己的判斷,找出問題根源。本書將有助于DBA縮短定位問題的時間,從而快速解決問題。 本書組織結構 本書共分為6個篇章: 第一篇章(第1~2章):Oracle體系結構及SQL計劃篇,著重闡述Oracle體系結構及SQL執(zhí)行計劃方面的有關內容。 第二篇章(第3~5章):Oracle存儲管理篇,著重闡述Oracle數據庫存儲結構、表空間、ASM自動存儲管理等方面的內容。 第三篇章(第6~7章):Oracle內存管理篇,著重闡述Oracle的內存結構及分析與調整等方面的內容。 第四篇章(第8~10章):Oracle性能指標及實驗篇,著重闡述Oracle動態(tài)性能指標、索引與性能、性能實驗以及不合理的表結構、SQL語句對Oracle性能的影響與措施等方面的內容。 第五篇章(第11~12章):Oracle性能報告篇,著重闡述AWR及ADDM報告方面的內容。 第六篇章(第13~14章):Oracle實戰(zhàn)案例篇,著重闡述Oracle 11g R2 RAC集群部署實驗、Linux下Oracle 10g 遷移到Oracle 11g的案例以及Oracle特殊問題的解決案例等方面的內容。 配套資源 為了讓讀者切實學習好本書,隨書提供下列配套資料。 (1)書中示例或綜合實例源代碼。下載包源代碼的代碼號與書中的代碼號是一 一對應的;這樣就省去了讀者敲寫的麻煩,通過復制粘貼操作就可在自己的環(huán)境下執(zhí)行了。 (2)本書的實驗環(huán)境。該環(huán)境是從一個在用的生產系統(tǒng)里通過exp導出的dmp文件,實實在在的真實環(huán)境而非模擬虛構(其中的敏感數據已處理),該環(huán)境除滿足本書的實驗要求外,其中的存儲子程序(過程、函數及觸發(fā)器)以及DBlink等很多東西,對于從事Oracle數據庫開發(fā)的讀者也具有很好的借鑒和參考價值,是非常難得的資料。 讀者需要通過imp命令將該dmp文件導入到自己數據庫中,具體的導入操作,請參閱下載包中的使用說明。 (3)Linux環(huán)境下,將Oracle10g 2T數據遷移到11g下的完整案例電子文檔。該電子文檔詳細說明了一整套的數據庫遷移過程,對于擬進行Oracle數據庫遷移工作的讀者,很有實踐指導意義。 本書的整體下載包讀者可通過下面的二維碼和下載鏈接獲取使用。 http://www.m.crphdm.com/2020/0818/14285.shtml 備用網盤鏈接:https://pan.baidu.com/s/1Jp2OdUZGoxsw96WVoG8ogQ 提取碼:z8vq 作者介紹與推薦 筆者畢業(yè)于北京交通大學電氣工程及自動化專業(yè),目前供職于中國鐵路北京局集團公司。自從參加工作以來,先后參與了多個鐵路應用項目的開發(fā)工作,同時也與多家IT企業(yè)合作研發(fā)數據庫架構設計及開發(fā)項目。通過這些項目的開發(fā),筆者積累了一定的實踐經驗,并從中獲取了一些數據庫開發(fā)運維的心得。 除此之外,自2014年起,筆者一直在天津大學軟件學院從事兼職教學工作,所授課程為Oracle和PHP,教學經驗的積累也讓我更清晰地明白了如何把一個知識點講解更清楚,力求引領讀者盡快掌握書中所講內容。 適用人群 本書的讀者為具有Oracle一定理論基礎及實踐經驗且希望或正在從事DBA的人員以及應用開發(fā)人員。 致謝 面對當今信息科技的日新月異,筆者也深感追趕不上時代的腳步,本書難免有疏漏和不足的地方,敬請讀者朋友批評指正,在此深表謝意。
甘長春老師畢業(yè)于北京交通大學電氣工程及自動化專業(yè),目前供職于中國鐵路北京局集團公司。自從參加工作以來,先后參與了多個鐵路應用項目的開發(fā)工作,同時也與多家IT企業(yè)合作研發(fā)數據庫架構設計及開發(fā)項目。通過這些項目的開發(fā),積累了一定的實踐經驗,并從中獲取了一些數據庫開發(fā)運維的心得。
除此之外,自2014年起,甘長春老師一直在天津大學軟件學院從事兼職教學工作,所授課程為Oracle和PHP,教學經驗的積累也讓他更清晰地明白了如何把一個知識點講解更清楚,力求引領讀者盡快掌握書中所講內容。 張建軍,畢業(yè)于天津師范大學計算機科學與技術專業(yè) ,現(xiàn)任天津市融創(chuàng)軟通科技股份有限公司副總經理,教育培訓事業(yè)部技術總監(jiān) ,高級工程師;Oracle認證專家,RedHad(紅帽)認證專家, 截至目前有近20年的軟件開發(fā)、項目管理及教育培訓工作經驗。
第1章 Oracle體系結構概述 1
1.1 Oracle數據庫進程結構 2 1.2 Oracle數據庫邏輯結構 3 1.3 Oracle數據庫物理結構 5 1.4 Oracle數據庫邏輯結構與物理結構的耦合關系 6 1.5 本章小結 8 第2章 SQL執(zhí)行計劃 9 2.1 看懂SQL執(zhí)行計劃前需要掌握的概念 9 2.2 SQL*Plus的執(zhí)行計劃設置 12 2.2.1 設置Autotrace(自動跟蹤)參數 12 2.2.2 在SQL*Plus中顯示SQL執(zhí)行計劃 13 2.3 使用TOAD、SQL Developer工具 21 2.3.1 TOAD分析工具 21 2.3.2 SQL Developer分析工具 22 2.4 SQL解析 24 2.4.1 Oracle SQL的硬解析和軟解析 27 2.4.2 動態(tài)分析采樣 28 2.5 關于RBO與CBO 28 2.6 關于執(zhí)行計劃中的索引訪問方法 30 2.6.1 索引唯一掃描(INDEX UNIQUE SCAN) 31 2.6.2 索引范圍掃描(INDEX RANGE SCAN) 32 2.6.3 索引跳躍掃描(INDEX SKIP SCAN) 33 2.6.4 索引快速全掃描(INDEX FAST FULL SCAN) 34 2.7 通過DBMS_XPLAN包查看以往SQL的執(zhí)行計劃 35 2.8 常用Hints(提示) 36 2.8.1 與優(yōu)化器模式相關的Hint 37 2.8.2 與表訪問相關的Hint 40 2.8.3 與索引訪問相關的Hint 40 2.8.4 與表連接順序相關的Hint 47 2.9 實踐案例:位圖索引對性能的影響 48 2.10 實踐案例:分區(qū)索引對性能的影響 52 2.10.1 關于分區(qū)索引的說明 52 2.10.2 分區(qū)索引實驗 54 2.11 如何更好地判斷SQL效率 71 2.12 本章小結 72 第3章 Oracle數據庫存儲結構 73 3.1 邏輯存儲結構 73 3.1.1 塊(Block) 73 3.1.2 區(qū)(Extent) 74 3.1.3 段(Segment) 75 3.1.4 表空間(Tablespace) 75 3.1.5 4種邏輯存儲結構的關系 76 3.2 Oracle物理存儲結構 76 3.3 本章小結 77 第4章 Oracle表空間 78 4.1 表空間管理 78 4.1.1 表空間(TABLESPACE)的類型 79 4.1.2 表空間(TABLESPACE)的管理 80 4.1.3 表空間(TABLESPACE)的創(chuàng)建 82 4.2 表空間的查看 88 4.2.1 表空間固定信息的查看 89 4.2.2 表空間動態(tài)信息的查看 90 4.3 表空間管理準則 91 4.4 創(chuàng)建表空間應遵循的一般原則 92 4.5 表空間創(chuàng)建模板及其刪除應用場景分析 94 4.5.1 表空間創(chuàng)建模板語句 95 4.5.2 表空間刪除的4種方式及其應用場景分析 96 4.6 關于表空間創(chuàng)建的數據文件DATAFILE參數 98 4.6.1 SIZE子句 99 4.6.2 EXTENT分區(qū)分配方案 99 4.6.3 關于REUSE(重復使用)的說明 99 4.7 關于表空間參數的其他說明 101 1.段Segment管理策略 101 2.Table/Segment/Extent/Block之間的關系 101 3.TABLESPACE和DATAFILE之間的關系 101 4.8 回收表空間中浪費的空間 101 4.8.1 查看表空間碎片率 102 4.8.2 得到表空間的DDL(創(chuàng)建)語句 103 4.8.3 表空間屬性PCTINCREASE(百分比)參數的修改 105 4.8.4 回收表空間碎片 105 4.8.5 Oracle移動索引到其他表空間 112 4.9 TABLE的碎片回收 113 4.9.1 與回收TABLE碎片有關的兩個存儲過程 113 4.9.2 表碎片回收處理 118 4.10 Oracle 11g undo_retention(撤銷保留時間) 120 4.10.1 關于undo 的參數 121 4.10.2 undo_retention(撤銷保留時間)狀態(tài)說明及參數調整 122 4.11 本章小結 123 第5章 自動存儲管理(ASM) 125 5.1 ASM概述 125 5.1.1 ASM冗余 125 5.1.2 ASM進程 126 5.1.3 ASM實例和數據庫實例對應關系 127 5.1.4 Cluster(集群) ASM 架構 127 5.2 ASM實例搭建 128 5.2.1 環(huán)境介紹 128 5.2.2 創(chuàng)建裸設備以及創(chuàng)建ASM磁盤組 129 5.2.3 安裝Oracle 網絡基礎架構win64_11gR2_grid組件 133 5.2.4 后續(xù)處理 134 5.3 ASM實例管理 136 5.3.1 查看可用分區(qū) 137 5.3.2 加入ASM磁盤 138 5.3.3 開啟CSS服務 139 5.3.4 新建ASM DiskGroup給數據庫使用 139 5.4 磁盤組的管理 143 5.4.1 磁盤組的創(chuàng)建與刪除 144 5.4.2 ASM磁盤的添加和刪除 147 5.4.3 磁盤組信息的查詢 149 5.4.4 磁盤組的重新平衡 150 5.4.5 磁盤組的加載和卸載 150 5.4.6 目錄管理 151 5.4.7 別名管理 152 5.5 如何使用ASM磁盤組 153 5.5.1 創(chuàng)建數據文件 153 5.5.2 添加重做日志文件 157 5.5.3 創(chuàng)建數據庫 159 5.6 本章小結 159 第6章 Oracle的內存結構 160 6.1 Oracle內存結構 160 6.1.1 SGA(系統(tǒng)全局區(qū)) 161 6.1.2 PGA(程序全局區(qū)) 163 6.1.3 UGA(用戶全局區(qū)) 165 6.2 SGA組件介紹 165 6.2.1 固定SGA(Fixed SGA) 166 6.2.2 塊緩沖區(qū)(Database Buffer Cache) 166 6.2.3 數據高速緩存的工作原理過程 167 6.2.4 重做日志緩沖區(qū)(Redo Log Buffer) 168 6.2.5 共享池(Shared Pool) 169 6.2.6 大池(Large Pool) 170 6.2.7 Java池(Java Pool) 170 6.2.8 流池(Stream Pool) 170 6.3 PGA結構 171 6.3.1 Private SQL Area(私有SQL區(qū)) 171 6.3.2 Work Area(工作區(qū)) 172 6.3.3 Session Memory 173 6.3.4 自動PGA管理 174 6.4 Oracle 11g系統(tǒng)進程介紹 175 6.4.1 數據庫寫進程(DBWn) 177 6.4.2 日志文件寫進程(LGWR) 178 6.4.3 檢查點進程(CKPT) 179 6.4.4 系統(tǒng)監(jiān)控進程(SMON) 180 6.4.5 進程監(jiān)控進程(PMON) 180 6.4.6 恢復進程(RECO) 180 6.4.7 作業(yè)隊列進程(CJQn) 181 6.4.8 歸檔進程(ARCn) 181 6.4.9 隊列監(jiān)控進程(QMNn) 182 6.4.10 調度進程(Dnnn) 182 6.4.11 內存管理進程(MMAN) 182 6.4.12 恢復寫入進程 (RVWR) 182 6.4.13 內存管理進程(MMON) 183 6.4.14 其他后臺進程 183 6.5 自動共享內存管理(ASMM) 183 6.6 關于11g與12c內存管理 185 6.6.1 Orodo內存管理形式 186 6.6.2 11g下的AMM內存管理 187 6.7 本章小結 188 第7章 Oracle的內存分析與調整 189 7.1 Oracle 內存工作機制 189 7.2 內存使用情況分析 190 7.2.1 剩余內存 190 7.2.2 內存擊中率 190 7.3 SQL效率及其他指標查看分析 193 7.3.1 檢查占用CPU時間比較長的SQL語句 193 7.3.2 執(zhí)行效率最差的SQL語句 194 7.3.3 識別低效率執(zhí)行的語句 195 7.3.4 V$sqlarea視圖提供的執(zhí)行細節(jié) 196 7.3.5 查看數據庫db_cache_size及各類pool_size值 198 7.4 Oracle內存調整——系統(tǒng)全局區(qū)SGA 199 7.5 Oracle內存調整——共享池(Shared Pool) 201 7.5.1 共享池(Shared Pool)相關視圖 201 7.5.2 共享池(Shared Pool) 207 7.5.3 庫高速緩存(Library Cache) 208 7.5.4 數據緩沖區(qū)(Buffer Cache) 215 7.5.5 重做日志緩沖區(qū)(Redo Log Buffer) 221 7.5.6 大池 222 7.5.7 Java池 222 7.5.8 流池 223 7.6 本章小結 223 第8章 Oracle動態(tài)性能指標 224 8.1 主要與Oracle動態(tài)性能指標相關的基礎概念 224 8.2 從v$sysstat視圖獲取負載間檔 228 8.2.1 Buffer Cache Hit Ratio(DB緩存命中率) 229 8.2.2 Soft Parse Ratio(軟解析比率) 229 8.2.3 In-Memory Sort Ratio(內存排序率) 230 8.2.4 Parse To Execute Ratio(SQL解析執(zhí)行比率) 230 8.2.5 Parse CPU To Total CPU Ratio(CPU花費比率) 230 8.2.6 Parse Time CPU To Parse Time Elapsed(鎖競爭比率) 230 8.3 其他計算統(tǒng)計以衡量負載方式 231 8.3.1 Blocks Changed For Each Read(每次讀引起的塊改變) 231 8.3.2 Rows For Each Sort(每個排序引發(fā)的排序行量) 232 8.3.3 Oracle獲取當前數據庫負載情況信息 232 8.4 本章小結 234 第9章 Oracle的索引與性能 235 9.1 Oracle數據庫索引類型 235 9.1.1 B*tree索引 235 9.1.2 位圖索引(Bitmap Index) 236 9.1.3 位圖連接索引(Bitmap Join Index) 237 9.1.4 基于函數的索引(Function-Based Index) 237 9.1.5 應用域索引(Application Domain Index) 239 9.1.6 Hash索引 242 9.1.7 分區(qū)索引 242 9.2 索引典型操作 243 9.2.1 典型創(chuàng)建操作 243 9.2.2 典型刪除操作 243 9.2.3 典型移動操作 244 9.2.4 得到創(chuàng)建索引的SQL語句 244 9.2.5 查看數據庫中的索引及跳過設置 246 9.2.6 通用索引刪除腳本 246 9.3 有無索引及不同類型索引對查詢效率高低影響實驗 247 9.4 關于索引的建議 251 9.5 普通表轉分區(qū)表實驗及分區(qū)表相關信息查詢 254 9.5.1 普通表轉分區(qū)表實驗環(huán)境搭建 254 9.5.2 普通表轉分區(qū)表 255 9.5.3 查看Oracle都有哪些分區(qū)表 258 9.5.4 表分區(qū)查詢 259 9.6 本章小結 259 第10章 Oracle性能實驗 260 10.1 信息收集、庫加壓處理 260 10.1.1 信息收集處理 260 10.1.2 給數據庫加壓處理及瓶頸解決過程 270 10.1.3 存儲過程使用綁定 272 10.1.4 將UPDATE命令加載到共享池并以并行方式執(zhí)行 273 10.1.5 通過并發(fā)給數據庫加壓 273 10.1.6 查找SESSION ID及serial# 274 10.1.7 殺掉SESSION ID 275 10.1.8 通過merge命令加壓 275 10.1.9 批量數據加壓處理 277 10.2 信息查看跟蹤SQL語句 278 10.2.1 比率相關 278 10.2.2 等待、鎖及阻塞相關 286 10.2.3 獲取SQL語句相關 302 10.2.4 資源消耗相關 310 10.2.5 游標相關 313 10.3 日常需要記錄的監(jiān)控點以及監(jiān)控語句 315 10.4 關于Oracle的I/O 318 10.5 實驗結論 319 10.5.1 調優(yōu)過程 319 10.5.2 調優(yōu)前后SPFILE參數文件對比 323 10.5.3 實驗總結 326 10.6 本章小結 326 第11章 AWR報告 327 11.1 AWR報告綜述 327 11.2 什么情況下會用到AWR 332 11.3 如何生成AWR報告 333 11.4 分析AWR報告 336 11.4.1 AWR報告頭 336 11.4.2 Cache Sizes報告 337 11.4.3 Load Profile報告 337 11.4.4 Instance Efficiency Percentages報告 339 11.4.5 Shared Pool Statistics報告 341 11.4.6 Top 5 Timed Foreground Events(前5個嚴重等待事件)報告 341 11.4.7 SQL ordered by Elapsed Time報告 347 11.4.8 SQL ordered by CPU Time報告 348 11.5 使用腳本自動生成AWR報告 349 11.5.1 查快照snap_ID 349 11.5.2 建立腳本并執(zhí)行 350 11.6 本章小結 351 第12章 Oracle的ADDM報告 352 12.1 Oracle性能調優(yōu)綜述 352 12.2 Oracle ADDM報告概述 353 12.2.1 使用addmrpt.sql來創(chuàng)建ADDM報告 353 12.2.2 使用DBMS_ADVISOR程序包來創(chuàng)建ADDM報告 354 12.3 ADDM報告實驗 358 12.3.1 負荷環(huán)境搭建 358 12.3.2 第1次采集快照并施加負荷 359 12.3.3 采集第2次快照 359 12.3.4 創(chuàng)建一個優(yōu)化任務并執(zhí)行 360 12.3.5 查詢建議結果 361 12.3.6 ADDM報告解釋 361 12.4 本章小結 365 第13章 Oracle 11g R2 RAC集群部署實驗 367 13.1 總體規(guī)劃 367 13.1.1 部署環(huán)境 367 13.1.2 網絡配置 368 13.1.3 Oracle軟件組件 368 13.1.4 數據庫配置 369 13.1.5 存儲組件 369 13.2 服務器規(guī)劃 370 13.2.1 通過StartWind 6.0虛擬磁盤 370 13.2.2 劃分Oracle安裝目錄DB(F:)和虛擬內存(G:) 370 13.2.3 修改虛擬內存(兩個節(jié)點都設置) 371 13.2.4 修改winrac1和winrac2的hosts文件 372 13.2.5 修改注冊表,禁用媒體感知功能 372 13.3 網絡規(guī)劃 373 13.3.1 修改網卡名(兩個節(jié)點都設置) 373 13.3.2 修改網卡優(yōu)先級并配置IP 374 13.3.3 測試兩點的連通性 375 13.4 存儲規(guī)劃 376 13.4.1 規(guī)劃磁盤陣列 376 13.4.2 共享安裝目錄DB(F:)和C盤 377 13.5 安裝Grid軟件前的設置和檢查 378 13.5.1 服務器時間同步 378 13.5.2 檢測節(jié)點之間能否相互訪問共享 378 13.5.3 檢查Grid安裝是否符合條件 379 13.6 Grid及數據庫軟件的安裝 382 13.6.1 安裝win64 grid 11.2.0.4.0集群管理軟件 383 13.6.2 Clusterware安裝校驗(檢查CRS資源狀態(tài)) 387 13.6.3 安裝DATABASE軟件 388 13.6.4 創(chuàng)建ASM磁盤組 391 13.6.5 DBCA建立數據庫 394 13.7 Oracle RAC集群管理常用操作 398 13.8 本章小結 401 第14章 Oracle特殊問題的解決案例 402 14.1 ORA-00257 archiver error 402 14.2 由于恢復區(qū)空間不足導致ORA-03113錯誤 404 14.3 解決Oracle SYSAUX空間占用嚴重問題 405 14.3.1 清理SYSAUX下的歷史統(tǒng)計信息 406 14.3.2 清理SYAUX表空間中無效的ASH(活動會話歷史)信息 407 14.3.3 檢查SYSAUX表空間可收縮的數據文件 408 14.3.4 SYSAUX清理后的檢查 409 后記 411
你還可能感興趣
我要評論
|