Oracle数据库的高内存利用率
一台oracle数据库服务器中的内存快要用完了,几乎已占用100GB.
据我们所知,oracle内存由PGA和SGA组成,所以我生成了awr报告来对其进行分析. 如下图所示.
很明显,PGA的大小可以达到66GB,SGA的大小可以达到29GB,因此对PGA有很大的怀疑.
从下面的图片,我们可以获得与服务器进程和后台进程有关的PGA相关信息, 所有用户会话将保留在PGA中.
所以我执行以下SQL检查每个进程的内存利用率.
选择PID,SPID,v $ process中的PGA_ALLOC_MEM / 1024/1024 MB,ORDER BY MB;
从上面的信息阅读框中, 每个过程都占用大量的PGA. SPID表示操作系统进程号. 并根据进程号,可以通过执行以下命令获取哪个jdbc客户端连接数据库服务器的信息 “netstat -tanlp | grep SPID”, 例如SPID是 44175, 我们将知道IP地址和客户端连接数据库的端口.
所以. 客户端IP为 192.168.17.6 和端口是 47244. 登录客户端并执行命令 “netstat -tanlp | grep 47244” 获取客户端程序的PID号.
来自pid号 4842, 我们将通过ps命令知道哪个程序连接数据库服务器.
现在我们可以分析日志(例如catalina.out) 该程序的, 或者我们也可以通过PID分析SQL语句和会话.
但是如果是紧急情况, 最快的方法是重新启动客户端程序(弓猫 ). 并减少数据库服务器的内存利用率. 但是如果您需要彻底解决问题, 尝试分析程序日志, SQL语句或数据库AWR,并修复错误, 优化程序和数据库.