<動的SGAと自動メモリ管理に関する検証 その1>
ペンネーム:アイスケーキ
今回はOracle10gでさらに拡張された動的SGAと自動メモリ管理について検証
をします。戯れる程度ですが。。。
初めてこの動的SGA機能が導入されたのはOracle9iからですがインスタンス停
止をすることなくSGA構成を変えられることが売りでした。
「簡単に振り返ると。。。」
○デフォルト・バッファキャッシュ、共有プール、ラージプールおよびプロ
セス・プライベート・メモリのサイズを動的に変更が可能です。
拡張:SGA_MAX_SIZEの範囲迄
縮小:Oracleが規定する最小値(O/S推奨限度)迄
ALTER SYSTEM SET 文で変更できます。
○バッファプールとSGAプールはOracleの内部的な管理方法によって拡張と
縮小が行われます。
メモリが必要なコンポーネントは、内部的自動チューニング方法により
別のコンポーネントからメモリ転送がユーザ介入無しに実行されます。
※実際にはバッファプールが縮小され、共有プールが拡張されたりします。
「Oracle10gで目に見える形で変わったのは。。。」
○Javaプール、Streamsプールが動的に変更できるものになりました。
※StreamsプールはOracle10gより追加されたSGAコンポーネントです。
○そもそもメモリ管理の方法が大きく変わっています。
初期パラメータの簡略化も含めて”SGA_TARGET”パラメータが追加され今
までのSGA構成メモリパラメータを指定する必要がなくなりました。
SHARED_POOL_SIZE、LARGE_POOL_SIZE、JAVA_POOL_SIZE、DB_CACHE_SIZE等
はもう指定しなくてもSGAを構成することができます。
もちろん個別に定義することも可能です。その場合は自動メモリ管理は行
われません。
注意する点は”STATISTICS_LEVEL”パラメータが”TYPICAL”か”ALL”に
なっていなければなりません。
○V$SGAINFO動的ビューが追加され、SGA構成メモリパラメータ値をまとめて
参照することができるようになりました。
グラニュルサイズ等がみれます。
○Oracle9iでは即時反映でしたが、Oracle10gでは遅延反映が新たに追加さ
れそれに伴い、動的ビューについてもフラグ値が増えました。
例)V$SGA_RESIZE_OPSに追加、削除された値
OPER_TYPE:操作タイプ ⇒STATIC (未変更)
⇒INITIALIZING(初期化中)
⇒DISABLED (遅延)
⇒SHRINK_CANCEL(縮小中止)
OPER_MODE:操作モード ⇒DISABLED (遅延)
⇒IMMEDIATE(即時)
⇒AUTOは無くなりました
STATUS:操作の完了状態 ⇒INACTIVE (停止中)
⇒PENDING (保留)
⇒COMPLETE (完了)
⇒CANCELLED(中止)
⇒NORMAL,CANCELは無くなりました
☆★☆★☆★
動的にメモリを拡張、縮小してみましょう。
今回は共有プールを拡張しますが、合わせてデフォルト・バッファプールが
縮小、拡張します。
Oracle10gでは拡縮のトリガーとしてもSGA_TARGET値が重要な要素であること
も分かります。
◆環境
Linux RAC10g1 2.4.9-e.40smp
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 – Prod
SGAは176MBで定義されています。
NAME TYPE VALUE ------------------------------------ ----------- ----------- sga_max_size big integer 176M sga_target big integer 176M
新しく追加された動的ビューを参照すれば更にSGAを構成しているサイズが分
かります。この環境では1グラニュルが4MBであることが分かります。
SQL> select * from V$SGAINFO; NAME BYTES RES -------------------------------- ---------- --- Fixed SGA Size 778016 No Redo Buffers 524288 No Buffer Cache Size 117440512 Yes Shared Pool Size 54525952 Yes Large Pool Size 4194304 Yes Java Pool Size 4194304 Yes Streams Pool Size 0 Yes Granule Size 4194304 No ★1グラニュル Maximum SGA Size 184549376 No Startup overhead in Shared Pool 33554432 No Free SGA Memory Available 0 11行が選択されました。
◆共有プールの拡張
現在、52MBの共有プールを56MBに拡張してみます。
NAME TYPE VALUE ------------------------------------ ----------- ----------- __shared_pool_size big integer 52M streams_pool_size big integer 0 __db_cache_size big integer 112M
SQL> ALTER SYSTEM SET shared_pool_size ='56M' SCOPE=MEMORY SID='ora101'; システムが変更されました。
指定するサイズ量によっては、とても時間がかかります。
サイズが増えたどうか確認してみます。
NAME TYPE VALUE ------------------------------------ ----------- ----------- __shared_pool_size big integer 56M shared_pool_size big integer 56M __db_cache_size big integer 108M
共有プールが拡張した分、デフォルト・バッファキャッシュが縮小されてしま
いました。
SGA関連の動的ビューでも見てみます。
db_cache_size が SHRINK(縮小)して113246208(108MB)に
shared_pool_size が GROW(拡張)して 58720256( 56MB)に
変更された事をみることができます。
※FINAL_SIZE項目が最終的なサイズ値です。
SQL> select COMPONENT,OPER_TYPE,OPER_MODE,PARAMETER,
INITIAL_SIZE,TARGET_SIZE,FINAL_SIZE,STATUS,
to_char(START_TIME,'YYYY/MM/DD HH24:MI:SS')as START_TIME,
to_char(END_TIME, 'YYYY/MM/DD HH24:MI:SS')as END_TIME
from V$SGA_RESIZE_OPS ;
COMPONENT OPER_TYPE OPER_MODE PARAMETER
------------------------ ------------- --------- ---------------
DEFAULT buffer cache SHRINK MANUAL db_cache_size
shared pool GROW MANUAL shared_pool_size
INITIAL_SIZE TARGET_SIZE FINAL_SIZE STATUS
------------ ----------- ---------- ---------
117440512 113246208 113246208 COMPLETE
^^^(108MB)
54525952 58720256 58720256 COMPLETE
^^(56MB)
START_TIME END_TIME
------------------- -------------------
2004/07/11 15:32:13 2004/07/11 15:32:13
2004/07/11 15:32:13 2004/07/11 15:32:13
なんだか簡単にできてしまいましたが何度かやってみるとサイズの大きさによ
り数分ALTER文が復帰してこない時がありました。
いくら動的でも本番適用には時間帯も考え注意が必要ですね。
ちょっと長くなってきたので、今週はここで終わります。
なかなか区切りの良いところでまとめるのは難しいですね。
実はこのあと縮小をしたのですが、リサイズされるタイミングが???
それでは続きは来週。。。
梅雨は何処にいったのか?蒸し暑い茅ヶ崎より
