Top > ALTER SYSTEM > ALTER SYSTEM FLUSH
ALTER SYSTEM FLUSH
ALTER SYSTEM FLUSH SHARED_POOL
ALTER SYSTEM FLUSH SHARED_POOL は SGA (システム・グローバルエリア)に確保されている「共有プール(SHARED POOL)」 上のすべてのデータをフラッシュする。
共有プール 内には以下のデータがキャッシュされている。
- データディクショナリ のキャッシュ
- SHARED SQL AREA(共有 SQL エリア)
- SHARED PL/SQL AREA(共有 PL/SQL エリア)
- ストアド・サブプログラム
- トリガー
但し、(正常稼動しなくなるので) まさに実行中のキャッシュは削除されない。
ALTER SYSTEM FLUSH SHARED_POOL 使用時の問題点
SQL の解析情報が消去されるため後続の SQL がすべてハード解析される。局所的に負荷のピークが発生する。
またシーケンスの情報も共有プール上にキャッシュされているためシーケンスのメモリキャッシュ分が欠番となる。
シーケンスのデフォルトキャッシュは 20 となってるので FLUSH すると 21 から採番される。
SQL> create sequence my_seq;
順序が作成されました。
SQL> select my_seq.nextval from dual;
NEXTVAL
----------
1
SQL> select my_seq.nextval from dual;
NEXTVAL
----------
2
SQL> alter system flush shared_pool; -- 1〜 20 のキャッシュ分が消滅する
システムが変更されました。
SQL> select my_seq.nextval from dual;
NEXTVAL
----------
21
SQL> select my_seq.nextval from dual;
NEXTVAL
----------
22
参考 ⇒ 結構多い?シーケンスが欠番する原因
ALTER SYSTEM FLUSH BUFFER_CACHE
ALTER SYSTEM FLUSH BUFFER_CACHE は SGA に確保されているのデータベース・バッファキャッシュのデータをフラッシュする。
データベース・バッファキャッシュには、表やインデックスなどのデータブロックのキャッシュが保存されている。
このキャッシュを消去することで、同じ SQL を評価する場合にキャッシュ影響受けず正しい評価を行なうことができる。
更新系の性能評価する場合には、さらに ALTER SYSTEM CHECKPOINT を実行することで更新済データ(ダーティバッファ)を書き出しを併用すると良い。また、遅延ブロッククリーンアウト にも配慮が必要なケースもあるだろう。
注意
ALTER SYSTEM FLUSH BUFFER_CACHE を実行することは ALTER SYSTEM FLUSH SHARED_POOL とは大きく異なり並行して問い合わせが行われている場合には、その問い合わせは正しい結果を戻せなくなる。
このコマンドは検証環境などの SQL の投入状態を管理できている環境においてのみ使用する。
関連事項