Oracle徹底優化 優化記憶體

2021-05-28 13:34:11 字數 4558 閱讀 7375

記憶體的優化歷來都是資料庫或者作業系統優化的重中之重。在oracle資料庫體系結構中記憶體優化也是效能優化的關鍵。優化記憶體主要是通過優化記憶體結構來提高系統效能。這裡所說的記憶體結構主要由專用sql及pl/sql區、共享池、日誌緩衝區和高速緩衝儲存區構成。

由於0racle的記憶體結構需求與應用密切相關,所以記憶體結構優化應在sql語句和應用程式優化之後以及輸入/輸出(i/o)優化之前進行。而且首先要優化作業系統,並在處理共享池前考慮私有sql和pl/sql區。

優化sga sga是對資料庫資料進行快速訪問的乙個系統全域性區,其大小在例項啟動時被確定。若sga本身需要頻繁地進行釋放、分配,則不可能達到快速訪問資料的目的。因此為了優化系統效能,應確保sga全部被駐留在實際記憶體中,而不應採用虛擬記憶體,以免使整個系統效能下降。

檢視sga大小使用者可以通過兩種命令方式來檢視sga的大小。

(1)使用「show sga」命令說明:使用者可以連線到sever manager和資料庫,然後執行「show sga」命令來檢視sga的大小。如果資料庫例項沒有啟動,那麼使用「show sga」命令將會報錯。

(2)使用「select * from v$sga;」查詢試圖命令說明:使用「select * from v$sga;」要在「svrmgr>」提示符下。

預裝sga可以在init.ora檔案中將引數pre_page_sga的值設為「yes」,而將sga預裝到物理記憶體中,即設定pre_page_sga=yes.

優化專用sql區及pl/sql區要優化專用的sql區及pl/sql區,就必須知道是否有不必要的語法分析呼叫,使用者必須盡量少的呼叫parse.如果有過多的不必要的語法分析呼叫,就應當設法減少它。

可用跟蹤功能來為每個sql語句輸出跟蹤資訊,以檢測其語法分析步的統計數字count.若分析步的count統計值與執行步的count統計值非常接近,則應減少語法分析呼叫。

減少語法分析呼叫的方法是通過所用的應用開發工具(如pro*c、oci和sql*forms等)來控制語法分析呼叫以及分配和釋放專用的sql區的頻率,例如:在用pro*c時,可用hold_cursor、release_cursor以及max_opencursor引數來控制專用sql區。在使用oci時,可使用osql3或oparse呼叫來為sql語句分配專用sql區,用oclose呼叫關閉游標和釋放專用sql區。在使用sql *forms時,同樣也可控制是否重用專用sql區:可在觸發器級、form級或在執行時減少語法分析呼叫,以減少或重用專用sql區。

優化日誌緩衝區日誌緩衝區也稱為重做日誌緩衝區,它包含所有變化了的資料塊。這些變化的資料塊通過oracle日誌書寫程序以一種鄰接的方式寫到重做日誌檔案中。

(1)獲取緩衝區活動情況優化日誌緩衝區時,首先應了解緩衝區的活動情況。這對通過查詢動態效能表(需有select  any table特權)v$sysstat來獲得。

svrmgr> select sum(value)"redo buffer waits" from v$sysstat 2> where name='redo log space wait time';(2)計算日誌緩衝區的申請失敗率資料庫管理員可以通過執行下述語句:sql>select name,value from v$sysstat where name in ('redo entries','redo log space requests');檢視日誌緩衝區的使用情況。查詢出的結果可以計算出日誌緩衝區的申請失敗率。

申請失敗率=requests/entries.申請失敗率應該接近於0,否則說明日誌緩衝區開設太小,需要增加oracle資料庫的日誌緩衝區。

(3)優化日誌緩衝區如果重做緩衝區的等待大於零,程序就要等待重做日誌緩衝區的空間變成可用。此時就會影響資料庫的效能。可以通過逐步提高init.ora中引數log_buffer的值來達到優化日誌緩衝區的目的。在增加log_buffer的值時,可通過查詢動態效能表來了解和檢查日誌緩衝區的活動情況。

優化共享池共享池由庫快取記憶體、字典快取記憶體和sql區組成。整個共享池的大小由引數shared_pool_size確定。共享池的優化主要考慮庫高速緩衝區、資料字典高速緩衝區以及會話期間資訊的優化。

優化庫高速緩衝區要優化庫高速緩衝區,必須首先了解該緩衝區的活動情況。庫高速緩衝區的活動統計資訊保留在動態效能表v$librarycache中。優化時應使資料字典快取記憶體裡的記憶體資料庫塊盡可能多。

(1)確定庫快取記憶體的效能通過查詢v$librarycache表(需有select any table特權)來了解其活動情況,以決定如何優化。例如:sql>select sum(pins),sum(reloads) from v$librarycache;說明:動態效能表v$librarycache中包含有namespace、pins和reload等列。其中namespace列反映了sql語句及pl/sql塊的庫緩衝區的活動,其值可能是『sql area』,『table/procedure』,『body』和『trigger』等;而pins和reloads列給出執行呼叫時的錯誤資訊。pins列給出sql語句、pl/sql塊及被訪問物件定義的總次數;reloads給出sql語句或pl/sql塊的隱式分析或物件定義重裝載時在庫程式緩衝區中發生的錯誤。

(2)檢視reloads和pins的比率可以使用以下查詢語句來檢視reloads和pins的比率:select(sum(reloads)/sum(pins))×100「library cache ratio」from v$librarycache;使用者必須保證reloads和pins的比率盡可能低,其值應低於1%,若reloads/pins>1%,則應給緩衝區分配附加的儲存及寫等同的sql語句,使sql語句與pl/sql塊共享乙個共享sql區,這樣可減少錯誤。如果庫高速緩衝區無錯誤,則可設定初始化引數cutsor_space_for_time為true,以加速執行呼叫。這可使效能稍有改善。若每個使用者可用的專用sql區不足時,則不要將cutsor_space_for_time設定為true.(3)優化庫快取記憶體區優化庫快取記憶體時,可以通過增加init.ora檔案中shared_pool_size或open_cursors的引數值而達到滿意的優化比率。

優化資料字典緩衝區資料字典緩衝區在功能上與庫快取記憶體類似,但主要用於oracle字典高速sql語句。要優化資料字典緩衝區,也必須先檢視資料字典緩衝區的使用情況及效果,然後依此來進行優化。資料字典緩衝區的使用情況記錄在動態效能表v$rowchache中,其中有如下幾列:parameter:記錄某類特寫資料字典項的統計,其值以『de_』開始,例如某檔案描述的統計為『de_files』。

gets:是對相應項請求次數的統計。

gettmisses:是引起緩衝區出錯的資料請求次數。

可用如下語句來查詢v$rowchache表:sql>select (sum(getmisses)/sum(gets))*100 「data dictionary cache ratio」from v$rowchache;對於貧繁訪問的資料字典緩衝區,getmisses與gets之比要小於10%到15%.若大於此百分數時,則應考慮增加資料字典緩衝區的容量,即要增加shared_pool_size或者db_block_buffers初始化引數的值。

使用多線索伺服器時共享池的優化在多線索伺服器結構中,會話期資訊被存放在共享池中,它包括sql專用區和排序區。在使用多線索伺服器時,要增大共享池,以滿足需要。這也可通過增加shared_pool_size的引數值來實現。

可通過查詢(要求有select any table特權)動態效能表v$sesstat來衡量會話資訊的多少。例如:sql>selec sum(value) ||『bytes』 「total memory for all session」

2>from v$sesstat 3>wherk name=『session memory』;sql>select um(value)|| 『bytes』 「total max men for all sessions」

2>from  v$sesstat 3>where  name=『max session memory』;其中,「session memory」是分配給會話的記憶體位元組數:「max session memory」是分配給會話的最大記憶體位元組數。

優化緩衝區(1)獲取緩衝區活動情況為了優化緩衝區,首先應了解緩衝區的活動情況。這可以通過查詢動態效能表(需有select  any table特權)v$sysstat來獲得。

svrmgr> select name ,value from v$sysstat 2> where name in('db block gets','consistent gets','physical reads');name    value db  blockgets   3437 consistent gets   30500 physica  reads   1963 3 rows selected.其中,「db block gets」和「consistent gets」的值是請求資料緩衝區中讀的總次數。「physical reads」為請求資料時引起從盤中讀檔案的次數。

(2)緩衝區命中率從緩衝區讀的可能性的高低稱為緩衝區命中率。它可用如下公式計算:hot ratio=1-(physical reads/(db block gets+consistent gets)

緩衝區命中率越高,其速度就越快。如果命中率低於60%或70%時。則應增加緩衝區(即db_block_buffers),以改進效能。根據公式可以計算出本例中的hot ratio=1-(1963/(3437+30500)=92%。 如果緩衝區的命中率很高,希望在保持良好效能下適當減少緩衝區,這時可減少db_block_buffers的值,其最小值為4.

Android效能優化 記憶體優化

記憶體優化 下面介紹一下常用的一些記憶體優化的方法 從慕課網學來的 資料結果優化 1,如果經常使用字串拼接的話,要用stringbuilder,避免直接使用使用 的方式 2,使用arraymap,sparsearray代替hashmap 3,避免記憶體抖動的情況 物件復用 1,復用系統自帶資源 2,...

Oracle 優化 Like語句優化

1.盡量不要使用 like 2.對於like 可以用列的索引 3.對於like 以 開頭,不以 結尾 可以利用 反序列和函式索引 變成 like 4.查詢 like xx 應該使用函式instr string source,string xx 例如 select count from tb name...

Oracle認證 Oracle優化器的優化方式

oracle是世界領先的資訊管理軟體開發商,因其複雜的關聯式資料庫產品而聞名。本文介紹oracle優化器,它是乙個非常好用的工具。oracle在執行乙個sql之前,首先要分析一下語句的執行計畫,然後再按執行計畫去執行。分析語句的執行計畫的工作是由優化器 optimizer 來完成的。不同的情況,一條...