文章詳情頁
關于Oracle服務器性能全面調整攻略
瀏覽:4日期:2023-11-13 10:08:49
Oracle服務器是高度可調的數據庫系統,它提供了許多特性,正確地設置和調整可以有效提高系統性能,因此,對系統進行調整是數據庫治理員的主要責任。由于應用設計人員很少或根本不會給數據庫治理人員提供必要的信息,因此只能采用對已有應用系統影響最小的調整方式:重新分配內存、調整磁盤I/O來提高性能。 調整內存 Oracle服務器將信息存儲在兩個地方:內存、磁盤。因為內存的存取比磁盤的存取快得多,為了獲得最佳的性能,總是希望將數據盡可能多地放在內存供用戶讀取??墒窍到y內存資源是有限的,不可能將所有數據放在內存,因此,要在現有內存資源的基礎上,通過調整內存分配來獲得盡可能好的性能。調整內存的分配,實際上就是對Oracle數據庫內存結構分配恰當尺寸的可用內存。 為了取得好的效果,調整要按如下順序進行:調整操作系統、調整共享池、調整緩沖區高速緩存。由于后面調整所作的改變可能需要對前面的調整再次進行判定和調整,因此,調整的過程可能需要若干次循環。 調整操作系統 操作系統運行得好,是Oracle調整內存分配的基礎,其方法如下: 減少調頁或交換 過度的調頁或交換必定會降低操作系統的性能。可以用操作系統提供的實用程序進行監控,如發現有過度的調頁或交換,則說明系統總內存存放不下已經分配在內存中的信息。解決的辦法是增加系統內存總量,或減少已經分配的內存量。 調整系統全局區(SGA) SGA是Oracle數據庫存放系統信息的一塊區域,由所有的服務器和客戶進程共享,主要由以下四部分組成:數據高速緩沖區、字典緩沖區、重演日志緩沖區、共享SQL池。建SGA的目的是為了將數據放在內存以便快速存取,假如SGA過大內存放不下,就要被交換到磁盤,產生過度交換或調頁,數據存取就快不了。在大多數系統里,過度調頁的壞處比大SGA的好處對性能的影響要大得多,因此寧可SGA小些,也要保證整個SGA能被內存容下。 可利用SQL*DBA語句SHOW SGA來查看分配了多少內以及每個內部結構的大小。
該機系統內存256M,SGA大小約為115M,應用過程中不會發生調頁或交換。為了提高性能,還可以在初始化參數文件INIT.ORA中添加參數 PRE_PAGE_SGA=FALSE,使得Oracle在啟動Instance時將整個SGA讀入內存。該設置雖然會增加Instance啟動時間,但會減少Oracle在啟動后達到性能峰值所用的時間。 調整共享池 調整共享池主要包括三個方面:庫高速、數據字典緩存、對話信息。由于Oracle治理共享池中數據的算法,使得數據字典緩存中的數據比庫高速緩存中的數據在內存中存留的時間長,因此,只要把庫高速緩存調整成可以接受的命中率,就能提高數據字典緩存的命中率。 檢查、調整庫高速緩存 可以通過動態性能表V$LIBRARYCACHE來查詢Instance啟動以來所有庫高速緩存的活動。 V$LIBRARYCACHE表中以下幾列反映了庫高速緩存在執行調用階段的不命中: PINS列,它的值顯示在庫高速緩存中執行的次數; RELOADS列,它的值顯示在執行階段庫高速緩存不命中的數目。
一般來說,庫高速緩存總不命中數與總存取數之比應當接近零,本例為0.001%,說明庫高速緩存命中率很高,該比率假如接近或大于1%,就應當立即采取措施來減少這種不命中。 措施一:增加初始化參數shared_pool_size的值,提高庫高速緩存可用的內存數量,同時為了取得好的效果,可能還要增加初始化參數open_cursors的值,以提高對話答應的光標數。需要注重的是:為庫高速緩存分配了太多的內存可能引起調頁或交換。 措施二:寫等價的SQL語句,盡可能讓SQL語句和PL/SQL塊共享一個SQL區,來減少庫高速緩存的不命中。這是應用設計人員應該做到的:SQL語句或PL/SQL塊的文本必須每一個字符都等價,包括大小寫和空格。 檢查、調整數據字典高速緩存 在應用已經運行,數據庫達到了一種相對“穩定的狀態”之后,可以通過動態性能表V$ROWCACHE來查詢數據字典高速緩存的活動。 V$ROWCACHE表中以下幾列反映了數據字典高速緩存的使用和有效性: GETS列,它的值顯示請求相應項的總數。 GETMISSES列,它的值顯示造成高速緩存不命中的數據請求數。
一般來說,數據字典高速緩存總不命中數與總存取數之比應當接近零,本例為1.616%,說明數據字典高速緩存命中率比較高,該比率假如大于10%,甚至在應用過程中該比率還在增長時,就應當立即通過增加初始化參數shared_pool_size的值,來提高數據字典高速緩存可用的內存數量,從而減少這種不命中。 檢查、調整對話信息占用共享池的大小 多線程服務器答應進程共享內存和連接,能支持大量用戶同時訪問數據庫。使用多線程服務器結構時,需要將共享池分得大一些以容納對話信息??梢酝ㄟ^動態性能表V$SESSTAT來查詢Oracle收集對話信息使用的總內存統計。 V$SESSTAT表中session memory列,顯示分配給對話的內存字節數。 max session memory列,顯示分配給對話的最大內存數。
第二個結果比第一個結果大,但第一個結果能更好地估計共享內存應該多大,除非所有對話幾乎在同一時間都達到最大分配。假如共享池不夠,可以通過增加初始化參數shares_pool_size的值來增加。本例中共享池的大小為52428800,容納對話信息綽綽有余。調整緩沖區高速緩存 Oracle啟動后不斷收集和統計數據存取的情況,并將其存放在動態性能表V$SYSSTAT中。表中對調整緩沖區高速緩存有用的為以下幾項統計: dbblock gets 該統計值為數據請求的總數; consistent gets 該統計值為通過對內存緩沖區存取即能滿足的請求數; physical reads 該統計值為磁盤文件存取的總數。 下面語句可以監控在一段時間內V$SYSSTAT表中的統計:
用以下公式計算緩沖區高速緩存的命中率 :命中率=1-( physical reads /(db block gets+ consistent gets))。根據以上查詢出的統計數據,計算出緩沖區高速緩存的存取命中率為99.198%。
該例中,命中率很高,說明緩沖區高速緩存夠用,性能良好。假如高速緩存大到足以容納最經常存取的數據,在保持高命中率的前提下,可以通過適當減少初始化參數db_block_buffers的值來減少高速緩存的大小,從而可將省出來的內存用于其他Oracle內存結構。假如命中率低于70%的話,性能就會造成下降,就應該立即通過增加初始化參數db_block_buffers的值(它的最大值為65535),來擴大緩沖區高速緩存的大小。 重新分配內存 經過上述對Oracle內存結構分配的調整,可以再次對庫高速緩存、數據字典高速緩存和緩沖區高速緩存的性能作出評估。假如有可能減少某種結構的內存消耗,就可以考慮給其他結構多分配一些內存,以得到增加可用內存的好處。但要注重,經過調整后的Oracle內存結構,假如使SGA過大而不能全部填入主存,就可能會使操作系統引起過度調頁或分配,從而降低性能。 在重新分配內存的過程中,假如發現要取得Oacle最佳內存結構十分困難,就需要考慮花費資金,通過在計算機中增加更多的內存來進一步改進性能。






排行榜