oracle

データベース・バッファ・キャッシュのクリア

パフォーマンス計測する際に活躍します。SQLを1度目実行した時より、2度目実行した時のほうがほぼ早くなると思いますが、その理由の一つがSQLで利用するテーブルや、インデックスがバッファー・キャッシュ(メモリ)にキャッシュオンしている事です。これをクリアする方法がこちらです。

事前にどんなオブジェクトがキャッシュされているか確認

キャッシュされている状況確認SQL
select
  o.OWNER, o.OBJECT_TYPE,o.OBJECT_NAME, o.STATUS, count(*) BLOCKS
from V$BH b inner join  DBA_OBJECTS o
on  b.OBJD = o.DATA_OBJECT_ID
where
  1=1
  and b.TS# > 0  -- 表領域0番は対象から外す
  and b.STATUS <> 'free'
-- and o.OWNER = 'SOONI'
group by o.OWNER,o.OBJECT_TYPE, o.OBJECT_NAME, o.STATUS
order by 1, 2, 3;
確認SQL実行例
SQL> set lin 200
SQL> COLUMN OWNER  FORMAT A20
SQL> COLUMN OBJECT_TYPE  FORMAT A24
SQL> COLUMN OBJECT_NAME  FORMAT A30
SQL> COLUMN STATUS  FORMAT A10
SQL> select
  2    o.OWNER, o.OBJECT_TYPE,o.OBJECT_NAME, o.STATUS, count(*) BLOCKS
  3  from V$BH b inner join  DBA_OBJECTS o
  4  on  b.OBJD = o.DATA_OBJECT_ID
  5  where
  6    1=1
  7    and b.TS# > 0  -- 表領域0番は対象から外す
  8    and b.STATUS <> 'free'
  9  --and o.OWNER = 'SOONI'
 10  group by o.OWNER,o.OBJECT_TYPE, o.OBJECT_NAME, o.STATUS
 11  order by 1, 2, 3
 12  ;

OWNER                          OBJECT_TYPE              OBJECT_NAME                    STATUS             BLOCKS
------------------------------ ------------------------ ------------------------------ -------------- ----------
APEX_040200                    INDEX                    REPORT_COLUMN_PK               VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_BUTTON_TEMP_IDX2      VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_COMPANIES_IDX2        VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_FLASH_MAP_REG_PK      VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_INSTALL_SCRIPTS_IDX1  VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_LISTS_FKIDX           VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_LISTS_PK              VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_LIST_ITEMS_FKIDX      VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_LIST_ITEMS_IDX1       VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_LIST_ITEMS_IDX2       VALID                   1
APEX_040200                    INDEX                    WWV_FLOW_LIST_ITEMS_PK         VALID                   1
※かなりたくさん出力されるはずです、、、

データベース・バッファ・キャッシュのクリア

クリアするSQL
ALTER SYSTEM FLUSH BUFFER_CACHE 
;
クリアSQL実行例
SQL> ALTER SYSTEM FLUSH BUFFER_CACHE
  2  ;

システムが変更されました。

SQL>

これでバッファー・キャッシュはクリアできていますが、実はOSのキャッシュに乗ったままで「実質キャッシュアウトされていない」って状況もあり得ますので注意してくだい。それから、SQLの2回目が早くなるもう一つの理由がSQLのパース結果が共有プールに残っている事です。より正確な計測を求めるには共有プールのクリアも必要です。

スポンサーリンク