Oracle的SGA(System Global Areas):數據庫的系統全局區,SGA主要由三部分構成:共享池、數據緩沖區、日志緩沖區。
共享池
共享池由兩部分構成:共享SQL區和數據字典緩沖區。共享SQL區專門存放用戶SQL命令,oracle使用最近最少使用等優先級算法來更新覆蓋;數據字典緩沖區(library cache)存放數據庫運行的動態信息。數據庫運行一段時間後,DBA需要查看這些內存區域的命中率以從數據庫角度對數據庫性能調優。通過執行下述語句查看:
SELECT (SUM(pins - reloads)) / SUM(pins) "Lib Cache" FROM v$librarycache;
--查看共享SQL區的重用率,最好在90%以上,否則需要增加共享池的大小。
select (sum(gets - getmisses - usage - fixED)) / sum(gets) "Row Cache" from v$rowcache;
--查看數據字典緩沖區的命中率,最好在90%以上,否則需要增加共享池的大小。
數據緩沖區
數據緩沖區:存放sql運行結果抓取到的data block。
SELECT NAME, VALUE FROM v$sysstat WHERE NAME IN ('db block gets', 'consistent gets', 'physical reads');
--查看數據庫數據緩沖區的使用情況。查詢出來的結果可以計算出來數據緩沖區的使用命中率=1 - ( physical reads/ (db block gets + consistent gets) )。命中率應該在90%以上,否則需要增加數據緩沖區的大小。
日志緩沖區
日志緩沖區:存放數據庫運行生成的日志。
SELECT NAME, VALUE FROM v$sysstat WHERE NAME IN ('redo entries', 'redo log space requests');--查看日志緩沖區的使用情況。查詢出的結果可以計算出日志緩沖區的申請失敗率:申請失敗率=requests/entries,申請失敗率應該接近於0,否則說明日志緩沖區開設太小,需要增加ORACLE數據庫的日志緩沖區。