I have a process which is taking up way more memory than I'd expected. The process runs a PL/SQL that does some nested loop joins on a PL/SQL table.
The background process is using > 200Mb of private memory and this number goes up if we tweak the WHERE clause in the join to return more data.
I did a heapdump of the process and the trace file looks like this (lots of stuff trimmed):
I presume that "session heap" is the UGA for this process'
session. Basically it goes on like this for several pages with sz anywhere between 16k and 1Mb. How can I interpret this? I presume the memory is to do with cursor information. This is a sort but the sort area size is only 10Mb and cannot account for all the private memory in use.
I'm just trying to decide if this is a reasonable amount of memory to be using (i.e. explain what it is using it for) and just put up with it, or if something has gone wrong. I'm on 8.1.5 on Linux 2.2 (I know, I know...)
Thanks for any insight!
Answer:
A heap consists of memory areas named extent. Each extent consists of memory areas named chunks.
Interpretation:
Memory classes can be the followings:
Each chunk in same extent is contiguous. For your case, the first chunk address(0x925dfe4) + its size(1836) = the second chunk address (0x925e710)
For your problem:
Shared memory segments such as SGA are included in process address space. So, You may be encoutering this problem. Search metalink for pmap command.