压测时内存使用率 100%,进行大量 SWAP 操作,Oracle alert 日志文件出现 ORA-00600、ORA-07445、0RA-04031 等错误。
根据错误信息,特别是 ORA-04031 指示 shared pool 不足,按理说应该调高 SGA 的值,但是内存使用率已经达到 100%,所以第一感觉是 SGA,PGA 参数调大了,下调了 SGA、PGA 参数后,问题依旧。
观察 v$pgastat 中的 'over allocation count' 的值,理想值是0,否则表示 Oracle 实际分配的 PGA 大小已经超过了 P_A_T 参数指定的值。当出现此种情况时,Oracle 认为每个 Server Process 进程可能需要更多的 PGA 区域,于是 PGA 算法就为每个进程分配更多的资源,加快了内存溢出的速度。
解决办法:将 PGA 调高后,虽然内存使用率仍然接近 100%,但不再出现 SWAP 和 ORA-??? 报错,压力测试响应速度也在正常范围内。