SGA


システムグローバル領域(SGA)というメモリ構造。以下の5つに分けられる。


共有プール
SQLの解析に使用する領域。


データベース・バッファ・キャッシュ
→最近読み込んだデータのキャッシュ領域。


REDOログ・バッファ
→更新された履歴を保持するバッファ領域。


ラージプール
→セッション情報やバックアップ、リストアで使用される領域。
 ラージプールがない場合、代わりに共有プールが使用される。


Javaプール
Java機能で使用する領域。



●共有プールのチューニング


現在のサイズを調べる

SHOW PARAMETERS SHARED_POOL_SIZE


ヒット率を調べる
※RELOADS/PINSは1%未満、GETHITRATIOは90%以上にすべき。

SELECT	NAMESPACE,
		RELOADS,			--キャッシュミスの回数
		PINS,				--オブジェクトの読み込み回数
		GETS,				--参照回数
		GETHITRATIO			--ヒット率
FROM	V$LIBRARYCACHE


サイズを変更する

ALTER SYSTEM SET SHARED_POOL_SIZE  = 2000M


●データベース・バッファ・キャッシュ


現在のサイズを調べる

SHOW PARAMETERS DB_CACHE_SIZE


ヒット率を調べる(ヒット率は90%以上が好ましい。)

SET SERVEROUTPUT ON;
     DECLARE
       d_gets NUMBER;
       c_gets NUMBER;
       p_reads NUMBER;
       result NUMBER;
     BEGIN
       SELECT VALUE INTO d_gets FROM V$SYSSTAT
         WHERE NAME = 'db block gets';
       SELECT VALUE INTO c_gets FROM V$SYSSTAT 
         WHERE NAME = 'consistent gets';
       SELECT VALUE INTO p_reads FROM V$SYSSTAT 
         WHERE NAME = 'physical reads';
       result := 
         ROUND((1 - (p_reads / (c_gets + d_gets))),3) * 100;
       DBMS_OUTPUT.PUT_LINE(
         'データベース・バッファ・キャッシュヒット率->' ||
         result || '%');
     END;
     /

空き比率を調べる(数%の空き容量は欲しいところ)
※SYSDBA権限でログインする必要がある

SELECT A.FREE / B.TOTAL Rate
FROM   (
           SELECT  COUNT(*) FREE
           FROM    X$BH
           WHERE   STATE = 0
       ) A,
       (
           SELECT COUNT(*) TOTAL FROM X$BH
       ) B


サイズを変更する

ALTER SYSTEM SET DB_CACHE_SIZE  = 2000M


REDOログ・バッファのチューニング


現在のサイズを調べる

SHOW PARAMETERS LOG_BUFFER


REDOログの競合発生率を調べる(redo buffer allocation retries/redo entries=1%未満が好ましい)

select	*
From	v$sysstat
where	name in ('redo buffer allocation retries','redo entries'
				)


●キャッシュのクリア


バッファキャッシュをクリアするには以下のコマンドを実行する。 (oracle10gからの新機能)

alter system flush buffer_cache;

動作確認環境:Oracle 10.2.0.1.0