システムグローバル領域(SGA)というメモリ構造。以下の5つに分けられる。
共有プール
→SQLの解析に使用する領域。
データベース・バッファ・キャッシュ
→最近読み込んだデータのキャッシュ領域。
REDOログ・バッファ
→更新された履歴を保持するバッファ領域。
ラージプール
→セッション情報やバックアップ、リストアで使用される領域。
ラージプールがない場合、代わりに共有プールが使用される。
●共有プールのチューニング
現在のサイズを調べる
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