動的SGAと自動メモリ管理に関する検証 その1

<動的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文が復帰してこない時がありました。
いくら動的でも本番適用には時間帯も考え注意が必要ですね。

ちょっと長くなってきたので、今週はここで終わります。
なかなか区切りの良いところでまとめるのは難しいですね。

実はこのあと縮小をしたのですが、リサイズされるタイミングが???
それでは続きは来週。。。

梅雨は何処にいったのか?蒸し暑い茅ヶ崎より