也许,这是正常的,但在我的Oracle 11g数据库我使用Oracle的SQL开发人员看到程序员经常食用超过合并UGA和PGA内存100MB。我想知道这是正常的,用什么办法来完成。我们的数据库是在Windows 2008的32位版本,因此内存的限制,正在成为越来越多的关注。我使用下面的查询来显示内存使用情况:

SELECT e.SID, e.username, e.status, b.PGA_MEMORY
FROM v$session e
LEFT JOIN 
   (select y.SID, y.value pga, 
      TO_CHAR(ROUND(y.value/1024/1024),99999999) || ' MB' PGA_MEMORY 
   from v$sesstat y, v$statname z 
   where y.STATISTIC# = z.STATISTIC# and NAME = 'session pga memory') b
ON e.sid=b.sid
WHERE (PGA)/1024/1024 > 20
ORDER BY 4 DESC;

看来,资源使用率上升的表中的SQLDeveloper打开的任何时间,但即使是关闭的记忆不会消失。如果当它是开放的,似乎使用更多的内存表进行排序的问题是雪上加霜。我了解,而它的排序,这将使用内存,甚至当它仍然是开放的,但在使用内存关闭后看来我错了。任何人都可以证实这一点?

更新: 我发现我的数字是关由于不理解是的所述UGA被存储在根据专用服务器模式的PGA。这使得数字低于他们,但问题仍然是SQL开发人员似乎过度使用PGA。

有帮助吗?

解决方案

也许SQL Developer不关闭它打开了游标。 所以,如果你运行的排序上百万行的查询和SQL开发人员从那里只获取前20行,它需要保持应该要向下滚动,并获取更多的游标打开。

因此,它需要保留一些与仍然分配(这就是所谓的保留排序区),只要将光标的排序区域相关联的PGA内存作为光标是开放的,没有达到EOF(结束取)。

选择一个会话和运行:

select sql_id,operation_type,actual_mem_used,max_mem_used,tempseg_size
from v$sql_workarea_active
where sid = &SID_OF_INTEREST

这应该表现出一定的光标是否仍然保持着他们的记忆开放......

其他提示

您使用自动内存管理?如果是的话,我想关于所使用的PGA内存不用担心。

请参阅文档:

自动内存管理: HTTP:/ /download.oracle.com/docs/cd/B28359_01/server.111/b28310/memory003.htm#ADMIN11011

MEMORY_TARGET: http://download.oracle的.com /文档/ CD / B28359_01 / server.111 / b28320 / initparams133.htm

是否有您使用的是32位Oracle理由吗?最近的硬件支持64位。

甲骨文,特别是与AMM,将使用的内存的每一位,你给它的机器上。如果没有一个理由去分配内存也不会这么做。它与存储空间是相同的:如果你删除用户数据的20 GB的空间不会返回给操作系统。 Oracle会抓住它,除非你明确地压缩表空间。

我相信一个简单的测试应该解除你的忧虑。如果是32位,并且每个SQL Developer的会话使用的RAM 100MB +,那么你只需要几百会议开到导致内存不足的问题......如果真的有一个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top