Oracle數(shù)據(jù)庫Shared Pool優(yōu)化過程詳解
Oracle數(shù)據(jù)庫的shared pool主要由保存數(shù)據(jù)字典的data_dictionary和保存SQL和PL/SQL代碼和執(zhí)行計劃的library cache組成 。還包括其它供系統(tǒng)不同特性和技術使用的若干緩沖區(qū),如為shared server模式提供的UGA等。本文我們介紹Shared Pool優(yōu)化的過程,接下來就讓我們來一起學習吧。
優(yōu)化shared pool的思路:
1)根據(jù)設置經(jīng)驗,例如,可設置shared_pool_size=sga_target*(10%~15%)。
2)重點關注保存SQL和PL/SQL代碼和執(zhí)行計劃的library cache相關指標。查看AWR報告Load Profile部分,分析Hard Parses/s等指標。分析Instance Efficiency Percentages (Target 100%)中Library Hit %、Execute to Parse %、Soft Parse %等。
需要關注的等待事件:
Latch:library cache。
Latch:shared pool。
3)查看Time Model Statistics中與shared pool相關指標(parse time elapsed與hard parse elapsed time)。
如果hard parse elapsed time所占比例較高,說明應用的語句共享性存在嚴重問題。
優(yōu)化方法:
1)評估語句共享性
Execute to Parse %=(execute次數(shù)-Parse次數(shù))/Execute次數(shù)*100%
如果Execute to Parse %太低,說明解析次數(shù)非常高,系統(tǒng)整體共享性差。一般該指標達到70%以上,就說明語句共享性不錯。
AWR報告中Library Hit %、Soft Parse %和Hard Parses/s。Parse包含Hard Parse與Soft Parse次數(shù),但我們應關注Hard Parses。
查詢非共享的sql語句(執(zhí)行次數(shù)為1):
- select sql_text from v$sqlarea where executions=1 order by upper(sql_text);
2)通過shared pool advisory設置合理的shared_pool_size。也可以通過設置shared_pool_reserved_size參數(shù),使一些比較大的PL/SQL對象常駐內存中,減少shared pool出現(xiàn)碎片的可能性。
- SQL> set lines 100
- SQL> set pages 999
- SQL> column c1 heading 'Pool |Size(M)'
- SQL> column c2 heading 'Size|Factor'
- SQL> column c3 heading 'Est|LC(M) '
- SQL> column c4 heading 'Est LC|Mem. Obj.'
- SQL> column c5 heading 'Est|Time|Saved|(sec)'
- SQL> column c6 heading 'Est|Parse|Saved|Factor'
- SQL> column c7 heading 'Est|Object Hits' format 999,999,999
- SQL> SELECT shared_pool_size_for_estimate c1,shared_pool_size_factor c2,
- 2 estd_lc_size c3,estd_lc_memory_objects c4,estd_lc_time_saved c5,
- 3 estd_lc_time_saved_factor c6,estd_lc_memory_object_hits c7 FROM V$SHARED_POOL_ADVICE;
- Est Est
- Time Parse
- Pool Size Est Est LC Saved Saved Est
- Size(M) Factor LC(M) Mem. Obj. (sec) Factor Object Hits
- ---------- ---------- ---------- ---------- ---------- ---------- ------------
- 64 .4 18 2799 510 .9677 38,723
- 80 .5 33 4192 518 .9829 39,201
- 96 .6 48 5700 527 1 39,890
- 112 .7 60 7288 527 1 40,104
- 128 .8 60 7288 527 1 40,106
- 144 .9 60 7288 527 1 40,106
- 160 1 60 7288 527 1 40,106
- 176 1.1 60 7288 527 1 40,106
- 192 1.2 60 7288 527 1 40,106
- 208 1.3 60 7288 527 1 40,106
- 224 1.4 60 7288 527 1 40,106
- 240 1.5 60 7288 527 1 40,106
- 256 1.6 60 7288 527 1 40,106
- 272 1.7 60 7288 527 1 40,106
- 288 1.8 60 7288 527 1 40,106
- 304 1.9 60 7288 527 1 40,106
- 320 2 60 7288 527 1 40,106
3)合理設置large_pool_size參數(shù)
large pool緩沖區(qū)用于備份恢復操作、并行處理、ASM、共享連接模式、模擬異步I/O操作等場景,應合理設置large_pool_size以避免使用shared pool緩沖區(qū),加劇shared pool緩沖區(qū)空間的緊張和產(chǎn)生碎片的可能性。
注意:并不是所有的sql都需要共享,對于統(tǒng)計報表類sql因其單筆事務的資源消耗大,并發(fā)量不高的特點,應該保證其執(zhí)行計劃的***,這時候不用綁定變量。
關于Oracle數(shù)據(jù)庫的Shared Pool的優(yōu)化過程就介紹到這里,如果您想了解更多關于Oracle數(shù)據(jù)庫的知識,不妨看一下這里的文章:http://database.51cto.com/oracle/,您的收獲就是我們***的快樂!
【編輯推薦】