History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: QA-8
Type: Oracle - Internals Oracle - Internals
Status: Closed Closed
Resolution: Answered
Priority: Major Major
Assignee: ubTools Support
Reporter: ubTools Support
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Questions & Answers

Heapdump Interpretation

Created: 15/Jul/07 12:58 PM   Updated: 16/Sep/07 04:30 PM
Fix Version/s: None

Product Version: ???
Operating System: Generic


 Description  « Hide
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):

 
...
EXTENT 437
Chunk 925dfe4 sz= 1836 perm "perm " alo=1836
Chunk 925e710 sz= 1156 recreate "session heap " latch=0
ds 92693fc sz= 30315156 ct= 440
b7aa56c sz= 3980
92f30a0 sz= 1072
afb6e34 sz= 16472
afb2dcc sz= 16472
afaed64 sz= 16472
...

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!



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
ubTools Support - 15/Jul/07 01:03 PM

Answer:

A heap consists of memory areas named extent. Each extent consists of memory areas named chunks.

Interpretation:

 
EXTENT 437
  Chunk 925dfe4 sz=     1836    perm      "perm           "
alo=1836
  Chunk  925e710 sz=     1156    recreate  "session heap   "
latch=0

EXTENT 437        ---> extent number
925dfe4           ----> chunk address
sz=               -----> size of chunk
perm              ------> permanent memory class
"perm           " ------> chunk comment

Memory classes can be the followings:

  • Recreatable (can be removed and then recreated when requested. i.e: shared SQL statements)
  • Free (free, no object in it)
  • Freeable(used in session/call duration)
  • Permanent(for permament objects)

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.