Oracle經過長時間的發展,很多用戶都很了解Oracle數據庫服務器了,這裡我發表一下個人理解,和大家討論討論。Oracle數據庫服務器是整個系統的核心,它的性能高低直接影響整個系統的性能,為了調整Oracle數據庫服務器的性能,主要從以下幾個方面考慮:
調整操作系統以適合Oracle數據庫服務器運行
Oracle數據庫服務器很大程度上依賴於運行服務器的操作系統,如果操作系統不能提供最好性能,那麼無論如何調整,Oracle數據庫服務器也無法發揮其應有的性能。
1.為Oracle數據庫服務器規劃系統資源
據已有計算機可用資源, 規劃分配給Oracle服務器資源原則是:盡可能使Oracle服務器使用資源最大化,特別在ClIEnt/Server中盡量讓服務器上所有資源都來運行Oracle服務。
2.調整計算機系統中的內存配置
多數操作系統都用虛存來模擬計算機上更大的內存,它實際上是硬盤上的一定的磁盤空間。當實際的內存空間不能滿足應用軟件的要求時,操作系統就將用這部分的磁盤空間對內存中的信息進行頁面替換,這將引起大量的磁盤I/O操作,使整個服務器的性能下降。為了避免過多地使用虛存,應加大計算機的內存。
3.為Oracle數據庫服務器設置操作系統進程優先級
不要在操作系統中調整Oracle進程的優先級,因為在Oracle數據庫系統中,所有的後台和前台數據庫服務器進程執行的是同等重要的工作,需要同等的優先級。所以在安裝時,讓所有的數據庫服務器進程都使用缺省的優先級運行。
調整內存分配
Oracle數據庫服務器保留3個基本的內存高速緩存,分別對應3種不同類型的數據:庫高速緩存,字典高速緩存和緩沖區高速緩存。庫高速緩存和字典高速緩存一起構成共享池,共享池再加上緩沖區高速緩存便構成了系統全程區(SGA)。SGA是對數據庫數據進行快速訪問的一個系統全程區,若SGA本身需要頻繁地進行釋放、分配,則不能達到快速訪問數據的目的,因此應把SGA放在主存中,不要放在虛擬內存中。內存的調整主要是指調整組成SGA的內存結構的大小來提高系統性能,由於Oracle數據庫服務器的內存結構需求與應用密切相關,所以內存結構的調整應在磁盤I/O調整之前進行。
1.庫緩沖區的調整
庫緩沖區中包含私用和共享SQL和PL/SQL區,通過比較庫緩沖區的命中率決定它的大小。要調整庫緩沖區,必須首先了解該庫緩沖區的活動情況,庫緩沖區的活動統計信息保留在動態性能表v$librarycache數據字典中,可通過查詢該表來了解其活動情況,以決定如何調整。Select sum(pins),sum(reloads) from v$librarycache; Pins列給出SQL語句,PL/SQL塊及被訪問對象定義的總次數;Reloads列給出SQL 和PL/SQL塊的隱式分析或對象定義重裝載時在庫程序緩沖區中發生的錯誤。如果sum(pins)/sum(reloads) ≈0,則庫緩沖區的命中率合適;若sum(pins)/sum(reloads)>1, 則需調整初始化參數 shared_pool_size來重新調整分配給共享池的內存量。
2. 數據字典緩沖區的調整
數據字典緩沖區包含了有關數據庫的結構、用戶、實體信息。數據字典的命中率,對系統性能影響極大。數據字典緩沖區的使用情況記錄在動態性能表v$ librarycache中,可通過查詢該表來了解其活動情況,以決定如何調整。Select sum(gets),sum(getmisses) from v$rowcache; Gets列是對相應項請求次數的統計;Getmisses 列是引起緩沖區出錯的數據的請求次數。對於頻繁訪問的數據字典緩沖區,sum(getmisses)/sum(gets)<10%~15%。若大於此百分數,則應考慮增加數據字典緩沖區的容量,即需調整初始化參數shared_pool_size來重新調整分配給共享池的內存量。
3.緩沖區高速緩存的調整
用戶進程所存取的所有數據都是經過緩沖區高速緩存來存取,所以該部分的命中率,對性能至關重要。緩沖區高速緩存的使用情況記錄在動態性能表v$sysstat中,可通過查詢該表來了解其活動情況,以決定如何調整。
- Select name,value from v$sysstat
- where name in ('dbblock gets','consistent gets','physical reads');
dbblock gets和consistent gets的值是請求數據緩沖區中讀的總次數。physical reads的值是請求數據時引起從盤中讀文件的次數。從緩沖區高速緩存中讀的可能性的高低稱為緩沖區的命中率,計算公式:
Hit Ratio=1-(physical reds/(dbblock gets+consistent gets))如果Hit Ratio<60%~70%,則應增大db_block_buffers的參數值。db_block_buffers可以調整分配給緩沖區高速緩存的內存量,即db_block_buffers可設置分配緩沖區高速緩存的數據塊的個數。緩沖區高速緩存的總字節數=db_block_buffers的值*db_block_size的值。 db_block_size 的值表示數據塊大小的字節數,可查詢 v$parameter 表:select name,value from v$parameter where name='db_block_size'; 在修改了上述數據庫的初始化參數以後,必須先關閉數據庫,在重新啟動數據庫後才能使新的設置起作用。