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

投稿日: 2004年7月28日

<動的SGAと自動メモリ管理に関する検証 その2>
ペンネーム:アイスケーキ

今回も引き続き動的SGAと自動メモリ管理について検証をします。
先週は共有プールを拡張したので次は縮小してその他のSGAコンポーネントが
どうなるか見てみましょう。

☆★☆★☆★
先週まで

◆環境
Linux RAC10g1 2.4.9-e.40smp
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 – Prod

◆共有プールの拡張

現在、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

shared_pool_size が 拡張(52MB->56MB)
db_cache_size が 縮小(112MB->108MB)されました。

☆★☆★☆★
それでは動的にメモリを縮小してみましょう。
Oracle9iでは動的に変更すると、MANUALモードとして即時にサイズ変更が反映
されましたが、Oracle10gでは内部モードが追加され、時間をおいて徐々に変
更されていきます。
拡縮のトリガーとしても”SGA_TARGET”値が重要な要素であることも分かります。

◆共有プールの縮小

56MBに拡張した共有プールを52MBへ縮小します。

SQL> ALTER SYSTEM SET shared_pool_size ='52M' SCOPE=MEMORY SID='ora101';
システムが変更されました。

共有プールパラメータは戻ったようですが、バッファキャッシュは変わりません。
どのタイミングでリサイズされるのでしょうか?

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
__shared_pool_size                   big integer 56M
shared_pool_size                     big integer 52M
__db_cache_size                      big integer 108M ★
db_cache_size                        big integer 0

動的ビュー表でもSGAの空きサイズとして認識していないようです。

SQL> select * from V$SGA_DYNAMIC_FREE_MEMORY;

CURRENT_SIZE
------------
0

「V$SGA_RESIZE_OPS」にも結果が追加出力されません。
暫く待っていても良いのですが。。。忍耐が無いもので。。。

◆ひと押し

Oracle10gで追加された”SGA_TARGET”を変更すれば、自動メモリ管理機能により
再計算が行われるはずです。
現在”SGA_MAX_SIZE”と同様に176MBになっているので168MBに変更してみ
ます。当然、”SGA_MAX_SIZE”を超える事はできないので。。。

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
lock_sga                             boolean	 FALSE
pre_page_sga                         boolean	 FALSE
sga_max_size                         big integer 176M
sga_target                           big integer 176M
SQL> ALTER SYSTEM SET sga_target ='168M' SCOPE=MEMORY SID='ora101';
システムが変更されました。

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
sga_max_size                         big integer 176M
sga_target                           big integer 168M

176MB-168MB=8MBの空きメモリとして認識したみたいです。

SQL> select * from V$SGA_DYNAMIC_FREE_MEMORY;

CURRENT_SIZE
------------
          8388608

「V$SGA_RESIZE_OPS」にリサイズされた結果が現れました。
デフォルト・バッファキャッシュは”SGA_TARGET”値で調整されて100MBへ縮
小されてしまいました。
Oracle9iでは存在しなかったモード”DEFERRED(延期)”で出力されています。

COMPONENT                OPER_TYPE     OPER_MODE PARAMETER
------------------------ ------------- --------- ------------
DEFAULT buffer cache     SHRINK        DEFERRED  db_cache_size
                                       ^^^^^^^^

INITIAL_SIZE TARGET_SIZE FINAL_SIZE STATUS
------------ ----------- ---------- ---------
   113246208   104857600  104857600 COMPLETE
                          ^^^^^^^^^

START_TIME          END_TIME
------------------- -------------------
2004/07/11 15:35:23 2004/07/11 15:35:23


NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
__db_cache_size                      big integer 100M
db_cache_size                        big integer 0

◆しばらくすると!!

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
__db_cache_size                      big integer 96M
db_cache_size                        big integer 0

またバッファキャッシュが縮小されています。

「V$SGA_RESIZE_OPS」にはIMMEDIATE(即時モード)でJavaプールが拡張され
デフォルト・バッファプールが100MBから96MBに縮小された情報が追加
格納されています。

COMPONENT                OPER_TYPE     OPER_MODE PARAMETER
------------------------ ------------- --------- --------------
java pool                GROW          IMMEDIATE java_pool_size
DEFAULT buffer cache     SHRINK        IMMEDIATE db_cache_size
                                       ^^^^^^^^^

INITIAL_SIZE TARGET_SIZE FINAL_SIZE STATUS
------------ ----------- ---------- ---------
     4194304     8388608    8388608 COMPLETE
   104857600   100663296  100663296 COMPLETE
                          ^^^^^^^^^

START_TIME          END_TIME
------------------- -------------------
2004/07/11 16:00:17 2004/07/11 16:00:17
2004/07/11 16:00:17 2004/07/11 16:00:17

以上のように、”SGA_TARGET”パラメータを変更すると内部チューニング・アル
ゴリズムにより最適サイズがワークロードに応じて決定されSGAコンポーネン
トのサイズが動的に変更されていきます。

注意
○初期パラメータとして手動で構成されたコンポーネントは影響を受けません。
○共有プールは拡張されても縮小されることはありません。
その他。。。諸々

今週迄で動的SGAと自動メモリ管理に関しての概要は終わりです。
来週は更に、ズバ~と踏み込めるのか。。。不安です。

いよいよ夏本番の茅ヶ崎より