とあるITエンジニアたちの備忘録

新米エンジニア5人がお送りする、ちょっとためになる話

~共有プールの謎~

みなさん、こんにちは。

どうも、さいばーきゃっとです。

今回は、前回のオラクルエラー(ORA-04031)と関係していた「共有プール」について、説明していきたいと思います。

共有プールの概要と構成

そもそも共有プールは、システムグローバル領域というメインのメモリー領域の1つです。この共有プールには、SQL本文(ユーザが入力したSQLの文章)、解析済みコード(コンピュータでもわかるようにSQL文を変換したソースコード)や、実行計画(SQLを処理する際に利用するステップを定義したもの)が格納されます。
また、共有プールは、主に「ライブラリキャッシュ」と「データディクショナリキャッシュ」から構成されます。

  • ライブラリキャッシュ

ライブラリキャッシュとは、解析済みのSQLコードやPL/SQLコード、実行計画を格納する「共有SQL領域」という領域が割り当てられる領域です。

よく利用するSQL文の情報をライブラリキャッシュに記録しておくことで、同じSQL文を再び実行するときにサーバプロセスがSQL文を解析しなくて済みます。

SQL文の解析に使用するデータディクショナリが格納される領域です。
データディクショナリには、表と列の定義やユーザ名、パスワード、アクセス権限などを記録されます。

共有プールのキャッシュのクリア

前回は、共有プールのキャッシュがは再起動によってクリアできることを説明しましたが、なかなか24時間365日長期運用を行なっているシステムを再起動することは、運用上、簡単にできることではありません。そんな時には、別の方法があるみたいです。

どうやら、以下のSQL文を実行することで、共有プールのキャッシュをフラッシュすることができるようです。

  • ALTER SYSTEM FLUSH SHARED_POOL ;