この問題を診断して修正する方法について、いくつかの指針が必要です。これが単純なサーバーのセットアップの問題なのか、アプリケーションの設計上の問題なのか (またはその両方) なのかはわかりません。
この Oracle XE データベースでは、数か月に 1 ~ 2 回、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 ボックスで 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