我需要一些关于如何诊断和解决这个问题的指针。我不知道这是否是一个简单的服务器设置问题或应用程序设计问题(或两者)。
每几个月一次或两次,这个Oracle XE数据库会报告ORA-4031错误。它并没有指向sga的任何特定部分。最近的一个例子是:
ORA-04031:无法分配8208字节的共享内存(“大型池”,“未知对象”,“排序子图”,“排序键”)
当这个错误出现时,如果用户保持刷新,点击不同的链接,他们通常会在不同的时间获得更多的这些错误,然后很快他们会得到“404未找到”页面错误。
重新启动数据库通常会解决问题一段时间,然后一个月左右再次出现,但很少在程序中的相同位置(即它似乎没有链接到任何特定部分的代码)(上面的例子错误是从一个从表中排序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服务器。我安装了几乎所有的默认参数,它一直运行相当好一年左右。大多数问题我已经能够通过调整应用程序代码来解决自己;它没有被广泛使用,而不是一个关键的业务系统。
这些是我认为可能相关的一些当前设置:
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