レック・テクノロジー・コンサルティング株式会社TECH BLOG

大容量メモリに潜むメモリ枯渇問題その1 ~Linux HugePageの薦め~

本稿を執筆させていただきます、レック・テクノロジー・コンサルティングの田中と申します。
本稿ではLinux上で動作するOracleデータベース(以下、Oracle)のメモリに関する内容を記載していきます。

さて、今日Oracleに実装する物理メモリは、数十GBを超えるケースは珍しくありません。

これに伴いOracleインスタンスに割り当てるSGA(共有メモリ領域)のサイズについても数十GBといった巨大な領域を割り当てるケースが多いのではないでしょうか。

これから何話かに渡って、昨今の数十GBを超える物理メモリを扱う際に陥りやすいメモリ枯渇の問題について取り上げます。
 

Oracleが使用するメモリ領域

 
Oracleは主に以下のメモリ領域を使用します。
 
環境によって設計方針は異なるかと思いますが、Oracleのメモリ設計を行う上で、これら要素の値を的確に導出することが非常に重要です。
 
・SGA :共有メモリ領域。データブロック・共有カーソルなどの共有リソースを格納する領域
・PGA :プログラムのテキスト、スタック、セッション固有の情報、SQLの実行領域など

上記のうち、動的なメモリ獲得を行う要素はPGAです。

PGAのメモリ領域を制御するパラメータには、PGA_AGGREGATE_TARGET※などがあります。
※インスタンスに接続された全てのサーバ・プロセスが使用できるPGAサイズを指定するパラメータ
 
このパラメータは上限値ではなく厳密には目標値であるため、処理内容によってはパラメータ値を超えてしまい、サーバメモリ(以下、メモリ)を逼迫してしまう可能性があります。とはいえ、昨今のハードウェア価格の下落から、メモリについてもかなり余裕をもたせた設計がなされているケースが増えています。PGAについても、導入時は1セッションあたり数十MB程度以上の余力をもった設計が行われる場合が多く、PGA自体がメモリを逼迫する原因となるケースは稀となっています。

大容量メモリ・・・それでも、メモリが枯渇する?

 
しかし、余裕をもたせた設計がなされ、大容量メモリを搭載しているにも関わらず、それでも次々とメモリが消費されてメモリ不足に陥ることがあります。こうした場合、いくら物理的な対処を施しても延命措置にしかならず、一向に解決できないまま綱渡りの運用を強いられます。発生原因を究明することが何よりも求められますが、Oracleから取得できる情報のみでは正しく原因を究明できない場合が多いのです。

その結果、最悪はサーバ停止といった状態に陥ることもあります。この問題を回避するには、メモリを消費する箇所を適切に把握し、OS、ミドルウェア双方の状況を正しく判断する必要があります。

次回からは、『昨今の大容量メモリを搭載した結果、逆に設計当初を遥かに超えるメモリ消費を引き起こすよくある原因』について、具体的に言及していきます。

この記事をシェアする

  • Facebook
  • X
  • Pocket
  • Line
  • Hatena
  • Linkedin

資料請求・お問い合わせはこちら

ページトップへ戻る