Possible to turn off file system cache? 
Author Message
 Possible to turn off file system cache?

Hi There,

I'm working on a Solaris 2.5.1 machine which appears to be
memory constrained.

When I run sar -r 5 5 I see this:

texas% sar -r 5 5

SunOS texas 5.5.1 Generic_103640-04 sun4u    04/19/97

22:42:39 freemem freeswap
22:42:44    2085  2896453
22:42:49    2110  2896128
22:42:54    2162  2908621
22:42:59    2154  2896875
22:43:04    2160  2902493

Average     2134  2900106

It only has 2134 pages of freemem.

If I run whatami I see that it has 1gb of ram:

               DATE: Sat Apr 19 23:21:14 PDT 1997          <MOVE REQUEST INFO>
               USER: oracle                                   <LOGIN = oracle>
              MODEL: SUNW,Ultra-Enterprise    <MACHINE MODEL = SUNW,Ultra-Enterprise>
                CPU: SUNW,UltraSPARC
                CPU: SUNW,UltraSPARC
                CPU: SUNW,UltraSPARC
                CPU: SUNW,UltraSPARC
      SunOS RELEASE: 5.5.1
             MEMORY: 1024MB
               SWAP: 1686.8MB total, 269.2MB used, 1417.5MB available
       LOAD AVERAGE: 0.12, 0.14, 0.14

If I look at shared memory used by Oracle I see this:
SVRMGR> show sga
Total System Global Area     216062460 bytes

So, it looks like about 20% of the memory is going to Oracle
as shared memory (aka SGA in oracle parlance).

If I look at processes I see a few large oracle processes which
look like this:

ps -e -o user,pmem,vsz,args | grep oracle
  oracle  0.2 3032 /u01/app/oracle/product/7.2.2/bin/tnslsnr LISTENER -inherit
  oracle 20.7 223584 ora_dbwr_proddb
  oracle 20.7 222952 ora_arch_proddb
  oracle 21.0 222792 ora_smon_proddb
  oracle 20.8 222752 ora_reco_proddb
  oracle 21.0 222736 ora_pmon_proddb
  oracle 20.7 222912 ora_lgwr_proddb
  oracle  0.1 1088 csh
  oracle  0.2 1568 -ksh
  oracle  0.1 1088 csh
  oracle  0.1  832 grep oracle
  oracle  0.2 1576 -ksh

Inspection of the process listing above reveals a question,

"When ps looks at a particular oracle process, is the shared memory
which the process is attached to count towards the memory size of
that process?"

For example, if we look at the listing for ora_dbwr_proddb, we see
that ps believes the size of the process to be 223584 kb.

This is a huge memory size for a process.  I can only make sense
of it if I conclude that ps is adding shared memory to private
memory in the display but that the process is not really 223584 kb.
If I want to find the true size of the process I need to subtract
216062460 bytes from 223584 kb to come up with 12586 kb.  This is
still a large size for a process but we are talking about an Oracle
process (Oracle software has a rep for being a resource hog).

Actually, now that I think about it, one other scary scenario comes
to mind:
If a process connects to shared memory, that process makes a copy
of that shared memory.  Thus, when ps sees such a process it sees
a truely huge process.

This second scenario is so scary, in fact, that I'll ignore it and
concentrate on scenario # 1.

So, I decide to run with this wild guess.  If I want to find the true size
of all the processes running, I need to subtract out the size of the
shared memory of all the giant oracle processes.

The following script is helpful:

#! /bin/sh

echo 0>/tmp/dcme
ps -e -o vsz | /bin/awk '{print $0"+" }'|grep -v VSZ>>/tmp/dcme
echo p>>/tmp/dcme
echo q>>/tmp/dcme
dc /tmp/dcme

When I run it I get the following number:


So, ps reports that the total memory consumption by processes on this
machine is 1,439,960 kb (which is outrageous).

Next, I inspect /tmp/dcme and notice 6 entries for the huge oracle
processes.  So, to adjust the number I multiply 216062460 bytes by
6 and subtract the result from 1,439,960 kb to get:

1,439,960 kb - (216062460*6/1024) kb = 173970 kb

So, it appears that at this moment, all of the process on this
machine consume only 173,970 kb which is about 17 % of the
1gb of ram.

Now the arithmetic gets simple...

Shared memory consumes 20% of the ram
Processes consume 17% of the ram

WHERE is the other 63% of the ram?

I suspect the main clue to the answer lies in the one of my
dusty UNIX books.  I think I remember reading that UNIX, like
oracle likes to set up buffers in memory to cache files which
are active.

Could it be that Solaris is devoting 63% of the ram to cache
files which have been opened by oracle?

On this machine I happen to know that all of the oracle data files
are large ufs files rather than raw devices.

Does Solaris have a shell command or gui tool which will tell me
how much ram is devoted to caching the file system?

Does Solaris have a shell command or gui tool which I can use
to tell Solaris to not cache certain files?

Daniel B. Bikle/Independent Oracle Consultant


Thu, 07 Oct 1999 03:00:00 GMT
 [ 1 post ] 

 Relevant Pages 

1. Possible to turn off file system cache?

2. Possible to turn off file system cache?

3. SQL Server & turning RAID Cache Off

4. turn write-to-cache off

5. Turning Off the PTS Cache

6. Performance Testing ( Turn compile cache off ? )

7. Can I turn OFF read cache?

8. Turning off cache for a single sql-query

9. Turning cache off on a Seagate drive under AIX - Progress/AIX/Seagate don't mix

10. Turn off system warning

11. dts login transfer turns off update system tables flag

12. Turn it off, turn it on

Powered by phpBB® Forum Software