天天看點

Oracle資料庫性能的優化

 随着網絡應用和電子商務的不斷發展,各個站點的通路量越來越大,如何使有限的計算機系統資源為更多的使用者服務?如何保證使用者的響應速度和服務品質?這些問題都屬于伺服器性能優化的範疇。作為較成功的資料庫廠商,Oracle公司資料庫的性能優化是如何進行的

   優化政策

   為了保證Oracle資料庫運作在最佳的性能狀态下,在資訊系統開發之前就應該考慮資料庫的優化政策。優化政策一般包括伺服器作業系統參數調整、資料庫參數調整、網絡性能調整、應用程式SQL語句分析及設計等幾個方面,其中應用程式的分析與設計是在資訊系統開發

   分析評價Oracle資料庫性能主要有資料庫吞吐量、資料庫使用者響應時間兩項名額。資料庫使用者響應時間又可以分為系統服務時間和使用者等待時間兩項,即:

   資料庫使用者響應時間=系統服務時間+使用者等待時間

   是以,獲得滿意的使用者響應時間有兩個途徑:一是減少系統服務時間,即提高資料庫的吞吐量;二是減少使用者等待時間,即減少使用者通路同一資料庫資源的沖突率。

   資料庫性能優化包括如下幾個部分:

   1. 調整資料結構的設計 這一部分在開發資訊系統之前完成,程式員需要考慮是否使用Oracle資料庫的分區功能,對于經常通路的資料庫表是否需要建立索引等。

   2. 調整應用程式結構設計 這一部分也是在開發資訊系統之前完成的。程式員在這一步需要考慮應用程式使用什麼樣的體系結構,是使用傳統的Client/Server兩層體系結構,還是使用Browser/Web/Database的三層體系結構。不同的應用程式體系結構要求的資料庫資源

   3. 調整資料庫SQL語句 應用程式的執行最終将歸結為資料庫中的SQL語句執行,是以SQL語句的執行效率最終決定了Oracle資料庫的性能。 Oracle公司推薦使用Oracle語句優化器(Oracle Optimizer)和行鎖管理器(Row-Level Manager)來調整優化SQL語句。

   4. 調整伺服器記憶體配置設定 記憶體配置設定是在資訊系統運作過程中優化配置的。資料庫管理者根據資料庫的運作狀況不僅可以調整資料庫系統全局區(SGA區)的資料緩沖區、日志緩沖區和共享池的大小,而且還可以調整程式全局區(PGA區)的大小。

   5. 調整硬碟I/O 這一步是在資訊系統開發之前完成的。資料庫管理者可以将組成同一個表空間的資料檔案放在不同的硬碟上,做到硬碟之間I/O 負載均衡。

   6. 調整作業系統參數 例如:運作在Unix作業系統上的 Oracle資料庫,可以調整 Unix資料緩沖區的大小、每個程序所能使用的記憶體大小等參數。

   實際上,上述資料庫優化措施之間是互相聯系的。Oracle 資料庫性能惡化的表現基本上都是使用者響應時間比較長,需要使用者長時間的等待。而性能惡化的原因卻是多種多樣的,有時是多個因素共同造成了性能惡化的結果,這就需要資料庫管理者有比較全面的計算機知識,能夠敏感地察覺到影響資料庫性能的主要原因所在。另外,良好的資料庫管理工具對于優化 性能優化工具

    Oracle資料庫常用的資料庫性能優化工具有:

   1. Oracle資料庫線上資料字典 Oracle線上資料字典能夠反映出Oracle的動态運作情況,對于調整資料庫性能是很有幫助的。

   2. 作業系統工具 例如使用Unix作業系統的Vmstat、 Iostat等指令可以檢視到系統級記憶體和硬碟I/O的使用情況,這些工具能夠幫助管理者弄清楚系統瓶頸出現在什麼地方。

   3. SQL語言跟蹤工具(SQL Trace Facility)

   SQL語言跟蹤工具可以記錄SQL語句的執行情況,管理者可以使用虛拟表來調整執行個體,并使用SQL語句跟蹤檔案調整應用程式性能。SQL語言跟蹤工具将結果輸出成一個作業系統

    4. Oracle Enterprise Manager(OEM) 這是一個圖形的使用者管理界面,使用者可以使用它友善地進行資料庫管理而不必記住複雜的Oracle資料庫管理的指令。

   5. Explain Plan??SQL語言優化指令 使用這個指令可以幫助程式員寫出高效的

   系統性能評估

   資訊系統的類型不同,需要關注的資料庫參數也是不同的。資料庫管理者需要根據自

   1. 線上事務處理資訊系統(OLTP) 這種類型的資訊系統一般需要有大量的Insert、 Update操作,典型的系統包括民航機票發售系統、銀行儲蓄系統等。OLTP系統需要保證資料庫的并發性、可靠性和最終使用者的速度,這類系統使用的Oracle資料庫需主要考慮以下參數:

   資料庫復原段是否足夠?

   是否需要建立Oracle資料庫索引、聚集、散列?

   系統全局區(SGA)大小是否足夠?

   SQL語句是否高效?

   2. 資料倉庫系統(Data Warehousing) 這種資訊系統的主要任務是從Oracle的海量資料中進行查詢,以得到資料之間的某些規律。資料庫管理者需要為這種類型的Oracle資料

   是否采用B*?索引或者Bitmap索引?

   是否采用并行SQL查詢以提高查詢效率?

   是否采用PL/SQL函數編寫存儲過程?

   有必要的話,需要建立并行資料庫以提高資料庫的查詢效率。

參數的調整

   1. CPU參數

    CPU是伺服器的一項重要資源,伺服器良好的工作狀态表現為在工作高峰時CPU的使用率高于90%。如果空閑時間CPU使用率就在90%以上,說明伺服器缺乏CPU資源;如果工作高峰時CPU使用率仍然很低,則說明伺服器CPU 資源還比較充足。

   使用操作指令可以看到CPU的使用情況,一般Unix作業系統的伺服器,可以使用 sar-u指令檢視CPU的使用率;NT作業系統的伺服器,可以使用NT的性能管理器來檢視CPU的使

   資料庫管理者可以通過檢視v$sysstat資料字典中的 “CPU used by this session ”統計項得知Oracle資料庫使用的CPU時間;檢視“OS User level CPU time”統計項得知作業系統使用者狀态下的CPU時間;檢視“OS System call CPU time” 統計項得知作業系統系統狀态下的CPU時間,作業系統總的CPU時間就是使用者狀态和系統狀态時間之和。如果Oracle資料庫使用的CPU時間占作業系統總CPU時間的90%以上,就說明伺服器CPU基本上被Oracle資料庫使用着,這是合理的,反之,則說明伺服器CPU被其他程式占用過多,Oracle資料庫無法

    2. 記憶體參數

   記憶體參數的調整主要是指Oracle資料庫的系統全局區(SGA)的調整。SGA主要由3部分構成:共享池、資料緩沖區、日志緩沖區。

   共享池由兩部分構成:共享SQL區和資料字典緩沖區。共享SQL區是存放使用者SQL指令

   結束語

   Oracle資料庫的性能優化調整是一個系統工程,涉及的方面很多。資料庫管理者需要綜合運用上面介紹的規律,認真分析Oracle在運作過程當中出現的各種問題,以保證Oracle資料庫運作的高效率。還需要指出的是,上面給出的語句隻是測得Oracle運作過程的某一個時間點的情況,資料庫管理者不能僅僅根據一個點的情況就斷定資料庫運作性能的好壞,隻有多運作一些時間點才能對資料庫運作狀況做出一個綜合評估。

   由于單個時間點的監測是很麻煩的,且對于多個時間點的監測更是一項煩瑣的工作,為此,筆者開發了Oracle資料庫性能監測軟體ORATUNE。這個軟體不僅能夠定時從資料庫中讀取各種參數并自動計算出各種比例,而且還能自動根據這些比例的好壞建議資料庫管理者修改

   ORATUNE已經在清華大學、華北電力集團等多個機關得到了應用,對Oracle資料庫的性能優化調整起到了良好的作用。

本文轉自 牛海彬 51CTO部落格,原文連結:http://blog.51cto.com/newhappy/136970,如需轉載請自行聯系原作者