RE: Solaris 10 and Oracle 10g - swap space problem

From: Crisler, Jon <Jon.Crisler_at_usi.com>
Date: Mon, 3 Aug 2009 11:11:13 -0400
Message-ID: <56211FD5795F8346A0719FEBC0DB067504B4B049_at_mds3aex08.USIEXCHANGE.COM>



I have found through actual testing that this is not true. With SGA_MAX_SIZE = SGA_TARGET, and with SGA_MAX_SIZE unset, it still reserves swap space. It might be a different on Solaris 10 patch versions. I have a bunch of emails to digest first and will comment more later.  

From: Tanel Poder [mailto:tanel_at_poderc.com] Sent: Saturday, August 01, 2009 1:51 AM
To: Crisler, Jon
Cc: oracle-l_at_freelists.org
Subject: Re: Solaris 10 and Oracle 10g - swap space problem  

If you use ISM (when SGA_MAX_SIZE = SGA_TARGET or when SGA_MAX_SIZE is unset in parameter file) then all SGA pages are locked in physical memory (by OS VM design) - thus no swap space needs to be reserved as the pages in memory aren't pageable.

If you are using DISM (when SGA_MAX_SIZE > SGA_TARGET) then SGA is using pageable large pages in Solaris (which are individually locked in physical memory by Oracle's mlock requests). But as the pages are essentially pageable, swap space needs to be reserved when SGA is created.

If you want to avoid your SGA causing the swap space reservation, unset your SGA_MAX_SIZE parameter.

I have mentioned this on this blog entry (and in the comments section there's a link to a Solaris kernel internals presentation):

http://blog.tanelpoder.com/2007/08/28/operating-systems-are-lazy-allocat ing-memory/

--

Tanel Poder
http://blog.tanelpoder.com

On Wed, Jul 29, 2009 at 7:31 AM, Crisler, Jon <Jon.Crisler_at_usi.com> wrote:

On Solaris 10, when I start my databases, I see my swap space usage increase in a one for one ratio with memory utilization. System has 64gb of memory. If I start up a 4gb database, I see 4gb of real memory used and 4gb of swap space used up as well (as shown by top, swap -l, swap -s etc.). This is purely a Oracle database server, and /etc/system and projects / resource controls seem to be set up, so I do not understand why swap is being touched. If I stop all oracle processes, swap drops down to about 100 Mb used.  

I have taken great pains to make sure that NO swap is being used, yet any little allocation of Oracle gets tossed into swap. I don't know where to look after this- I would have suspected /etc/system or resource control / projects to be at fault, or /etc/security (ulimits) but everything looks ok. The system has 64g real, and about 54 gb swapif  I get close to 54gb memory allocated oracle will return out of memory errors.. Needless to say the system crawls.  

What am I overlooking ? TOP and swap -s / swap -l agree so its not a TOP anomaly  

Example from TOP - I have 20g free, so why so much used in swap ?  

load averages: 0.64, 0.57, 0.46
00:26:34

1073 processes:1071 sleeping, 2 on cpu

CPU states: 98.3% idle, 1.2% user, 0.5% kernel, 0.0% iowait, 0.0% swap

Memory: 64G real, 20G free, 40G swap in use, 17G swap free  

   PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND   1997 oracle 1 39 0 4376K 2592K cpu/50 0:02 0.04% top

  3454 oracle 1 52 0 16G 16G cpu/32 0:00 0.03% oracle

  3456 oracle 1 24 0 16G 16G sleep 0:00 0.03% oracle

 18589 oracle 1 59 0 16G 16G sleep 0:13 0.02% oracle  

Swap -s

total: 39170184k bytes allocated + 2262264k reserved = 41432448k used, 18017608k available

--

Tanel Poder
http://blog.tanelpoder.com

--

http://www.freelists.org/webpage/oracle-l Received on Mon Aug 03 2009 - 10:11:13 CDT

Original text of this message