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

From: Tanel Poder <tanel_at_poderc.com>
Date: Sun, 2 Aug 2009 23:45:55 +0800
Message-ID: <4602f23c0908020845s58ef8479j1e7c5c1cebeefdb9_at_mail.gmail.com>



Hmm... Solaris 10 may be doing something different here. I last tested on Solaris 8 and I'm pretty sure things worked like I said with it. On the other hand, Solaris 8 was released over 10 years ago :)

Time to remember Jonathan Lewis'es article which had something like this in it: "If a claim about some software behavior doesn't have a version number with it, don't trust it" :)

I think this thing needs some testing and elaboration. I'll do some checking and will get back with details soon ;-)

--
Tanel Poder
http://blog.tanelpoder.com


On Sun, Aug 2, 2009 at 1:01 AM, Riyaj Shamsudeen <riyaj.shamsudeen_at_gmail.com

> wrote:

> Tanel
> I must disagree with you. It looks like swap is allocated even for ISM
> pages in Solaris. Please feel free to correct me if there is any
> misunderstanding from my part.
>
> Here is a small test case:
>
> RS: Intially, 7.4G of swap used
> swap -s
> total: 7207256k bytes allocated + 233128k reserved = 7440384k used,
> 40446656k available
>
> RS: ISM in use and SGA is locked as expected.
> Address Kbytes RSS Anon Locked Mode Mapped
> File
> ..
> 0000000380000000 6422544 6422544 - 6422544 rwxsR [ ism
> shmid=0x300001c ]
>
> RS: No sga_max_size set in spfile either.
>
> strings spfilePROD.ora |grep -i sga
> *.sga_target=6272M
>
> RS: Shutting down...
> sqlplus "/ as sysdba"
>
> Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit
> Production
> With the Partitioning, Real Application Clusters, OLAP, Data Mining
> and Real Application Testing options
>
> SQL> shutdown immediate;
> Database closed.
> Database dismounted.
> ORACLE instance shut down.
> SQL>
>
> RS: Just 500M of swap used after instance shutdown..
> wsqfinc1e> swap -s
> total: 451224k bytes allocated + 63928k reserved = 515152k used, 47400568k
> available
>
> RS: Restarting instance..
> ORACLE instance started.
>
> Total System Global Area 6576668672 bytes
> Fixed Size 2050464 bytes
> Variable Size 2583696992 bytes
> Database Buffers 3976200192 bytes
> Redo Buffers 14721024 bytes
> Database mounted.
> Database opened.
>
> RS: Swap is back to 7.32GB
> swap -s
> total: 7135384k bytes allocated + 191968k reserved = 7327352k used,
> 40566696k available
>
> RS: Still ISM..
> Address Kbytes RSS Anon Locked Mode Mapped
> File
> ...
> 0000000380000000 6422544 6422544 - 6422544 rwxsR [ ism
> shmid=0x3000048 ]
>
> Even though, ISM is in use and sga_max_size is not in use, swap is
> allocated.
>
>
> Cheers
>
> Riyaj Shamsudeen
> Principal DBA,
> Ora!nternals - http://www.orainternals.com
> Specialists in Performance, Recovery and EBS11i
> Blog: http://orainternals.wordpress.com
>
>
>
> On Sat, Aug 1, 2009 at 12:51 AM, Tanel Poder <tanel_at_poderc.com> wrote:
>
>> 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-allocating-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 swap- if 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
>>
>>
>
-- Tanel Poder http://blog.tanelpoder.com -- http://www.freelists.org/webpage/oracle-l
Received on Sun Aug 02 2009 - 10:45:55 CDT

Original text of this message