出版時間:2012-9 出版社:人民郵電出版社 作者:[澳] Guy Harrison 頁數:555 字數:850000 譯者:鄭勇斌,胡怡文,童家旺
Tag標簽:無
前言
性能一直是數據庫面臨的主要問題,Oracle也不能例外。作為執(zhí)行大部分磁盤IO和數據處理的應用程序的一部分,數據庫通常是影響應用程序吞吐量的制約因素,也是影響應用程序響應時間的決定因素。無論是現在還是將來,數據庫的性能管理與數據庫代碼調優(yōu)都是數據庫專業(yè)人員的一個高優(yōu)先級的事情。最近幾年,數據庫性能優(yōu)化的重要性一直在提高。從傳統(tǒng)意義上來講,性能調優(yōu)主要偏重于滿足商業(yè)服務水平的目標上,這些目標包括應用程序的吞吐量與事務的響應時間。在互聯網高度繁榮的年代,與過去相比,我們在性能問題上可以投入更多的資金,通過添加硬件通常是提高性能最快的途徑。然而今天,這種情況發(fā)生了很大的變化。· 無論是從經濟基本面看,還是從IT預算方面看,經濟都在發(fā)生著變化。商業(yè)機構盡可能地尋求減少IT資產的總成本,包括硬件開支、軟件許可費用、IT薪酬和電力消耗成本?;ㄥX來為性能問題埋單基本不太可能了,當然,這也不能產生經濟效益。· 減少能量消耗(尤其是電力消耗)也是企業(yè)不斷增強的社會義務。運行繁忙的數據庫服務器消耗的電力不僅需要花錢,也產生了環(huán)境成本。一個調優(yōu)較差的數據庫就像一輛逆火和冒著煙的狀況不佳的汽車,雖然它或許可以把你從A地載到B地,但是它將耗費更多的汽油,并對環(huán)境造成更加嚴重的影響。· 網格和效用計算正在變成現實。在網格和虛擬化技術出現以前,從一臺數據庫服務器上節(jié)省的內存或CPU不太容易被其他的數據庫服務器使用。今天,把一臺數據庫服務器上節(jié)省的資源拿到另外一臺數據庫服務器或者非數據庫服務上重用,正在逐漸變成可能。因此,盡管把性能調優(yōu)的努力集中在商業(yè)服務水平的目標上仍是正確的,但是通過減少能量消耗,性能調優(yōu)也為商業(yè)盈利能力做出了貢獻,且對社會和環(huán)境的責任產生了附加的價值。我們既有商業(yè)責任,也有社會責任來確保數據庫以最高效的方式運行。作為一個圖書愛好者和一個堅定的Oracle技術人員,我曾經買過很多極好的Oracle技術圖書。我最喜愛的一些圖書被列舉在參考書目中。已經有了這么多好書,為什么還要再寫一本?就自身而言,我仍然需要一本提供了系統(tǒng)的、全面的并易于理解的Oracle調優(yōu)方法的書,一本涵蓋Oracle性能管理的所有方面的書。涉及了Oracle調優(yōu)必要知識的書、適合專業(yè)技術的所有級別和覆蓋了所有相關的原則的一本“求生指南”的書,這本書能夠引導大家完成大多數性能管理的挑戰(zhàn)和機會。因此,在寫本書時,我制訂了下面的這些目標。· 盡可能用最系統(tǒng)有效的方式闡述性能問題,為Oracle性能調優(yōu)提供一個結構化方法。· 從應用到數據庫設計,以及通過SQL調優(yōu)、爭用管理和針對內存和物理IO的管理等角度來解決Oracle性能管理的所有方面的問題。· 在提供技術深度和廣度的同時,保持對調優(yōu)的基礎原理的強烈關注。關注基礎原理,通常可以獲得最大的性能調優(yōu)收益,如果不解決,通常會限制應用高級技巧可獲取的收益。· 為Oracle調優(yōu)初學者與具有豐富實踐經驗的調優(yōu)人員提供可利用的內容。讀者范圍本書適用于對提高Oracle數據庫性能或者數據庫的應用感興趣的任何人。包括應用架構師、開發(fā)人員和Oracle數據庫管理員。并不是本書的所有章節(jié)都能讓應用架構師與開發(fā)人員產生興趣,比如,他們很少有機會決定磁盤存儲陣列上Oracle數據文件的分布。類似地,數據庫管理員們經常會參與性能調整的所有方面,但是很少會參與應用設計。這些人員分組里的每一個人都有可能選擇跳過本書的某些章節(jié),他們對性能的這些方面沒有控制權。然而,我要著重強調本書的理念,在緩解系統(tǒng)癥狀前,它提倡專注于解決導致性能問題的根本原因。在本書后面的章節(jié)中(例如磁盤IO調優(yōu)),我們假定你們已經處理了前面的章節(jié)中已經列出那些行為(例如調優(yōu)SQL)。為了使對Oracle數據庫不太熟悉的新手容易理解本書,我將簡要介紹并定義一些關鍵概念和Oracle的體系結構。然而,我假定大部分人熟悉Oracle和SQL語言。本書的組織結構在第1章中,圍繞分層調優(yōu)的概念,我介紹了調優(yōu)方法論。這種方法論提供了一種針對Oracle性能優(yōu)化的有效的、系統(tǒng)化的方法,在優(yōu)化外在癥狀前關注于優(yōu)化根本原因,這可以最大化調優(yōu)投資的性能回報。本書大部分圍繞這種方法論來組織,包括下面的主要章節(jié)。· 第一部分:方法、概念和工具 第1章到第3章,描述提供了最有效的優(yōu)化Oracle數據庫的方法的性能調優(yōu)的方法論。我們還關注跟蹤、監(jiān)控和診斷Oracle數據庫性能的基本工具和技術,同時也對Oracle數據庫的體系結構進行了概述。· 第二部分:應用和數據庫設計 第4章到第6章介紹應用和數據庫設計。這些章節(jié)涵蓋數據庫的邏輯和物理設計、索引、事務設計以及Oracle API的最佳使用。· 第三部分:SQL和PL/SQL調優(yōu) 這部分由第7章到第14章組成,覆蓋了SQL語句的優(yōu)化。SQL語句調優(yōu)通常貢獻絕大部分的數據庫性能提升機會,并且應該在對數據庫服務器調優(yōu)之前優(yōu)先被處理。我們也關注利用并行SQL和PL/SQL代碼的進行調優(yōu)的方法。· 第四部分:最小化爭用 第15章到第17章討論了爭用的多個方面。Oracle數據庫資源的爭用(比如鎖、閂鎖和共享內存)限制了數據庫處理應用程序發(fā)起的請求的能力。通過減少爭用,我們可以增加數據庫能夠服務的應用程序的請求量。· 第五部分:優(yōu)化內存 第18章到第20章介紹通過最優(yōu)化內存配置來提升性能。內存優(yōu)化減少了成為物理IO的邏輯IO的數量。因此,優(yōu)化內存是數據庫服務器性能中的一個根本因素。· 第六部分:IO調優(yōu)和集群 從第21章到第22章討論了物理磁盤IO。我們?yōu)楸苊獯疟PIO而竭盡所能了?,F在,該是優(yōu)化剩余的磁盤IO的時候了。在這部分里,我們關注如何配置Oracle和磁盤IO子系統(tǒng)來降低IO負載以及提高IO吞吐量。第1章到第22章既可用于RAC系統(tǒng),也可用于單實例Oracle。然而,RAC的確引入了一些特有的考慮,我們將在第23章中探討這些。關于示例和樣本數據在本書的討論中,頻繁使用到幾個腳本來報告數據庫性能的某些方面??梢酝ㄟ^本書的站點http://www.informit.com/store/product.aspx·isbn=0137011954下載這些腳本。還可以訪問我的站點http://www.guyharrison.net與博客查找一些其他的資料。貫穿本書,還將看到為了描述各種調優(yōu)原則的SQL語句和PL/SQL程序的例子。在本書的任何地方,這些示例都采用標準的Oracle數據樣本模式,可以在創(chuàng)建數據庫時安裝這些樣本模式,也可以在以后手動安裝。B10771-01(Oracle 10g)或B28328-01(Oracle 11g)的手冊中有對這些模式的詳細描述,可以在http://technet.oracle.com獲得這些手冊。有些案例中,某些樣本表中的行記錄數太少,以致無法有效地描述特定的SQL調優(yōu)或者其他的類似場景?;谶@個原因,我寫了一個過程來增加CUSTOMERS和SALES等關鍵表的大小??稍诒緯军c可用的腳本包里找到這些PL/SQL包。本書覆蓋的Oracle版本本書全面覆蓋了Oracle 10g和11g版本,包括Oracle 11g 發(fā)行版本2。某些引用偶爾會使用Oracle的早期版本,但本書中使用的所有示例都可以在Oracle 10g或Oracle 11g數據庫中找到。在本書將要出版時,Oracle 11g 發(fā)行版本2仍處于beta狀態(tài)。在Oracle 11g發(fā)行版本2的正式發(fā)行版本里,可能會有一些細微的行為變化。如果這種情況發(fā)生,我將在本書的站點和我的個人站點中予以說明。關于Quest軟件和Spotlight我21年職業(yè)生涯的大半時間是在Quest軟件公司從事Oracle技術相關的工作。在Quest時,我一直深度介入了許多Oracle開發(fā)和管理工具的開發(fā),但是,主要還是集中在Spotlight on Oracle和Spotlight on Oracle RAC軟件上。我認為Spotlight極好地涵蓋了Oracle性能管理的一個方面,我已經談過這個特性并且有時會提供一個屏幕快照。因為我既是Spotlight的架構師,也是本書的作者,你可以假定Spotlight代表了本書提及的許多原則和實踐,而且我肯定鼓勵大家下載并評估Spotlight。然而,鑒于Spotlight是我付出的心血,當涉及Spotlight或者Quest的任何軟件產品時,我?guī)缀醪豢赡軟]有任何偏向。致Oracle SQL High Performance Tuning的讀者自Oracle SQL High Performance Tuning的第2版出版到現在差不多有8年了,我仍能經常收到編寫此書第3版的要求。那些認為Oracle SQL High Performance Tuning有價值的人,應該會發(fā)現這本書完全可以取代那本書的第3版。在本書中,我延續(xù)著Oracle SQL High Performance Tuning的嚴謹務實的方法,而且對Oracle性能管理的原理進行了更加廣泛的延伸。在本書中,仍然保持著對SQL調優(yōu)的關注,但是,是在一個更加寬廣的范圍,包括應用程序、數據庫設計、數據庫服務器配置和優(yōu)化。致 謝感謝組稿編輯Trina McDonald鼓勵我承擔這個項目并且監(jiān)督這個過程。我還要特別感謝Pearson出版社的Olivia Basegio、Michael Thurston和 Tonya Simpson三位編輯。特別感謝技術審核Patrick O’Keeffe、Bert Scalzo和Oleg Voskoboynikov。本書涉及了大量的資料,非常感謝他們的技術支持和反饋。Steven Feuerstein也對本書第6章和第12章提供了一些極好的反饋。感謝你們所有的人。感謝在Oracle社區(qū)不斷分享他們的經驗和對Oracle技術的真知灼見的那些人。如果沒有那些自由分享的智慧財富,我根本寫不出本書。附錄列舉了我非常感謝的一些博客與博主。最后,也是最重要的,一如繼往地感謝一直陪伴左右的妻子Jenni和孩子Chris、Kate、Mike和William。因為有了你們的愛和支持,本書才得以完成,在編寫本書和其他寫作項目期間,你們還得遷就我,在此深表歉意。
內容概要
Oracle數據庫的應用十分廣泛,數據庫性能的好壞直接影響應用程序能否快速響應用戶指令。而Oracle數據庫又比較復雜,數據庫性能調優(yōu)成為眾多DBA最為頭疼的問題。本書作者憑借其20多年的豐富經驗,為我們帶來了一本系統(tǒng)的、全面的Oracle性能優(yōu)化手冊,用結構化方法幫助讀者解決從數據庫應用到數據庫設計的所有問題。全書分為6部分、23章,實例豐富,兼具技術深度和廣度,被讀者譽為“最有用的Oracle性能調優(yōu)參考書”。主要內容包括:
有效的Oracle性能優(yōu)化方法描述;
如何充分利用Oracle的核心工具來跟蹤、監(jiān)控、診斷性能;?
高效的數據庫邏輯與物理設計、索引設計、事務設計以及API的使用;
SQL與PL/SQL調優(yōu),包含并行SQL技術的使用;?
最小化排隊鎖、閂鎖、共享內存以及其他數據庫資源的爭用;
優(yōu)化內存以及物理磁盤I/O;?
調優(yōu)Oracle?
RAC。
本書適用于所有的Oracle
DBA。
作者簡介
Guy
Harrison 知名Oracle技術專家,在應用與數據庫管理、性能調優(yōu)、軟件開發(fā)領域有20多年的從業(yè)經驗。目前任Quest軟件公司研發(fā)總監(jiān),帶領軟件開發(fā)團隊研發(fā)了廣受歡迎的Spotlight系列產品,他負責Spotlight的Oracle版本、Oracle RAC版本、MySQL版本及SQL Server版本。除本書外,他還著有Oracle SQL High Performance
Tuning、Oracle Desk Reference及MySQL Stored Procedure
Programming。
書籍目錄
第一部分 方法、概念和工具
第1章 Oracle性能調優(yōu):一種系統(tǒng)化方法
1.1 Oracle性能調優(yōu)簡史
1.2 超越表面分析法
1.3 第一階段:最小化應用負載
1.4 第二階段:降低爭用和瓶頸
1.5 第三階段:降低物理IO
1.6 第四階段:優(yōu)化磁盤IO
1.7 本章小結
第2章 Oracle體系結構與基本概念
2.1 Oracle API
2.1.1 創(chuàng)建游標
2.1.2 檢查緩存的SQL語句
2.1.3 解析SQL語句
2.1.4 關聯綁定變量
2.1.5 執(zhí)行SQL語句
2.1.6 提取記錄
2.1.7 使用批量提取
2.1.8 處理結果集
2.1.9 關閉游標
2.1.10 優(yōu)化Oracle API調用
2.2 Oracle查詢優(yōu)化器
2.2.1 基于成本的優(yōu)化
2.2.2 優(yōu)化器目標
2.2.3 優(yōu)化器統(tǒng)計信息
2.2.4 綁定變量窺視與自適應游標共享
2.2.5 提示
2.2.6 存儲概要、SQL概要和SQL計劃基線
2.3 事務和鎖
2.4 Oracle服務器體系結構
2.4.1 實例與數據庫
2.4.2 系統(tǒng)全局區(qū)
2.4.3 數據緩存
2.4.4 程序全局區(qū)
2.4.5 內存管理
2.5 段與文件
2.5.1 表
2.5.2 索引
2.5.3 塊、區(qū)間、段以及分區(qū)
2.5.4 表空間與數據文件
2.5.5 回滾段
2.5.6 重做日志與歸檔日志
2.5.7 閃回日志
2.6 服務器進程
2.7 后臺進程
2.8 真正應用集群
2.9 本章小結
第3章 實用工具
3.1 生成SQL語句的執(zhí)行計劃
3.1.1 計劃表
3.1.2 研究緩存的SQL
3.1.3 DBMS_XPLAN
3.1.4 解釋執(zhí)行計劃
3.1.5 虛擬索引
3.2 跟蹤Oracle的執(zhí)行
3.2.1 從當前會話中調用跟蹤
3.2.2 識別跟蹤文件
3.2.3 獲取跟蹤狀態(tài)
3.2.4 在其他會話中調用跟蹤
3.2.5 通過MODULE、ACTION或SERVICE進行跟蹤
3.2.6 使用登錄觸發(fā)器來啟用跟蹤
3.2.7 定位跟蹤文件
3.2.8 其他特殊化的跟蹤
3.3 使用tkprof格式化跟蹤文件
3.3.1 tkprof的排序選項
3.3.2 其他tkprof選項
3.3.3 合并多個SQL跟蹤文件
3.3.4 解釋tkprof的輸出結果
3.3.5 tkprof中的執(zhí)行計劃
3.3.6 等待統(tǒng)計信息與tkprof
3.3.7 tkprof的替代品
3.4 在SQL*PLUS中使用AUTOTRACE
3.5 監(jiān)控Oracle服務器
3.5.1 V$表接口
3.5.2 等待接口
3.5.3 時間模型
3.5.4 整合時間模型與等待接口
3.5.5 Oracle企業(yè)管理器
3.5.6 SPOTLIGHT ON ORACLE
3.6 本章小結
……
第二部分 應用和數據庫設計
第4章 數據庫邏輯設計和物理設計
第5章 索引與簇
第6章 應用設計與實現
第三部分 SQL和PL/SQL調優(yōu)
第7章 優(yōu)化器的優(yōu)化
第8章 執(zhí)行計劃管理
第9章 表訪問調優(yōu)
第10章 聯結與子查詢
第11章 排序、分組與集合操作
第12章 使用和調優(yōu)PL/SQL
第13章 并行SQL
第14章 DML調優(yōu)
第四部分 最小化爭用
第15章 鎖爭用
第16章 閂鎖和互斥爭用
第17章 共享內存爭用
第五部分 優(yōu)化內存
第18章 緩沖區(qū)高速緩存調優(yōu)
第19章 優(yōu)化PGA內存
第20章 其他的內存管理主題
第六部分 IO調優(yōu)和集群
第21章 磁盤IO調優(yōu)基礎
第22章 高級IO技術
第23章 優(yōu)化RAC
參考書目
章節(jié)摘錄
版權頁: 插圖: 分區(qū)使得表和索引由多個數據段構成。用戶可以單獨地管理每一個分區(qū)段,并且可以獨立地設置每個分區(qū)段的存儲參數(例如,可以將每個段存儲在不同的表空間中)。 分區(qū)有很多優(yōu)勢,如下所述。 查詢只需要讀取包含相關數據的分區(qū),減少了特定的查詢所需要的邏輯讀。分區(qū)排除 ( partition elimination)技術尤其適合那些因為讀取表的數據過多以致于無法有效利用索引的SQL查詢,而且這些SQL查詢仍然只需要讀取某些分區(qū),而不用讀取整張表。 將表和索引分割成多個數據段,并行處理能力將得到大幅度提高。這包括查詢、插入、更新和刪除等數據管理操作,也包括索引重建等維護類型的操作。 刪除大批量過期的數據時,有時可以通過刪除過期的分區(qū)來高效地完成,而不必采用消耗很多資源的刪除語句來進行行級刪除。 在有些情況下,將表和索引分割成多個數據段也可以降低鎖爭用。當數據庫運行在RAC環(huán)境中時,它特別有用,因為它能夠降低熱點塊( Hot block)爭用,進而降低閂鎖(latch)爭用(參考第16章)。 并不是所有的Oracle版本都能夠使用分區(qū)。分區(qū)功能目前是Oracle數據庫企業(yè)版的一個選件,需要額外花錢獲得授權許可才可以使用。 4.6.1 分區(qū)的類型 Oracle提供了多種不同的分區(qū)方案,用來確定哪些行被分配給哪些分區(qū)。在每一種分區(qū)方案中,它都依賴于某個列或某些列的取值,這些列稱為分區(qū)鍵( partition key)。下面是幾種不同的分區(qū)機制。 范圍分區(qū)(Range partitioning),就是根據表中的分區(qū)鍵取值的范圍,決定將該數據存儲在哪個分區(qū)上。我們在時間類型的列上經常能夠看到范圍分區(qū),這種方式可以讓我們通過刪除一個分區(qū)來快速地清除過期的數據。間隔分區(qū)是Oracle llg中范圍分區(qū)的一個擴展,當數據來自新的間隔的時候(如一個月或其他時間范圍),一個新的范圍分區(qū)會被自動創(chuàng)建。 散列分區(qū)( Hash partitioning)通過一個數學上的散列算法來確定一行記錄應該存儲在哪個分區(qū)。這有助于確保每個分區(qū)的大小相同,但是,對于在分區(qū)鍵上進行范圍檢索的查詢來講,它有可能不支持分區(qū)排除功能。 列表分區(qū)( List partitioning)根據預先定義好的分區(qū)鍵數值確定記錄被分配到哪個分區(qū)。 它和范圍分區(qū)有些類似,但更加靈活,能夠將分區(qū)鍵取值不相鄰的記錄存儲在相同的分區(qū)中。 Oracle 11g中還引入了一些新的分區(qū)方案。
媒體關注與評論
“本書涉及的主題之廣泛、闡述之細致令我吃驚,像我這種在Oracle領域摸爬滾打了近20年的人也受益匪淺。”——Rob Hamel,Pythian咨詢集團副總裁,資深Oracle專家“Harrison先生在Oracle性能調優(yōu)領域備受尊崇,他的書是我在Oracle數據庫性能方向的啟蒙讀物。本書為Oracle性能調優(yōu)提供了一個結構化方法,同時極為重視基礎理論,旨在幫助讀者解決Oracle性能管理所有方面的問題。”——讀者評論“與那些整頁都是不可復制的‘測試用例’代碼清單的純理論性圖書截然不同。對于Oracle DBA來說,這是一本實用性極強的書。”——讀者評論
編輯推薦
Oracle數據庫優(yōu)化必讀知名作者力作,全面介紹Oracle性能管理源于實戰(zhàn),精于實例內容涵蓋Oracle 10g、11g及11g發(fā)行版本2
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載