当您重新启动或打开服务器时,一切正常,内存正常,会话数也正常。但是连续工作2-3天后,消耗的内存明显增加,会话数增加到450+。据我所知,数据库会话应该自己抛出,这应该没有问题。
但是记忆会发生什么?目前是5.4GB,3天过去了。明天还会有更多。最后,它将依赖于数据库将停止接受新连接这一事实,即使所有内容都已卸载。只有重新启动有帮助。
帮助我理解。
添加
如果我们在 PGA\SGA 内存分配不正确上犯了罪,让我们看看实际上什么是管理不强:
SELECT name, sum(value/1024) "Value - KB"
FROM v$statname n,
v$session s,
v$sesstat t
WHERE s.sid=t.sid
AND n.statistic# = t.statistic#
AND s.type = 'USER'
AND s.username is not NULL
AND n.name in ('session pga memory', 'session pga memory max',
'session uga memory', 'session uga memory max')
GROUP BY name
在输出中我们得到:
会话 uga 内存 24672.609375
会话 uga 内存最大 66495.8515625
会话 pga 内存 46984
会话 pga 内存最大 237577.875
让我们看看SGA:
SELECT (
(SELECT SUM(value) FROM V$SGA) -
(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
) "SGA_TARGET"
FROM DUAL;
结论:
SGA_TARGET:5465165824
PS OS Windows Server,2012 DB Oracle 11g-r2
简要说明原因:分配给数据库的内存过多。
更详细地说,在评论之后:
数据库分配的内存已从一个合理的值(推荐的 40% 物理“黄金平均值”)增加到大约 80% 到 100%。
需要减少数据库分配的内存大小(参考,见官方文档)。
查看当前分配了多少:
前两个参数设置为分配内存的当前值。其他两个值为 0 表示启用了自动内存管理(AMM 自动内存管理)。
您可以首先看到分配内存的减少会带来什么:
该值
MEMORY_SIZE_FACTOR=1
是当前内存大小因子 (1024MB)。该列ESTD_DB_TIME_FACTOR
将显示将分配的内存大小从 25% 更改为当前大小的 2 倍时数据库性能的预期变化(在工作数据库上会有其他值而不是 1)。假设我们需要减半(512MB,问题中最多约 3GB):
你的麻烦可能有很多原因。从应用程序本身开始,oracle缓存请求,到SGA、PGA、日志的错误大小分布。启动时需要多少 RAM?您正在使用什么内存管理?也许您的应用程序不是为如此大量的资源而设计的。从这里开始: https ://oracle-patches.com/oracle/tuning/3118-tuning-database-memory-oracle-buffers-caches-pga