SGA中的第三個組成部分是共享池。共享池是對sql ,pl/sql 程序進行語法分析、編譯、執行的內存區域。共享池包括庫緩沖區(library cache)、數據字典緩沖區(Data Directory Cache)用戶全局區(User Global Area)。其中庫緩沖區含有Sql 語句的分析碼、執行計劃;數據字典緩沖區含有從數據字典中得到的表、列定義、權限。用戶全局區包含用戶的MTS 會話信息。
共享池主要用於對SQL 、pl/sql 程序語句進行語法分析、編譯、執行、所以,如果應用中藥運行大量存儲過程或包,則要增加共享池的尺寸。共享池的大小由參數SHARE_POOL_SIZE確定。要了解共享池大小,可以用以下方法:
方法一:
- ………
- Shared_Pool_size = 52428800
- …..
方法二:
- SQL> select name,value from v$parameter where name like ‘%size’;
方法三:
- SQL> show parameter share_pool_size
共享池應計算存儲過程、包等的成功率。
可以查詢數據字典 v$rowcache 了解數據字典的成功與失敗次數。
- SQL> select sum(gets) “dictionary gets”,
- Sum(getmisses) “dictionary cache getmisses”
- From v$rowcache ;
其中gets 表示讀取某一類數據字典的成功次數,getsmisses 表示讀取某一類數據字典的失敗次數。此外還可以通過查詢結果計算共享池中讀取數據字典的成功率
- SQL> select parameter, get, getmisses, getmisses/(getmisses+gets)*100 “miss ratio”,
- (1- (sum(getmisses)/(sum(getmisses)+sum(gets)) ) ) *100 “hit ratio”
- From v$rowcache
- Where gets+getmisses<>0
- Group by parameter,gets,getmisses;
查詢數據字典 v$librarycache 可以計算共享池中庫緩存的失敗率,結果應該小於1%。
- SQL>select sum(pins) “ total pins”, sum(reloads) “ total reloads”, sum(reloads)/sum(pins)*100 libarycache from v$librarycache;
其中 total pins 表示駐留內存的次數, total reloads 表示重新加載到內存的次數,librarycache 表示失敗率。
上面分析了系統全局區的三個組成部分-----數據緩沖區、日志緩沖區及共享池,如果要得到SGA的總大小,可以在SQL*Plus中使用show sga 命令。
SQL>show sga或查詢數據字典
SQL> select * from v$sga;
如果要查詢某個參數的大小,可以查詢數據字典v_$sagstat,通過計算可以知道sga的使用空間與空閒空間的比。
- SQL>col OBJECT_NAME format a20
- SQL> col 空閒空間百分比(%) format 90.99
- SQL> select name,
- Sgasize/1024/1024 “allocated(M)” ,
- Bytes/1024 “空閒空間(k)” ,
- Round(bytes/sagsize*100,2) “空閒空間百分比(%)”
- From ( select sum(bytes) sgasize from sys.v_$sgastat) s ,sys.v_$sgastat f
- Where f.name=’free memory’ ;