1. ホーム
  2. oracle

[解決済み] ORA-4031 "unable to allocate x bytes of shared memory" を解決する。

2022-02-18 19:30:42

質問

この問題の診断と修正方法について、いくつかの指摘が必要です。これが単純なサーバー設定の問題なのか、アプリケーションの設計の問題なのか(あるいはその両方なのか)わかりません。

この Oracle XE データベースは、数ヶ月に一度か二度、ORA-4031 エラーを報告します。それは一貫して、sgaの特定の部分を指していません。最近の例では

ORA-04031: unable to allocate 8208 bytes of shared memory ("large pool","unknown object","sort subheap","sort key")

このエラーが表示された場合、ユーザーが何度も更新したり、別のリンクをクリックしたりすると、一般に、さまざまなタイミングでこの種のエラーが発生し、やがて "404 not found" ページエラーが発生するようになるのです。

データベースを再起動すると、たいていしばらくは問題が解決し、1ヶ月ほどしてからまた出てきますが、プログラムの同じ場所(つまり、コードの特定の部分にリンクしていないようです)にはほとんどありません(上記のエラー例は、テーブルから5000行以上をソートしているApexページから発生したものです)。

を増やしてみました。 sga_max_size を140Mから256Mに変更し、これが事態を解決することを望んでいます。もちろん、設定を変更するためにデータベースを再起動しなければならなかったので、これが役に立ったかどうかはわかりません :)

私は、512MBのRAMを搭載したOracle Enterprise Linux 5 box上でOracle XE 10.2.0.1.0を実行しています。サーバーは、データベース、Oracle Apex (v3.1.2) および Apache Web サーバーのみを実行しています。私は、ほとんどすべてのデフォルトのパラメータでそれをインストールし、それは1年かそこらで非常にうまく動作しています。ほとんどの問題は、アプリケーションのコードをチューニングすることで解決できましたが、これは集中的に使用されるものではなく、ビジネスクリティカルなシステムでもありません。

これらは、私が関連すると思われる現在の設定です。

pga_aggregate_target        41,943,040
sga_max_size              268,435,456
sga_target                146,800,640
shared_pool_reserved_size   5,452,595
shared_pool_size          104,857,600

参考までに、現在のSGAのサイズをお知らせします。

Total System Global Area  268435456 bytes
Fixed Size                  1258392 bytes
Variable Size             251661416 bytes
Database Buffers           12582912 bytes
Redo Buffers                2932736 bytes

解決方法は?

ASMM を使用している場合でも、ラージプールの最小サイズを設定することができます (MMAN はその値より小さくなることはありません)。 また、いくつかのオブジェクトをピン留めして、SGA_TARGET を増やしてみることもできます。