what would be your suggestion.
Pravesh Karthik from India, December  13, 2004 - 12:44 am UTC
 
 
Tom,
I understand what you mean to say as above, when you are going to start a new application, you will not have an idea of how big your sga components need to be, or what should be the size of buffer cache. In that case, what would be your suggestion.
I typically give the minimal values or considering the application db usuage, from the application architectural team ...set the sga_max_size. Then check for advisories through statspack or directly from the advisory tables.  Check the application for another few days .. set the values ..the  check for weeks. and set the optimal values as derived from the above process ...
Is this the right way?. or what would be your suggestion on this.
Thanks for your consideration
Pravesh Karthik from India 
 
December  13, 2004 - 10:00 am UTC 
 
 
i start small and go up from there.  your approach is sound. 
 
 
 
Bal Krishan, December  13, 2004 - 1:00 am UTC
 
 
Exceelent Tom. This is what i was looking for. Just one followup. 
Assuming nothing else is going on the machine, can you give us a ROUGH estimate of percent divison of SGA in a typical server configuration among its components in both shared and dedicated mode for maximum performance. 
a) DB buffer
b) Redo log buffer
c) Shared pool
d) Large pool
e) Java pool
Thanks in advance. You are doing a great job. 
 
December  13, 2004 - 10:08 am UTC 
 
 
nope.
if you really don't know, use 10g and just set sga_target and let it figure it out empirically over time. 
 
 
 
You are missing the point...
Scot, December  13, 2004 - 10:46 am UTC
 
 
I think you are missing the point.  Your followup is the same as your original question, and Tom has already answered both.  There is no rough estimate that applies to all situations.  Are you running a data warehouse with lots of huge queries?  Are you running a heavy oltp system?  You can't just list all of the components of Oracle memory that exist and expect someone to be able to tell you how to set them.  Read the concepts guide and administrators guide chapters on memory allocation and use, then read the performance tuning guide, and then follow what Pravesh suggested and test it out. 
 
 
sga_target & sga_max_size
Enrique, December  20, 2004 - 7:16 am UTC
 
 
Hi
I am configuraring a new Oracle 10g instance for production purposes. I read from Oracle 10g new features for administrators exam guide (from Oracle Press) that when we use sga_target we should not set any parameters for the 4 dynamic tunable components, buffer cache, shared pool, java pool and large pool to reduce database's ability to adapt to database wrkload changes. How true is this? If I set sga_target to 1000M how much memory will these 4 components consume to start?
I have another question about sga_target & sga_max_size. If we set sga_max_size bigger than sga_target will sga_target always be lower than sga_max_size? For example
sga_target = 1200M
sga_max_size = 1600M
Does this make sense? Will Oracle allocate memory up to 1600M sometime or maximum it will reach 1200M. What's the point combining these two parameters, shouldnt we just use sga_target and forget about sga_max_size? 
 
December  20, 2004 - 8:54 am UTC 
 
 
how true is it?
100% true, if you set the sga_target, the other 4 components are set for you.
if you set the SGA_TARGET to 1000m, the 4 components will be sized to consume 1000m.  consider:
SQL> show parameter sga_target
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------<b>
sga_target                           big integer 1000M</b>
SQL> show sga
 
Total System Global Area <b>1048576000 bytes</b>
Fixed Size                   782424 bytes
Variable Size             259002280 bytes
Database Buffers          788529152 bytes
Redo Buffers                 262144 bytes
SQL> show parameter pool
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep                     string
buffer_pool_recycle                  string
global_context_pool_size             string
java_pool_size                       big integer 0
large_pool_size                      big integer 0
olap_page_pool_size                  big integer 0
shared_pool_reserved_size            big integer 12373196
shared_pool_size                     big integer 0
streams_pool_size                    big integer 0
SQL>
<b>basically, Oracle will setup reasonable initial sized pools (if you know how to peek at _ parameters, you'll see them:
__java_pool_size               4194304
__large_pool_size              4194304
__shared_pool_size             247463936
) and will put the rest in the buffer cache.  Over time, if the pools need more, it'll steal from the buffer cache and increase them.</b>
sga_target has to be less than or equal to sga_max_size.  It depends on the OS how the memory is reserved, but basically your 1200/1600 would have you start with an SGA of 1,200 meg that could be grown by you to 1600m (using alter system)
SQL> show parameter sga
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 1200M
sga_target                           big integer 1008M
SQL> alter system set sga_target = 1100m;
 
System altered.
 
SQL> alter system set sga_target = 1300m;
alter system set sga_target = 1300m
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00823: Specified value of sga_target greater than sga_max_size
 
 
 
 
 
sga_target
A reader, December  20, 2004 - 10:05 am UTC
 
 
Hi
So if we set sga_target we should forget about setting parameters for shared pool, large pool, java pool and buffer cache correct? 
 
December  20, 2004 - 10:24 am UTC 
 
 
that would be the prefered way, you can set the others -- then they are used as "minimums" -- but in for a penny -- in for I pound on this one I say
you would either
o use auto SGA sizing
o or not
 
 
 
 
what does Oracle do with those extra memory when sga_max_size is set
A reader, December  21, 2004 - 6:20 am UTC
 
 
Hi
From your demo
sga_target = 1200M
sga_max_size = 1600M
when you do show SGA it shows that 1600M is used (this is because of platform) but if you check v$sga_dynamic_components you can see that not 1600M is used, even we add all SGA components from v$sgastat we dont see 1600M is used but at OS level 1600M is used. What does Oracle do with the extra 400M?
 
 
December  21, 2004 - 9:02 am UTC 
 
 
Oracle just has it allocated -- the real question is "what does the OS do with it"
Typically the OS will not have it in RAM, it'll be virtually there -- meaning that while it may be allocated -- it is not being used, it is on disk. 
 
 
 
ORA-00821: Specified value of sga_target is too small, needs to be at least 296M
Dawar, February  28, 2005 - 3:57 pm UTC
 
 
Tom,
I have installed 10g Release 1 (10.1.0.3) Patch Set on 10.1.0.2.0. (for Lunix x86)
I followed the steps from the README for 3761843.
After complete succsufull message.
I am trying to do some post installation steps as mentioned in the document above.
Here are the steps I done after patch installation.
With error message.
2) For single-instance installations, start the listener as follows:
$ lsnrctl start
#
4) Use SQL*Plus to login to the database as the SYS user with SYSDBA 
privileges:
$ sqlplus "/ AS SYSDBA"
#
5) Start the database:
SQL> STARTUP
#
6) Set the value of the SHARED_POOL_SIZE initialization parameter to at least 
150 MB:
SQL> ALTER SYSTEM SET SHARED_POOL_SIZE='150M' SCOPE=spfile;
#
7) Set the value of the JAVA_POOL_SIZE initialization parameter to at least 120 
MB:
SQL> ALTER SYSTEM SET JAVA_POOL_SIZE='120M' SCOPE=spfile;
#
8) Shut down the database:
SQL> SHUTDOWN
9)
SQL> STARTUP UPGRADE
ORA-00093: _shared_pool_reserved_min_alloc must be between 4000 and 0
*******************************************************
No I wanted to run catpatch.sql so I logged on to database but
oracle@abc:~/product/10.1.0/db_1/rdbms/admin> sqlplus
SQL*Plus: Release 10.1.0.3.0 - Production on Mon Feb 28 11:48:04 2005
Copyright (c) 1982, 2004, Oracle.  All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to an idle instance.
SQL> startup
ORA-00821: Specified value of sga_target is too small, needs to be at least 296M
What should I do to solve this issue?
Regards,
Dawar
 
 
 
February  28, 2005 - 4:01 pm UTC 
 
 
alter the system set the sga_target to 296m or more
You've upped the size of other SGA components so that now your target sga size that you had set before is too small to hold everything. 
 
 
 
ORA-01034: ORACLE not available
Dawar, February  28, 2005 - 5:26 pm UTC
 
 
oracle@abc:~> sqlplus
SQL*Plus: Release 10.1.0.3.0 - Production on Mon Feb 28 14:25:13 2005
Copyright (c) 1982, 2004, Oracle.  All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to an idle instance.
SQL> alter system set sga_target ='296M';
alter system set sga_target ='296M'
*
ERROR at line 1:
ORA-01034: ORACLE not available
SQL> startup
ORA-00821: Specified value of sga_target is too small, needs to be at least 296M
SQL>
Regards,
Dawar
 
 
 
February  28, 2005 - 5:32 pm UTC 
 
 
ok, assuming you want to get well soon -- do this (messy but it'll work)
cd $ORACLE_HOME/dbs
strings -a spfile$ORACLE_SID > init$ORACLE_SID.temp
edit init$ORACLE_SID.temp
fix up the sga_target
SQL> connect / as sysdba
SQL> startup force pfile=init<your_sid>.temp
SQL> create spfile from pfile;
SQL> shutdown
 
 
 
 
 
DAWAR, February  28, 2005 - 6:21 pm UTC
 
 
You said
strings -a spfile$ORACLE_SID > init$ORACLE_SID.temp
I think this is " $ORACLE_SID.ora "
strings -a spfile$ORACLE_SID.ora > init$ORACLE_SID.temp
is it correct?
Without ora its found nothing but with ora its work.
If my understanding is correct you do not have to reply me.
 
thanks
Dawar
 
 
February  28, 2005 - 6:29 pm UTC 
 
 
not if you want to use the startup force command I gave you.
It could be called x.txt, whatever.dat, it is just a file name.
I called it .temp in case you have a .ora file there, did not want to clobber it. 
 
 
 
ORA-01078: failure in processing system parameters
Dawar, March     01, 2005 - 11:36 am UTC
 
 
Tom,
I have craeted initsid.temp file as below:
Cd $ORACLE_HOME/dbs
strings -a spfile$ORACLE_SID > init$ORACLE_SID.temp
I have edited init$ORACLE_SID.temp and change the size of sga_target to 310378496.
oracle@abc:~/product/10.1.0/db_1/dbs> ls -ltr
total 2855
-rw-r--r--    1 oracle   oinstall    12920 2004-08-31 22:08 initdw.ora
-rw-r--r--    1 oracle   oinstall     8385 2004-08-31 22:08 init.ora
-rwSr-----    1 oracle   oinstall     1536 2005-01-01 11:52 orapwmysid
-rw-r-----    1 oracle   oinstall  2867200 2005-02-21 07:33 snapcf_mysid.f
-rw-rw----    1 oracle   oinstall     1544 2005-02-28 11:06 hc_mysid.dat
-rw-r-----    1 oracle   oinstall       24 2005-02-28 11:06 lkMYSID
-rw-r-----    1 oracle   oinstall     3584 2005-02-28 11:12 spfilemysid.ora
-rw-r--r--    1 oracle   oinstall      621 2005-02-28 14:27 alert_mysid.log
-rw-r--r--    1 oracle   oinstall     1114 2005-02-28 15:17 initmysid.temp
*******************************************************************
oracle@abc:~/product/10.1.0/db_1/dbs> sqlplus /nolog
SQL*Plus: Release 10.1.0.3.0 - Production on Tue Mar 1 08:22:58 2005
Copyright (c) 1982, 2004, Oracle.  All rights reserved.
SQL> connect as sysdba
Enter user-name: sys
Enter password:
Connected to an idle instance.
SQL> startup force pfile=initmysid.temp
ORACLE instance started.
Total System Global Area  310378496 bytes
Fixed Size                   778896 bytes
Variable Size             291773808 bytes
Database Buffers           16777216 bytes
Redo Buffers                1048576 bytes
Database mounted.
Database opened.
SQL> create spfile from pfile;
create spfile from pfile
*
ERROR at line 1:
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file
'/opt/oracle/product/10.1.0/db_1/dbs/initmysid.ora'
SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
Regards,
Dawar
 
 
 
 
Dawar, March     01, 2005 - 11:53 am UTC
 
 
Tom,
But now I do not see spfilemysid.ora file.
oracle@abc:$ORACLE_HOME/dbs> ls -ltr 
total 2851
-rw-r--r--    1 oracle   oinstall    12920 2004-08-31 22:08 initdw.ora
-rw-r--r--    1 oracle   oinstall     8385 2004-08-31 22:08 init.ora
-rwSr-----    1 oracle   oinstall     1536 2005-01-01 11:52 orapwmysid
-rw-r-----    1 oracle   oinstall  2867200 2005-02-21 07:33 snapcf_mysid.f
-rw-rw----    1 oracle   oinstall     1544 2005-02-28 11:06 hc_mysid.dat
-rw-r--r--    1 oracle   oinstall      621 2005-02-28 14:27 alert_mysid.log
-rw-r--r--    1 oracle   oinstall     1114 2005-03-01 08:22 initmysid.temp
-rw-r-----    1 oracle   oinstall       24 2005-03-01 08:41 lkMYSID
Do I need to create spfile$ORACLE_SID.ora file?
If yes, how?
I think I need to create spfile$ORACLE_SID.ora  from init$ORACLE_SID.temp and then create init$ORACLE_SID.ora from spfile$ORACLE_SID.ora.
** strings -a init$ORACLE_SID.temp > spfile$ORACLE_SID.ora
** strings -a spfile$ORACLE_SID.ora > init$ORACLE_SID.ora
Is it correct?
Regards,
Dawar 
 
 
March     01, 2005 - 12:31 pm UTC 
 
 
you do not show us what commands you used.
where is the ORIGINAL spfile go to?
Ok, here it is step by step:
[ora9ir2@xtkyte-pc dbs]$ strings -a spfileora9ir2.ora  > init$ORACLE_SID.temp
[ora9ir2@xtkyte-pc dbs]$ mv spfileora9ir2.ora spfileora9ir2.ora.backup
[ora9ir2@xtkyte-pc dbs]$ sqlplus "/ as sysdba"
 
SQL*Plus: Release 9.2.0.5.0 - Production on Tue Mar 1 12:24:49 2005
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.
idle> startup force pfile=initora9ir2.temp
ORACLE instance started.
 
Total System Global Area  126948840 bytes
Fixed Size                   452072 bytes
Variable Size              58720256 bytes
Database Buffers           67108864 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
idle> create spfile from pfile='/home/ora9ir2/dbs/initora9ir2.temp';
File created.
 
idle> !ls -ltr
total 20
-rw-rw----    1 ora9ir2  ora9ir2      2560 Mar  1 12:23 spfileora9ir2.ora.backup
-rwSr-----    1 ora9ir2  ora9ir2      1536 Mar  1 12:24 orapwora9ir2
-rw-rw-r--    1 ora9ir2  ora9ir2       996 Mar  1 12:24 initora9ir2.temp
-rw-rw----    1 ora9ir2  ora9ir2        24 Mar  1 12:24 lkORA9IR2
-rw-rw----    1 ora9ir2  ora9ir2      2560 Mar  1 12:25 spfileora9ir2.ora
idle> startup force
ORACLE instance started.
 
Total System Global Area  126948840 bytes
Fixed Size                   452072 bytes
Variable Size              58720256 bytes
Database Buffers           67108864 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
idle>
and back in business. 
 
 
 
Dawar, March     01, 2005 - 12:10 pm UTC
 
 
Tom,
I followed your link as below but getting this error while trying to create spfile.
Examples
Creating a Server Parameter File: Examples
The following example creates a default server parameter file from a client initialization parameter file named t_init1.ora:
CREATE SPFILE 
   FROM PFILE = '$ORACLE_HOME/work/t_init1.ora';
  http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_616a.htm#2072591  
*************************************************************************************************
SQL*Plus: Release 10.1.0.3.0 - Production on Tue Mar 1 09:04:56 2005
Copyright (c) 1982, 2004, Oracle.  All rights reserved.
SQL> connect / as sysdba
Connected to an idle instance.
SQL> create spfile from pfile = '/opt/oracle/product/10.1.0/db_1/dbs';
create spfile from pfile = '/opt/oracle/product/10.1.0/db_1/dbs'
*
ERROR at line 1:
ORA-01012: not logged on
Regards,
Dawar
 
 
 
March     01, 2005 - 12:34 pm UTC 
 
 
you have to start the instance. 
 
 
 
Dawar, March     01, 2005 - 12:44 pm UTC
 
 
Tom,
My idea has also work.
create spfile$ORACLE_SID.ora  from init$ORACLE_SID.temp and 
then create init$ORACLE_SID.ora from spfile$ORACLE_SID.ora.
** strings -a init$ORACLE_SID.temp > spfile$ORACLE_SID.ora
** strings -a spfile$ORACLE_SID.ora > init$ORACLE_SID.ora
Now I can od the above process.
Thanks for telling this great trick.
Anyway Is there any limit to put SGA size?
I wonder its better to put large size for better performance.
Currently I used 296M only.
Regards,
Dawar 
 
 
how to calculate sga used currently
raaghid, March     22, 2005 - 10:35 am UTC
 
 
when the oracle server is running , how to calculate how much sga utilized.
please give a sql or link to page. 
 
March     22, 2005 - 11:13 am UTC 
 
 
v$sgastat
 
 
 
 
sql is here thanks.
Raaghid, March     23, 2005 - 9:07 am UTC
 
 
yes. I got it through this sql.
select  round(sum(bytes)/1024/1024,2) total_sga, 
round(sum(decode(name,'free memory',bytes,0))/1024/1024,2) free,
round((sum(decode(name,'free memory',bytes,0))/1024/1024)/(sum(bytes)/1024/1024)*100,2) free_per
from
v$sgastat
/
 
 
 
sga is stable
Raaghid, March     23, 2005 - 9:16 am UTC
 
 
Tom, I have checked the production server through the above sql.
since we have added memory, we have restarted the server. (normally we wont do)
In the (1st day) morning SGA was used less.. and more free. And it was increasing slowly. And now by evening it is stable ie.. around 25 % is free (sometime 24%+ sometime 25 %) for last 3 hrs or so. (+ or - some 1%)
So it means, SGA which has been set already is ok and 25% is free. Since most of the sqls could have been used by the users today from the morning, new sqls to come for parsing will be  very less. 
Anyhow, I will monitor the same for few more days. Now please confirm my understanding that 75% of currently alloted SGA is used and around 25 % is free. So no need to increase/decrease SGA. (still I will monitor for some more days before coming to final conculsion)
Note: I have NOT used ROT 1/3rd of RAM should be SGA 
 
March     23, 2005 - 9:26 am UTC 
 
 
the sga is a collect of memory pools.  25% "free" would be wasted memory, you want near 100% used ultimately without lots of reloads in the shared pool and such.
not sure what or how you are measuring this. 
 
 
 
sga size 
Raaghid, March     23, 2005 - 9:49 am UTC
 
 
ok Tom, 
If this trend (25%free) continues, then I will reduce to 80%, so it means nearly 4 or 5% will be free, so that i am not wasting any memory. pl reply 
 
March     23, 2005 - 6:01 pm UTC 
 
 
you haven't told us what you mean by "25% free" at all, so -- no comment. 
 
 
 
database creation
friend, March     23, 2005 - 2:22 pm UTC
 
 
Greetings!
Please provide suggestion on init settings as I have to create one database 20gb to support 100 users.
control_files = (/oracle/Friendprd/oradata01/Friendprd_01.ctl,
        /oracle/Friendprd/oralog01/Friendprd_02.ctl,
/oracle/Friendprd/oralog02/Friendprd_03.ctl)
background_dump_dest = /oracle/admin/Friendprd/bdump
user_dump_dest = /oracle/admin/Friendprd/udump
core_dump_dest = /oracle/admin/Friendprd/bdump
audit_file_dest = /oracle/admin/Friendprd/bdump
job_queue_processes=2
AQ_TM_PROCESSES=0
db_files = 400                                                      # MEDIUM 
db_file_multiblock_read_count = 16                                  # LARGE  
db_block_size=8192
db_block_buffers = 90000                                             # LARGE  
shared_pool_size = 300000000                                          # LARGE
log_checkpoint_interval = 10000 
processes = 100                                                     # MEDIUM 
parallel_max_servers = 5                                              # SMALL
log_buffer = 10485760
local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=hugo)(PORT=1527))'
timed_statistics = true       # if you want timed statistics
max_dump_file_size = 10240      # limit trace file size to 5 Meg each
sort_area_size=5000000
# log_archive_start = true      
# log_archive_dest = /oracle/Friendprd/oraarch
# log_archive_format = "Friendprd_%s.log"
optimizer_mode = choose 
compatible = 9.2.0
job_queue_processes=2
db_name=Friendprd
undo_tablespace=undotb1
undo_management=auto
undo_retention=300
#dblink_encrypt_login=true
sql92_security=true
Audit_trail=OS
load averages:  5.81,  6.32,  6.71                                                                                  
977 processes: 964 sleeping, 4 zombie, 2 stopped, 7 on cpu
CPU states: 55.4% idle, 33.8% user,  5.7% kernel,  5.1% iowait,  0.0% swap
Memory: 16G real, 488M free, 2364M swap in use, 7878M swap free
  PID USERNAME THR PRI NICE  SIZE   RES STATE   TIME    CPU COMMAND
22727 briosso   11   0    0   35M   10M cpu27 285.6H  6.23% java
 4453 briosso   11   0    0   34M   10M cpu28 191.7H  6.23% java
 9927 briosso   11   0    0   35M   10M cpu19 190.2H  6.22% java
23624 briosso   11   0    0   36M   13M cpu24 185.8H  6.21% java
27677 oracle    11  60    0    0K    0K cpu25  51:16  1.75% oracle
18822 oracle     1   0    0    0K    0K sleep  89:13  0.92% oracle
19804 oracle     1  59    0  640M  613M sleep   0:02  0.46% oracle
27472 oracle    14   4    0  203M   56M sleep 342:30  0.42% java
 3771 root       1  35    0   68M   22M sleep  51.8H  0.34% scopeux
20248 oracle     1   0    0 1245M 1231M sleep 631:54  0.31% oracle
19851 oracle     1   3    0 3392K 2800K cpu30   0:00  0.15% top
21597 oracle     1   1    0  629M  599M sleep  17.4H  0.14% oracle
19367 root       1   3    0 6128K 3264K sleep   0:02  0.12% boks_sshd
19874 oracle    11   4    0  641M  608M sleep   0:00  0.11% oracle
19923 oracle     1   3    0  639M  605M sleep   0:00  0.10% oracle
 
 
March     23, 2005 - 6:24 pm UTC 
 
 
size of database is almost not relevant.
what is DONE in the database is. 
 
 
 
A reader, March     23, 2005 - 4:06 pm UTC
 
 
Friend, If you are on 9i you should'nt be using 
db_block_buffers = 90000  
db_cache_size is the one, your shared_pool_size is way to much, bring it down.
I'm sure there is more to come, but that will be from Tom :-) 
 
 
Rob K, March     23, 2005 - 6:11 pm UTC
 
 
The first thing I would do is put your database in archive mode and read up on RMAN. Your 100 users will be upset if you lose your database and are unable to recover.
Rob 
 
 
database
friend, March     23, 2005 - 11:24 pm UTC
 
 
Hi Tom,
I am not sure about my settings and this database is normally for select and testing of application tool.
I know SGA setting is not correct so need your help to think in right direction.
hAVE TO REPLACE db_block_buffer with db_cache_size 
 
March     24, 2005 - 8:33 am UTC 
 
 
"for select and testing of application tool" is not "sufficient".
do you have a DBA you can consult with. 
 
 
 
what is 25%
Raaghid, March     24, 2005 - 12:04 am UTC
 
 
select  round(sum(bytes)/1024/1024,2) total_sga, 
round(sum(decode(name,'free memory',bytes,0))/1024/1024,2) free,
round((sum(decode(name,'free 
memory',bytes,0))/1024/1024)/(sum(bytes)/1024/1024)*100,2) free_per
from
v$sgastat
/
777.79     194.45   25.00
Out of 778, 194.45 is free ie. 25 %. 
If this trend continues can I reduct SGA  by 20% so that 5% will be free and no wastage of memory.
 
 
March     24, 2005 - 8:34 am UTC 
 
 
you had better look at WHAT COMPONENTS have free memory.
you wouldn't want to shrink the large pool if the java pool is the free thing and so on. 
 
 
 
 
yes valid point
Raaghid, March     24, 2005 - 9:52 am UTC
 
 
Yes. valid point. thanks 
 
 
statistics of sga
Raaghid, March     25, 2005 - 5:13 am UTC
 
 
v@sgastat
    .06 fixed_sga
 390.63 db_block_buffers
      5 log_buffer
 216.81 free memory                    shared pool
   1.05 miscellaneous                  shared pool
    .04 KGFF heap                      shared pool
    .22 State objects                  shared pool
    .02 table columns                  shared pool
    3.3 db_block_hash_buckets          shared pool
      0 KGK heap                       shared pool
      0 PLS non-lib hp                 shared pool
      0 type object de                 shared pool
    .16 log_buffer                     shared pool
     .1 ktlbk state objects            shared pool
      0 errors                         shared pool
  11.42 KQLS heap                      shared pool
    .09 long op statistics array       shared pool
      0 fixed allocation callback      shared pool
   2.08 PL/SQL MPCODE                  shared pool
    .06 branches                       shared pool
    .21 transactions                   shared pool
    .14 db_handles                     shared pool
    .05 SYSTEM PARAMETERS              shared pool
   2.15 dictionary cache               shared pool
    .01 joxlod: init h                 shared pool
      0 trigger inform                 shared pool
    .05 character set object           shared pool
   1.02 PL/SQL DIANA                   shared pool
  38.99 library cache                  shared pool
    .07 trigger defini                 shared pool
  76.55 sql area                       shared pool
    .19 processes                      shared pool
    .48 sessions                       shared pool
    .03 table definiti                 shared pool
    .08 Checkpoint queue               shared pool
    .68 event statistics per sess      shared pool
  25.94 db_block_buffers               shared pool
    .11 message pool freequeue         shared pool
Now free memory is 216mb. But how to know which of the above is how much free. pl revert
 
 
March     25, 2005 - 7:54 am UTC 
 
 
pl revert?
but it would appear your shared pool is large and you are not using much of it. 
 
 
 
A reader, May       27, 2005 - 10:09 am UTC
 
 
Tom.
As now we have sga_target & sga_max_size, when would you prefer manual sizing of sga parameters?
Thanks.
 
 
May       27, 2005 - 12:15 pm UTC 
 
 
</code>  
http://oracle.apress.com/  <code> check out the chapter on memory structures.  Basically, it only sizes bits of the SGA, not everything so keep, recycle, nk caches -- log buffers and so on -- you still do manually.
For a system that has a DBA dedicated to the care and feeding thereof, manual will probably be used for the immediate future. For the system that runs on a box in the corner that you don't have time to really look at closely, auto will rule the day.  (opinion).  I'm finding on "ok systems", the automatic is doing all right.  I haven't heard of any horror stories -- but I haven't really seen personally a big system doing it as yet.  Some time to get acceptance on it I guess.  
 
 
 
A reader, May       27, 2005 - 9:52 pm UTC
 
 
Tom,
Thanks for the response
"log buffers and so on  -- you still do manually."
could you please elaborate on the "so on"...
Thanks.. 
 
May       28, 2005 - 9:14 am UTC 
 
 
I elaborate in great detail at the apress link above, but suffice to say that only
db_cache_size, shared_pool_size, large_pool_size and java_pool_size
are auto-sga managed, the rest (which are all listed and explained in that chapter) are not.  These include log_buffer, streams_pool, db_Nk_cache_size, db_keep_cache_size, and db_recycle_cache_size. 
 
 
 
A reader, May       28, 2005 - 10:26 am UTC
 
 
Thanks. 
 
 
Hi tom
sikanthar, July      08, 2005 - 6:26 am UTC
 
 
Tom,
1.if i fail to set SGA_MAX_SIZE in init.ora what would happen to this size?is this calculated by adding all other memory parameters size!
2.what's the default value for SGA_MAX_SIZE ?
 
 
July      08, 2005 - 7:54 am UTC 
 
 
 
 
ORA-00821 resolved! 
Michael LeVan, September 21, 2005 - 1:18 pm UTC
 
 
Thanks Tom! I'm working with Oracle 10g and ran into this error. I found you by querying google and followed your thread in working with Dawar. Thanks again.  
 
 
hc_<sid>.dat
Deepak, October   19, 2005 - 6:23 am UTC
 
 
Hi Tom,
In my 10g DB I found files named hc_<sid>.dat in <ORACLE_HOME>\database folder on my W2K box. When I opened the file through text editor it did seem like a binary file containing a line  "DO NOT DELETE OR OVERWRITE THIS FILE!!!" in the begining. 
Is it used for locking SGA? 
If YES will Oracle truely lock it in memory in Windows environments (as I have read somewhere that on windows you can not guarantee locking of SGA, am I right?)?
If NO the please help me in understanding the real purpose of this file. 
 
October   19, 2005 - 7:19 am UTC 
 
 
it is a 'heartbeat' file.  It is not for locking the sga.  It is an internal undocumented file that you should not delete or overwrite ;) 
 
 
 
Increase SGA_MAX_SIZE greater than 1.7G
Nadir Pervez, November  22, 2005 - 2:18 am UTC
 
 
 I tried to increase SGA size greater than 1.7G, but i received an error i.e "ORA-27100 shared momory realm already exists."
 I then recoverd my database using previous pfile.
 Can you tell me how to increase the size of SGA greater   than 1.7G?  
 
November  22, 2005 - 8:31 am UTC 
 
 
tell us how you tried to increase your sga.  step by step.  sounds like the shutdown didn't shutdown and the shared memory segment was still there.
Need a bit of "detail", like - what you did, what os, etc.  even a version of the database would be useful.. 
 
 
 
Sizing SGA
Amitkumar D Mehta, January   28, 2006 - 2:47 am UTC
 
 
Nice to see differnet scenario.
But in ideal case, what should be the size of differed parts of SGA , how to calculate?
 
 
January   28, 2006 - 1:00 pm UTC 
 
 
If you don't really have a good idea - use the automatic SGA feature of 10g.
Else, as stated - lots of times - you need slightly more information about what, how, whatever you will be doing and how much data you'll be doing it to and how many users will be doing it and so on. 
 
 
 
A reader, February  01, 2006 - 9:07 am UTC
 
 
 
Is there any Performance Impact by Increasing Buffer Cache ?
Vivek Sharma, February  15, 2006 - 6:38 am UTC
 
 
Hi Tom,
In one of a note, I have read that "Increasing the size of SGA might degrade the performance due to buffer cache contention". I know, if I oversize my shared pool, it will degrade the performance due to shared pool latch contention and was of the opinion that though increasing buffer cache might not improve the performance but will atleast not degrade the performance of a database. Want to know your opinion on this.
Thanks and Regards
Vivek 
 
February  15, 2006 - 9:35 am UTC 
 
 
I do not agree with the diagnoses so much (as far as 'increasing the shared pool will increase latch contention', or 'due to buffer cache contention')
it is true that oversizing your SGA can lead to 
a) better performance
b) the same performance
c) incredibly bad performance
but, can you point us to something you have read so we can see the point being made in context? 
 
 
 
Performance degradation due to oversized Buffer Cache
Vivek Sharma, February  15, 2006 - 1:28 pm UTC
 
 
Hi Tom,
Thanks for your reply. In my question (above), I have raised a doubt over an statement passed by one of the DBA that "an oversized SGA might degrade the performance due to buffer cache contention". The DBA has specifically said about the buffer cache contention. Hence, my question was that will an oversized buffer cache degrade the performance ? I feel that as I gradually increase the buffer cache, at one point of time, I will not see any performance improvement but will also not observe any degradation. Am I correct ?
Regards
Vivek 
 
February  15, 2006 - 2:07 pm UTC 
 
 
it will take longer to discover a block isn't present in the cache.
the buffer cache will be able to hold many more dirty blocks than before, shutdown might be affected a lot by that.  startup after an instance failure as well (can be tuned by making dbwr be aggressive keeping the cache clean)
offlining things could take much longer, truncates as well.  things that need to process the buffer cache will be affected by a huge cache.
it is unlikely to be the cause of buffer cache contention (we create more lists as the cache gets larger) but it is one of the reasons we have the option for 32k blocks (to reduce the number of blocks being managed).  The more you got, the more you got to manage.
Bigger is not always better.  Not everything is positively impacted by larger buffer caches.   
 
 
 
SGA_TARGET  in 10g R2
A reader, May       25, 2006 - 4:25 pm UTC
 
 
Hi Tom.
In my environment I have set SGA_TARGET to 4 GB and SGA_MAX_SIZE to 6 GB.  I have these questions:
1. From a monitoring prospective, how will I be able to tell if SGA_TARGET is no longer sufficient and needs to be increased?  Is there a query to determine that?  I know that AMM takes from the buffer cache to allocate to the other pools dynamically, but I wan to proactively monitor for a time when SGA_TARGET is no longer sufficient and I am wondering how to do so.
2. What is the recommended gap (or percentage of difference) between SGA_TARGET and SGA_MAX_SIZE?  Should both parameters be set to the same value initially and if not, why?  I understand that SGA_TARGET can be adjusted dynamically by the DBA and SGA_MAX_SIZE requires a reboot.
Thanks for any advice. 
 
May       25, 2006 - 6:01 pm UTC 
 
 
1) statspack or AWR and the advisors will be useful to tell you if you could benefit from the various pools being larger.
2) none.  There is no such thing as a "recommended gap".  You are simply telling us 
a) how large the sga should be right now
b) how big you would like to have the flexibility to grow it to without shutting down 
 
 
 
Can you elaborate more ...
A reader, May       26, 2006 - 5:41 am UTC
 
 
Can you elaborate more on my first question?
I am looking for some query I can schedule to run and email me if the SGA_TARGET need to be larger.  I am using AWR through Enterprise manager.
Thanks. 
 
May       26, 2006 - 8:53 am UTC 
 
 
Right after you give me the indisputable logic, I'll show you how to email it.
For me, this is a decision YOU make based on YOUR system since YOU know your memory sizes (how much ram you actually have) and YOU would be reviewing the AWR advisories from time to time to evaluate if YOU would benefit from a larger sga_target. 
 
 
 
A reader
A reader, May       26, 2006 - 10:05 am UTC
 
 
Since AMM takes from the buffer cache to allocate to the other pools, can I say that if my buffer cache falls below a certain amount, the SGA_TARGET needs to be adjusted? 
 
May       27, 2006 - 9:20 pm UTC 
 
 
No, I cannot say that, you cannot say that.  
Tell me, what magical number would that be?
And what if you have no more physical memory to give to the SGA ?  
Look - there are many variables here, if you want it all automatic, give ALL FREE MEMORY on your machine to the SGA and be done with it.  No more monitoring, no more thinking about how it could be, should be, would be used.
Set the PGA aggregate target and the SGA target to be a tad less than physical memory on the machine and you are done. 
 
 
 
SGA Memory Settings
Tim, September 20, 2006 - 3:31 pm UTC
 
 
We are adding another 4GB of physical memory to our database server and allocating 3GB of this to the recycle pool.  Oracle Server 9.2.0.4.  OLAP application.
Under consideration is to also lock the SGA into memory.
Could you explain (or direct to appropriate reference) why or why not we would want to lock the SGA into memory?  This is a concept I am not familiar with - and your guidance would be appreciated here.
Thanks. 
 
September 20, 2006 - 3:46 pm UTC 
 
 
well, locking the sga into memory prevents portions of it from being paged/swapped out.
which would happen if you exceed real physical memory on the machine
which means you made the sga too large for your machine
which means to me - that you really don't want to lock the sga, you want to size the sga and pga aggregate target for your physical ram. 
 
 
 
SGA Memory Settings
Tim, September 20, 2006 - 3:39 pm UTC
 
 
BTW - With regard to above post - we are running AIX V 5.2. 
 
 
unswappable SGA
Mike, September 21, 2006 - 3:48 am UTC
 
 
We were getting parts of our SGA swapped, causing all kinds of havoc--10gR1 on Red Hat Enterprise Linux 3/AMD64.  There was lots of memory, but it the OS was greedily keeping it in its filesystem cache.
Rather than trying to teach Linux to be less "swappy", we pinned the SGA into memory by enabling hugepages.  We now have 0 bytes of swap used--even after a subsequent SGA size increase--and are loving life again.
Tom's your-SGA-is-too-big-if-you-swap should be taken as doctrine, not dogma. 
 
 
About AMM
CT, October   09, 2006 - 6:21 pm UTC
 
 
Tom, I'd like to post this as a new topic, but since you're "Too Busy" for me (story of my life ;) I'll post a comment here.
What are your thoughts about AMM?  Since I've changed companies, I now have had a chance to look at it and I'm a little (maybe more than a little suprised) about a couple of things. 
First the stats of the box:
Win 2003 Server 64-bit
4 3.6G Dual Core XEON Processors
32G RAM
We have the max sga size set to ~20G and the Total SGA Size set to ~15G.  Oracle has sized the Shared Pool to ~5.1G (!) and the buffer cache to ~9G.  With Oracle automatically reducing the buffer cache and increasing the Shared Pool, this seems counter intuitive to my tuning (and reading your books) experience.  Isn't a 5.1G shared pool incredibly crazy?  We have several legacy apps on this db that were recently upgraded and they don't use bind variables which I think may be causing Oracle to keep upsizing the shared pool.  
Your thoughts? 
 
October   09, 2006 - 9:28 pm UTC 
 
 
sounds like you haven't a bind variable in sight, am I right - do you have a massively bad hard parse problem here?
Ahh, I see that now, you do.  Yes, that is what auto memory management will tend to do over time, your shared pool is TRASHED, it says "instead of 4031, we'll steal from the cache"
You can set minimums for the various caches if you like - things that start with A work for many to most people, but not in every single case.  When you have a disaster of a system - as you do (no binds, ugh), you might have to do somethings "yourself" 
 
 
 
Tools
A reader, October   10, 2006 - 1:23 pm UTC
 
 
"...you might have to do somethings "yourself" "
That made me laugh.  As if I'd be happy letting any tool determine how my db runs.  I much prefer controlling as many options as I can and using tools to point me in a (sometimes not even the right) direction.
 
 
 
it helps but have one doubt
RK, December  27, 2006 - 5:30 pm UTC
 
 
I have one of the database. Initially both sga_target and sga_max_size set to 800m. Then I set sga_target to 712m then check for sizes and they are showing 
sga_max_size=800m
sga_target=712m
but when I select sum(value)/1024/1024 from v$sga; showing 800m instead of 712m. Why is this showing like this?
SQL> show parameter sga;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 800M
sga_target                           big integer 800M
SQL> alter system set sga_target=712m scope=both;
System altered.
SQL> show parameter sga;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 800M
sga_target                           big integer 712M
SQL> select sum(value)/1024/1024 from v$sga;
SUM(VALUE)/1024/1024
--------------------
                 800
Please let me know why this is like this?
Thanks 
December  28, 2006 - 9:41 am UTC 
 
 
because the max size will always show there - we don't use up to max size, we use up to target - the OS will not have paged in the memory we are not using - it is fine. 
 
 
Auto SGA
Deepak, September 05, 2007 - 2:10 pm UTC
 
 
Hi Tom,
Have few queries on Auto SGA(ASMM). Considering that we have set ASMM for our instance. 
 
> When more memory requered in a particular pool which pool Oracle does choose to get the memory from?
> Is there any priorities associated in pulling out memory from pools?
> Why should we set the minimum values knowing that Oracle can adjust them as and when required?
 
Please help me in understanding the concepts. 
September 05, 2007 - 5:43 pm UTC 
 
 
which pool?  whichever one we want, it is automatic, it decides and its decisions will vary from situation to situation, release to release.
you would set minimums because you want to, if you know the best 'starting' point, it is a way for you to tell us. 
 
 
how much SGA is too much
David, September 06, 2007 - 4:21 pm UTC
 
 
Tom,
I have over a dozen production databases (10.2.0.3) on 64-bit RedHat Linux AS 4.0 with 16 GB RAM. With Automatic Memeory Management, I would like to use as much as 14 GB for SGA_TARGET, based on the rule of "the more memory the better." However, I also heard people saying that more SGA could have negative performance impact. I am kind of puzzeled. Could you please share your thought in this regard?
Thanks,
David 
September 11, 2007 - 8:30 am UTC 
 
 
sure, you use 14gb for the SGA leaving about 1 to 1.5 gb for the PGA.
if you need lots more PGA memory (process memory for hashing and sorting), you have just done the wrong thing.
It is impossible to give you a single answer - I can tell you 14gb is correct and give you a 'for example', I can tell you 14gb is very wrong (and give you a for example), I can tell you it matters not whether you use 14gb or some other value and .....
 
 
 
Buffer Exterminate
Deepak, September 11, 2007 - 11:16 am UTC
 
 
Hi Tom,
In our database (10g/Solaris 9) the major wait event is "Buffer Exterminate". Ours is an OLTP database. We have set Auto SGA. As per metalink this wait event happens when Oracle tries to pull memory out of some pool and allocates it to something else. Even after increasing SGA_TARGET we are unable to get rid of it.
Can you please describe how to reduce this wait event? Should we go for manual SGA?
 
September 15, 2007 - 3:40 pm UTC 
 
 
one will always have a major wait event.  Always.  No matter what.
Now, is your major wait event actually causing a performance related problem - have you determined that your applications are suffering from this.
I ask, because I have had more than one time where people say "always we see X and Y as our top two wait events, how can we fix that", only to discover they were waiting for like 20 seconds in a 15 minute window across dozens of users (eg: so what).
Basically, if you are seeing this a lot and it does account for a HUGE amount of time, it means your SGA is resizing frequently. My first thought is "you have a hard parse problem" (it always comes back to binding).  So, do you? 
 
 
possible negative performance impact with big SGA
olivier bernhard, September 11, 2007 - 4:07 pm UTC
 
 
Hello David i guess people saying that you could run into performance issues using very big SGA are refering to possible Latch bottleneck that may/could occure in case it takes a long time to scan a chain of buffers in the database buffer cache. Since the number of latches is limited then the bigger SGA you have the longer the chains of buffers you get, the longer it takes to scan it, the longer your process is holding the dedicated latch. but this is just theory. I think what you have to do is dedicating the amount of memory you think you need, and then monitor your system. At the same time you should not forget that your disk probably cost much more than your memory (so why not take advantage of them ...) and that doing everything in memory does not mean your system goes faster. regards, Olivier  
 
re: Buffer Exterminate   
jerry ma, September 13, 2007 - 4:37 am UTC
 
 
"more memroy more better" is not always true.
to manage so huge memory will add additonal management overhead to db system. so then , more potetial latch event occur.
maybe, as far as huge memory,  memeroy database such as TimesTen will be more fit. 
 
 v$sga_dynamic_components says 1.2GB?
A reader, October   01, 2007 - 2:38 pm UTC
 
 
Tom I remember an old post of yours (which I couldn't find)  where you described a problem with a shared pool that was too big.  Every night, staff was paid to flush the pool at 3am.  You had them drop the pool to 70MB and everything was fine.  I have another situation where the pool seems awfully large to me, 1.2GB.  I questioned it and was told they had gotten this from  v$sga_dynamic_components.   This doesn't "magically" tell you what the pool should be does it? Doesn't it base it on other settings such as sga_target?  
This is considered a 10G recommendation - 
SQL> select component, current_size, min_size from  v$sga_dynamic_components;
COMPONENT                                                        CURRENT_SIZE
---------------------------------------------------------------- ------------
  MIN_SIZE
----------
shared pool                                                        1342177280
1342177280
 
 
October   03, 2007 - 4:30 pm UTC 
 
 
that is showing what size it is now.
if they just set sga target, oracle decided to make it that size.
if they set the shared_pool_size, it is what they told us to make it. 
 
 
A reader
Reader, October   05, 2007 - 2:47 pm UTC
 
 
Recently I was given the responsibility to manage one 10g database which someone else configured. It is running in manual memory management mode so shared pool, java pool, large pool is set manually. DB_CACHE_SIZE is set to 0.
Shared pool is 12% of sga, large pool is set to .3% and java pool is set to .6%. Rest 86% shows up as buffer cache. 
What is this part of sga and what is it used for? What would be oracle using for db_cache_size since it is set to 0?
Thank you for all the wonderful tips that you share on this website.
 
 
Sizing of SGA
azzzz, February  14, 2008 - 5:28 pm UTC
 
 
Hi Tom,
We are runnning oracle 10.1.0.5 on windows 2000 sp4.
1). When I query sql> sho parameters sga; I got SGA_MAX_SIZE as 1784 M and SGA_TARGET = 0
but when I use 
select  round(sum(bytes)/1024/1024,2) total_sga, 
round(sum(decode(name,'free memory',bytes,0))/1024/1024,2) free,round((sum(decode(name,'free memory',bytes,0))/1024/1024)/(sum(bytes)/1024/1024)*100,2) free_per from v$sgastat
it shows the TOTAL_SGA as 1814.37M
Why is this difference.
2). Is it not required to set SGA_TARGET. Is it enough to set SGA_MAX_SIZE
3). When I use select * from v$sgastat it shows:
SHARED_POOL_SIZE of 111 MB free
LARGE_POOL_SIZE of 117 MB free
JAVA_POOL_SIZE of 124 MB free.
If ORACLE says it will dynamically allot the memory, why is it not allocating the free memory to BUFFER_CACHE which needs some memory.
Can you please tell me how can I change the BUFFER_CACHE size dynamically with out shutting down the database.
Thanks in advance.
 
February  15, 2008 - 7:55 am UTC 
 
 
1) because you disabled automatic tuning of the SGA (sga_target=0), the other parameters (shared pool size, java pool size, etc) are used to size the sga.
the sga is also allocated in granules and all things are rounded UP to be a multiple of the granule size - which is 4, 8, or 16mb depending on platform and other considerations.
2) read the documentation on these parameters, you have disabled automatic memory tuning by setting the sga_target to 0 
 
 
Sizing of SGA
azzzz, February  15, 2008 - 10:20 am UTC
 
 
Hi Tom,
Do you mean that the parameters were set manually. If so when I do 
SQL> sho sga
Total System Global Area 1870659584 bytes
Fixed Size                   789220 bytes
Variable Size             632681756 bytes
Database Buffers         1228800000 bytes
Redo Buffers                8388608 bytes
and when I do
SQL> sho parameter db_
db_block_buffers     integer     150000
db_cache_size        big integer 0
If it is manually set then why it is showing db_cache_size as 0
If my understanding is right is it allocating the various pool sizes from the parameter sga_max_size which is set to 
1784 MB for the first time when databases is started and since the ASSM is set to 0, it is not dynamically resizing according to the requirements.
Thanks
 
 
February  17, 2008 - 6:59 am UTC 
 
 
(did  you think about reading the reference guide about parameters?  they are documented.... just a thought)
You set db_block_buffers (the old fashioned way to do it)
You did not set db-cache_size (the way to do it in current releases)
therefore, the cache is being set by taking db_block_buffers * block_size and using that as the basis for the buffer cache size.
You are using 100% manual memory management.  Your understanding should be "we are not allocating the various pool sizes - YOU ARE"
ASSM - that is automatic segment space management, a replacement for freelist and freelist groups - nothing to do with memory (SGA) allocations.
Goto your init.ora or your spfile.  See what you are setting, that is what is being used (after rounding off to granule sizes - 4/8/16mb depending on various factors) 
 
 
Overview of the parameters in the init.ora file
Manoj thakur, March     24, 2008 - 6:23 am UTC
 
 
Suppose my database size is 6.5 GB,Hard Disk size=144 GB,Ram Size=4 GB.I have set some parameters in the init.ora file.Could you please check and tell whether the following parameters are correct in the init.ora
SGA_MAX_SIZE:= 1536 MB
Could you please tell me whether the following configuration is correct
shared_pool_size=400 MB
shared_pool_reserved_size=40 MB
pga_aggregate_target=200 MB
sort_area_size=50 Mb
sort_area_retained_size=5 MB
db_block_size=8192
db_cache_size=500 Mb
SGA_max_size=1536 MB
sessions=1000
open_cursors=500
processess=800
Can you please check and tell whether the following parameters are correct 
March     24, 2008 - 11:25 am UTC 
 
 
if the database starts up, they are all correct - as in syntactically correct.
since you have such a tiny database and machine, you probably just want 'auto everything', so just set the sga_size and pga_aggregrate target (I'll presume windows :( - and 32bit at that - make sure they two of those are well under 1.8 gb when summed)
lose the shared pool settings
lose the sort area stuff - unless you are using shared server in 9i - which I doubt
lose the db_cache_size
let everything else default unless you have good reason to set it otherwise (eg: I seriously doubt this machine will get anywhere NEAR 800 concurrent sessions) 
 
 
Way of setting SGA in 10G
Dhairyasheel Ttawde, March     31, 2008 - 2:49 am UTC
 
 
Hi,
Here's what I do to size up the sga.
when the system is first installed with apps loaded et all.
We set the sga to approx 600mb. i.e. setting sga_target & sga_max_size to the same value. We run the apps a few times.
Then we scale up the two parameters sga_max_size and sga_target to say 900M.
When we do this Oracle automatically scales up the buffer cache, shared_pool allotments according to the previous load that the apps generated.
When I say scales up, I mean that it may decrease the value
of shared_pool and increase buffer_cache if it feels so.
I believe here there is a connection between the AWR & the advisors running in DB.
Also as a rule of thumb, re-sizing sga or other pools is the last resort for us. Usually dramatic improvements are seen by tuning the app code.
Am I right Tom?
 
March     31, 2008 - 9:33 am UTC 
 
 
absolutely wrong.
Except for: "Usually dramatic improvements are seen by tuning the app code."
if you have a linux server with 512mb of ram and you set the sga to 600mb, you have done wrong.
The size of the SGA and PGA has to be a function of the amount of real memory installed - in addition to other things. 
 
 
Additional Technical info on previous comment.
Dhairyasheel Ttawde, April     01, 2008 - 12:32 am UTC
 
 
Hi Tom,
Sorry, forgot to mention that the 600m SGA setting was a default we used to set since our production boxes were minimum 4GB RAM & the 600m value was derived by our previous experiences with tuning our apps.
In One particular instance, We were running the server with 4gb RAM and 600m SGA. As a last resort we increased the SGA size to 1GB by setting the sga_target & sga_max_size to the same values. On restarting the instance we found that Oracle increased the value of buffer_cache (compared to previous value) & decreased the value of shared_pool (compared to previous value).
also the parameters like 
db_cache_size, shared_pool_size were set to 0 (before and after the sga scale up)to enable automatic memory tuning.
The decrease of shared_pool_size was astounding as we had never seen this behaviour in 8i or 9i.
So my understanding is that when the SGA size was scaled up, Oracle referred the AWR statistics to resize the pools accordingly.
Is that whats happening here?
 
April     01, 2008 - 9:23 am UTC 
 
 
If I had 4gb of ram, 600mb would not have been my starting point, probably closer to 2gb at least.
and since sga memory management wasn't available in 8i or 9i, it should not have been "astounding", it could never have happened in the past.
and if the shared pool needed to be made larger, it would have been - over time, that is the "auto" bit.... 
 
 
What forms the basis for Auto Tuning
Dhairyasheel Ttawde, April     01, 2008 - 9:52 am UTC
 
 
HI Tom, 
Thanks for the answer. 
The 600m sga setting for a 4gb RAM server, is something born out of practice of running/tuning the apps to their limit without looking at oracle init parameters. 
Also I can understand the auto tuning of the memory pools,
but what I want to know is what data inside oracle forms the basis from which Oracle derives the intelligence of howmuch to scale up or scale down the pools.
From my little understanding of 10G I believe its the workload repository & ASH. is it so?
p.s - Any plans on giving seminar's in India ? from the kind of fan following you have here, you will probably have to book an entire stadium.
Regards. 
April     01, 2008 - 10:09 am UTC 
 
 
... but what I want to know is what data inside oracle forms the basis from which  ...
it is the information captured into ash and awr and other metrics, yes.
 
 
 
Different SGA_TARGET betweem RAC nodes
A Reader, May       02, 2008 - 12:46 am UTC
 
 
Hi Tom,
Is it possible to have different sizes for SGA_TARGET between RAC nodes?
node-1 has 32G as physical memory and I want to set SGA_TARGET=20G
node-2 has 60G as physical memory and I want to set SGA_TARGET=40G
node-3 has 80G of physical memory and I want to set SGA_TARGET=50G
How can I set this? Can I set this by bouncing one instance at a time instead of re-starting entire RAC-database?
This is for 10gRel2 on Solaris10. At this SGA_TARGET & SGA_MAX_SIZE is set to 15G with ASMM enabled.
Thank you.
 
May       02, 2008 - 7:14 am UTC 
 
 
yes it is
yes you can
the question is "should I" - it is not really a good idea to have imbalances like this - I'd think about spreading the ram out so that each has about 60gb.
"how" depends on "how" you are setting parameters, hopefully with a stored parameter file.
see the alter system command, the "sid=" bit - you can set individual parameters that way. 
 
 
Different SGA_TARGET betweem RAC nodes
A Reader, May       02, 2008 - 11:10 am UTC
 
 
Hi Tom,
Thanks for you reply. Appreciate it!
The reason why we are planning to have imbalance in sga_target it that we have 5 nodes cluster and out of which 2 nodes are powerful compare to other 3.
So we do load balancing via services we created and using resource manager where we do heavy lifting on 2 powerful nodes versus quick queries and transactions on other 3.
ADDM reports are always recommending on increasing sga_target on those 2 nodes where we do heavy lifting (bulk processing).
Now 3 nodes are maxed out with 32G of physical memory so we cannot add more memory, but we would like to make use other 2 nodes where we 60G and 80G of memory resp.
Yes, we use SPFILE and we can use "SID=" to set individual sga_target at instance level. But what about SGA_MAX_SIZE parameter? Can we set that at SID level as well or is it set globally (same for all instances in cluster)?
Last question: After making change to SGA_TARGET parameter (and may be SGA_MAX_SIZE) in SPFILE for each SID can we re-start one instance at a time or we have to re-start Database (all instances at once)?
We would like to do this without downtime if possible.
I'm asking lot of questions here as I couldn't find clear answer on having imbalancing in terms of SGA between RAC nodes in any oracle docs. 
Appreciate your help and thanks for taking some time out from your busy schedule.
 
 
Different SGA_TARGET betweem RAC nodes
A Reader, May       02, 2008 - 2:59 pm UTC
 
 
Hi Tom,
Thank you for your quick and prompt reply.
We've set SGA_MAX_SIZE to 15G for all instances.
So, we will change sga_max_size at instance level and bounce one instance at a time.
Then we will be able to change sga_target dynamically.
Thanks again!
 
May       02, 2008 - 3:14 pm UTC 
 
 
well, you should set the max and the target together first, no reason to dynamically resize if you are going to have an outage anyway. 
 
 
how to solve ORA:00093
mukesh, August    06, 2008 - 8:44 am UTC
 
 
hi tom
      i am fetching problem that _shared_pool_reserved_min_alloc must be between 4000 and 0 error can u plz suggest me all parameter size in init.ora 
i will give u my database configuration
   Database size = 11GB
   RAM = 6GB
   waiting for u r reply ... reply as early as possible .....
    *  db_block_buffers,
    * db_block_size,
    * db_cache_size,
    * db_keep_cache_size,
    * db_recycle_cache_size,
    * java_pool_size.
    * large_pool_size,
    * log_buffer,
    * shared_pool_size,
    * streams_pool_size,  
August    06, 2008 - 9:06 am UTC 
 
 
"U" is not available.
"PLZ" - German postal codes? I do not understand.
"R" - not sure what R is either.  
Would you use words in the future, we are not talking over our mobile phones.
Why are you setting an underscore parameter.
And you have given us no configuration information whatsoever, you've listed some parameters - no values and definitely not the value in question! 
 
 
oracle memory parameters
Thakur Manoj, February  19, 2009 - 10:05 am UTC
 
 
Dear Sir
I have an unpatched oracle version 9.2.0.1.0.I have default memory parameters being set in Oracle because of which I am facing performance issue in the application.I have 8 GB Ram size ,OS is Windows 2003 Server R2 Enterprise Edition.The application is made in VB.net and ASP.net  through which we are accessing the application through web.In my application there are lot of tables which are getting inserted,updated and deleted through the procedure.The application is a risk scorer application.Whenever the borrower comes to the bank for the loan every borrower is assigned the rating as per basel-11 awareness.Now My memory is 8GB Ram .It is a dedicated server mechanism and not shared server mechanism.
I am setting Oracle parameters for better performance as
SGA_Max_size=3.5 GB(3670016 Bytes)
db_cache_size=1 GB
shared_pool_size=1 GB
pga_aggregrate_target=1.5 Gb
log_buffer=20 MB(20971520 Bytes)
Do you think the parameters that I have set is correct ?
What could be my Java Pool Parameters and Large pool parameters since there in no Java being used in the application?
Appreciate your urgent reply on this sir.
 
February  19, 2009 - 1:40 pm UTC 
 
 
if you are 64bit, that looks ok.
Use the advisors that report their output in a statspack report to fine tune.
Take a snapshot during your peak workload
Wait 15 minutes
Take another snapshot
Wait 15 minutes
repeat a couple of times
Generate the reports and see what advice there is for sizing your shared pool and buffer cache. 
 
 
oracle memory parameters
Thakur Manoj, February  19, 2009 - 10:10 am UTC
 
 
Dear sir
Also would like to tell you that there is a huge data in Lakhs coming through the Interface getting inserted in main tabels,interface tables and audit tables when we click on the save button through the procedure being called after EOD.
Well let me also tell you that this is a Bank's data after proposal getting sanctioned for the Loan purpose.
So Request you to please help me in this above issue.Please suggest me the correct parameters for the above issue.Well let me also tell you that this is not the OLTP Environment.
Appreciate your help on the below.
Regards 
 
oracle memory parameters
Thakur Manoj, February  20, 2009 - 12:42 am UTC
 
 
Dear Sir
Thanks for the reply
As you said if it is a 64 bit the memory parameters looks ok.but let me tell yo u that this is a 32 bit environment.
Appreciate your urgent reply on this sir
Regards
 
February  21, 2009 - 8:49 pm UTC 
 
 
...
I am setting Oracle parameters for better performance as
SGA_Max_size=3.5 GB(3670016 Bytes)
db_cache_size=1 GB
shared_pool_size=1 GB
pga_aggregrate_target=1.5 Gb
log_buffer=20 MB(20971520 Bytes)
.......
I disagree with you, you would not have 2gb and a max size of 3.5gb for the sga (plus 1.5 gb of pga which takes away from the max sga size on windows 32bit)
are you sure 
a) you have SET these parameters
b) you are 32bit
if you set some 'magic' parameters, you can get a little bit more sga, but it is going to be about 1.8gb out of the box.
32bit is so lame, your memory settings are far too large for 32bit. 
 
 
Oracle Parameters
Thakur Manoj, February  24, 2009 - 4:20 am UTC
 
 
Dear Sir
What if I set
SGA_MAX_SIZE=3.2 GB
db_cache_size=1.2 GB
shared_pool_size=1.2GB
pga_aggregrate_target=800 MB
log_buffer=5 M
optimizer_index_caching = 10    
optimizer_index_cost_adj  =30
_always_semi_join =    off
_always_anti_join =    off
PROCESSESS  =  800
OPEN_CURSORS =   2000
DB_FILE_MULTIBLOCK_READ_COUNT = 16
I think these would be the parameters that would improve my performance for 32 bit.
Appreciate your urgent reply on the same.
 
February  24, 2009 - 6:05 am UTC 
 
 
laughing out loud
... I think these would be the parameters that would improve my performance for 32 
bit.
....
one question for you:  why?
that is urgent, reply soon.
we've already discussed how on 32 bit windows, in most cases you are limited to a process size of 1.7/1.8gb, you have blown that out of the water, that instance will likely not start. 
 
 
Oracle Parameters
Thakur Manoj, February  25, 2009 - 12:47 am UTC
 
 
Dear Sir
Then what could be the possible SGA_MAX_SIZE for 8 GB Ram,db_cache_size,shared_pool_size,and pga_aggregrate_target for better performance of our application on 32 bit windows platform.Since It is been told that 20 % of the Ram goes to Windows 2003 server Enterprise edition.
Can you suggest me suitable parameters for better performances
Appreciate your urgent reply on the same 
February  25, 2009 - 6:35 am UTC 
 
 
what is up with the "urgent", urgent means "emergency, life or death".  This is not urgent - my reply certainly won't be urgent.
You have 32bits, you are probably limited to about 1.7/1.8gb of ram.  A single process in 32bits cannot really address more than that in windows.  You could put 100gb of ram in that machine - it would change nothing.
So, unless you have set special parameters in the booting of the machine (the /3gb switch for example), you are limited to 1.8ish GB of memory for the SGA and PGA.  If you have the /3gb stuff - maybe 3gb.
So, understand what you are able to address (your job, you learn this - ask your system administrator, your windows expert on site) and then set the memory parameters to be LESS than that maximum imposed by the 32bit-ness you are living with. 
http://www.mydatabasesupport.com/forums/oracle-server/174755-2gb-limit-memory-oracle-windows-32-bit.html  
 
 
 
Oracle Parameters
Thakur Manoj, February  25, 2009 - 12:50 am UTC
 
 
Dear Sir
What could be the possible parameters for 8GB Ram on Windows 2003 Server Enterprise Edition.What could be the SGA_MAX_SIZE,SHARED_POOL_SIZE,JAVA_POOL_SIZE,DB_CACHE_SIZE,PGA_AGGREGRATE_TARGET FOR 32 BIT WINDOWS PLATFORM
THIS IS A DEDICATED SERVER ENVIRONMENT FOR BETTER PERFORMANCE.pLEASE SUGGEST WHAT COULD BE MY SGA_MAX_SIZE,SHARED_POOL_SIZE,DB_CACHE_SIZE,PGA_AGGREGRATE_TARGET FOR BETTER PERFORMANCE
Appreciate your urgent reply on the same?
Regards 
 
SIZE of SHARED POOL memory in SGA.
Rajeshwaran, Jeyabal, July      17, 2009 - 9:36 am UTC
 
 
Tom,
   I have a doubt regarding SHARED POOL Memory in SGA.
   The information stored in ORACLE SGA Memory is 
   (i) Database Buffer
   (ii) Redo Log Buffer
   (iii) Shared Pool memory
   
rajesh@IRADSDB> SELECT NVL(NAME,'TOTAL_SIZE') AS NAME,sum(ROUND(((VALUE/1024)/1024),2)) AS SIZE_MB
  2  FROM V$SGA
  3  GROUP BY ROLLUP(NAME)
  4  /
NAME                              SIZE_MB
------------------------------ ----------
Database Buffers                      420
Fixed Size                           1.19
Redo Buffers                          6.8
Variable Size                         156
TOTAL_SIZE                         583.99
From the abouve Query 
  a) Total SGA size is 583.99 MB 
  b) Database Buffer Size in SGA is 420 MB
  c) Redo Buffer size in SGA is 6.8 MB  
Please correct me if i am wrong.  
Questions
   1) What does the VARIABLE SIZE & FIXED SIZE Values refers?
   2) How to find the Size of SHARED POOL memory?
Thanks,
Rajesh.    
 
July      24, 2009 - 8:32 am UTC 
 
 
<quote src=Expert Oracle Database Architecture>
Fixed SGA
The fixed SGA is a component of the SGA that varies in size from platform to platform and release to release. It is "compiled" into the Oracle binary itself at installation time (hence the name "fixed"). The fixed SGA contains a set of variables that point to the other components of the SGA, and variables that contain the values of various parameters. The size of the fixed SGA is something over which we have no control, and it is generally very small. Think of this area as a `bootstrap¿ section of the SGA, something Oracle uses internally to find the other bits and pieces of the SGA.
</quote>
the variable part is everything else that isn't the buffer cache, the fixed size, the redo buffers - it includes things like the shared pool, large pool, java pool, etc.
ops$tkyte%ORA10GR2> select pool, sum(bytes) from v$sgastat where pool is not null group by pool order by pool;
POOL         SUM(BYTES)
------------ ----------
java pool      16777216
large pool     16777216
shared pool   268440148
 
 
 
 
sga_Target vs sga_max_size
A reader, November  02, 2009 - 1:16 am UTC
 
 
hi tom,
i have read the meaning of sga_Target and sga_max_size at oracle definietion.
i also understand that altering sga_Target does not require a db bounce but alter sga_max_size will require db bounce.
but is that the only reason to leave a buffer between sga_target and sga_max_size ? so that there can be growth ?
q1) is any there other reasons why to set
sga_Target < sga_max_size ? why cant we just give all we have in sga_max_size to sga_target ?
if sga_max_size is preallocated memory, then wouldnt we be wasting that amount of memory ?
e.g sga_max_size = 1000mb (pre-allocated ?)
 sga_Target = 800mb
hope to hear your advice soon
rgds,
Noob
 
November  09, 2009 - 12:11 pm UTC 
 
 
... but is that the only reason to leave a buffer between sga_target and 
sga_max_size ? so that there can be growth ?
 ...
yes.
q1) because you might need the memory for something else - like your pga - during the day and at night you want to configure differently (eg: during the day, bigger pga, smaller sga - at night - smaller pga bigger sga)
it is reserved, but not touched memory, the OS will not have it physically in ram if you are not using it.
 
 
 
Shared Pool Percent of SGA Greater then Buffer Cache
Jim Cox, November  12, 2009 - 2:07 pm UTC
 
 
Hi Tom
I am using ASSM in 10G and just increaed my SGA from 4GB to 8GB and let Oracle set the other pools and buffer cache. I noticed that the Shared Pool is using 57% of SGA and Buffer Cache is using 40%. I know Oracle will adjust the pools on what it decides is best, so do I need to worry about the Shared Pool getting so big ?
Thanks
Jim 
November  15, 2009 - 2:18 pm UTC 
 
 
sounds like you have a bind variable problem there - do you? 
 
 
Possible Bind Variable Issue
Jim Cox, November  19, 2009 - 5:16 pm UTC
 
 
Hi Tom
May be, I have no control over the code as it is supplied by the vendor. Any advice on how to check ?  Same code was running in Oracle 9i, but I was setting my own pools. You had written something at the time about shared_pool and that it should not be very high because that would be an indicator that bind variables were probably not being used and that setting the shared_pool higher would be masking the problem.  Forgot the exact article.
Thanks
Jim  
November  23, 2009 - 3:53 pm UTC 
 
 
 
 
Thanks For The Info
Jim, December  02, 2009 - 4:19 pm UTC
 
 
Just a thanks Tom
I will take a look see 
 
Script Output Generated
Jim, December  03, 2009 - 10:45 am UTC
 
 
Hi Tom,
ran the script you pointed me to and it returned 28 sql statements with a range of counts from 102-787. Doesn't seem that good to me. I wanted to ask if there was some particular reason you wrote the script with having > 100 ?
Was that just arbitrary ?
I guess my only alternative is to submit the sql list to the vendor and see waht they say.
Thanks Again 
December  04, 2009 - 4:05 pm UTC 
 
 
100 was arbitrary, a good place to start.  fix those and then lower 100.
... I guess my only alternative is to submit the sql list to the vendor and see 
waht they say. ..
or figure out where in the application this sql is generated and then go to that part of the application and try to sql inject it - to break it.  Then you can go to the vendor and say "if you do not use binds, right now, for everything that should - you have a security bug, a big one - and here is my example"
 
 
 
SGA_MAX_SIZE in 9i
Arindam, January   20, 2010 - 3:28 am UTC
 
 
Hi Tom,
I am facing a problem while reducing the SGA MAX size. Here are the steps I am using:
 
1)       show sga
Total System Global Area  590317328 bytes ----- i.e. sga_max_size is 562 MB
Fixed Size                         730896 bytes
Variable Size                     117440512 bytes
Database Buffers               471859200 bytes
Redo Buffers                      286720 bytes
2)       alter system set sga_max_size=350m scope=spfile;
3)       shutdown
4)       startup
Then the sga_max_size is only showing the same with fixed size reduced only few bytes. But when I create pfile from spfile, it is showing me sga_max_size= 367001600. i.e. 350m itself. I cannot figure out where the problem is.
Can you please suggest me a way out please?
 
January   20, 2010 - 11:30 am UTC 
 
 
first, you do realize that 350mb is 350*1024*1024 bytes right?
ops$tkyte%ORA10GR2> select 350 * 1024 * 1024 from dual;
350*1024*1024
-------------
    367001600
Ok, so 367001600 *is* 350mb.  They are the same.
So, that is OK.
As for the fixed size, that is not going to change very much as you resize the SGA, the fixed size is just that - the fixed size of the SGA.  
Why do you think the fixed size would change much, if at all???  You don't get to pick how big that is, we do. 
 
 
 
sga
A reader, January   20, 2010 - 7:57 pm UTC
 
 
 
 
SGA_MAX_SIZE in ORACLE 9i
Arindam, January   20, 2010 - 11:54 pm UTC
 
 
Hi Tom,
This is ok. I am not much bothered about the Fixed size. What I am looking is that, how I can reduce the sga_max_size. It was previously 562 MB. I am trying to set 350 MB. I was following the steps below:
1) alter system set sga_max_size=350m scope=spfile;
2) shutdown
3) startup
But the sga_max_size remains the same as it was earlier (562 MB). 
January   21, 2010 - 8:30 am UTC 
 
 
prove it to me, 
show parameter sga_max
alter system....
shutdown
startup 
show parameter sga_max
and show us all of your memory related parameters. 
 
 
The docs say...
joel garry, January   21, 2010 - 4:07 pm UTC
 
 
"If SGA_MAX_SIZE specified in the initialization parameter file is less than the sum of all components specified or defaulted at initialization time, then the setting in the initialization parameter file is ignored." 
January   25, 2010 - 1:40 am UTC 
 
 
correct, if they are specify the other values, which is what we are asking to see :) 
 
 
SGA_MAX_SIZE in Oracle 9i
Arindam, January   22, 2010 - 1:37 am UTC
 
 
Here are the steps again:
SQL> sho sga
Total System Global Area  556762824 bytes
Fixed Size                   730824 bytes
Variable Size              83886080 bytes
Database Buffers          471859200 bytes
Redo Buffers                 286720 bytes
SQL>  sho parameter sga_max_size
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 556762824
SQL> !bc
556762824/1024/1024
530
quit
SQL> alter system set sga_max_size=480m scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area  556763088 bytes
Fixed Size                   731088 bytes
Variable Size              83886080 bytes
Database Buffers          471859200 bytes
Redo Buffers                 286720 bytes
Database mounted.
Database opened.
SQL> sho parameter sga_max_size
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 556763088
SQL> !bc
556763088/1024/1024
530
So no reduction at all in sga_max_size. 
But in SPFILE the parameter *.sga_max_size=503316480 i.e. 480MB. Can't understand why it is not showing in the SQL prompt. 
 
 
 
January   25, 2010 - 1:43 am UTC 
 
 
you are not giving us what we ASKED for
... and show us all of your memory related parameters.  ...
i will suspect you have set other memory related parameters
and their settings make this max size IMPOSSIBLE. 
 
 
Please look in the docs.
joel garry, January   22, 2010 - 3:24 pm UTC
 
 
If you look in your versions concepts guide under "Dynamic SGA" of the Memory Architecture chapter, you will understand what is happening.
In a nutshell, there are several components of the SGA that are added up to get to the SGA size: db_cache_size, log_buffer, shared_pool_size and large_pool_size.  Each of these consists of granules of memory, so Oracle takes what they are set at and rounds up to the next granule - 8 or 16MB depending on platform, for SGA over 128MB.
So, figure out what each of those components are set to, round up the granules, add them up and compare to the size of the SGA.
It ought to be obvious by now your buffer cache alone is a big chunk of the SGA, bigger than what you are trying to set the SGA to. 
 
SGA_TARGET
Daniel Vasanthan, March     10, 2010 - 8:34 am UTC
 
 
HI Tom,
I have read many of your articles and found useful.  Even I have your book at home which is ultimate.  But I somewhat feel that this thread is going nowhere.  People in the thread are requesting you for guidelines for SGA_TARGET in dedicated environment for a specific RAM size, but somewhat your answers are going out of that.  Also how to check the peek in to __shared_pool values ( as mentioned in your answers).  I really don't know and wish to know. 
March     10, 2010 - 9:03 am UTC 
 
 
.. but somewhat your answers are 
going out of that. ...
I don't know what you mean.
create pfile from spfile
edit pfile that you created
probably easiest way to see the __ stuff. 
 
 
shared memory attached to oracle
A reader, April     14, 2010 - 7:01 am UTC
 
 
Hi Tom,
         You said above "it is reserved, but not touched memory, the OS will not have it physically in ram if you are not using it. " 
We have the following system:
OS: HP-UX edcddj0 B.11.31 U ia64 2803668160 unlimited-user license
Database: 11.2.0.1
SQL> show sga
Total System Global Area 2087780352 bytes
Fixed Size                  2171384 bytes
Variable Size             671092232 bytes
Database Buffers         1409286144 bytes
Redo Buffers                5230592 bytes
SQL> show parameter sga
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
lock_sga                             boolean                           FALSE
pre_page_sga                         boolean                           FALSE
sga_max_size                         big integer                       2000M
sga_target                           big integer                       1808M
 ipcs -ma | grep oraeeg
m  348061714 0xcd1733ec --rw-rw----    oraeeg    dbaeeg    oraeeg    dbaeeg     28 2113937408 26961 15551  7:54:44  7:55:10  7:43:01
I see that the shared memory attached is 2113937408. That means that SGA_MAX_SIZE gets attached. Does this still means the only 1808MB will be in RAM and not the whole 2GB?
 
 
April     14, 2010 - 9:11 am UTC 
 
 
we only touch that which we need and the OS only pages in that which is touched and needed.
so, 2gb reserved, not all of it need be in physical memory. 
 
 
shared memory attached to oracle
Avnish, April     15, 2010 - 12:20 am UTC
 
 
Hi Tom,
          Thanks for your prompt reply as always. Your replies are always enlightening.
  
 
Sga -allocation
A reader, April     23, 2010 - 5:58 am UTC
 
 
"we only touch that which we need and the OS only pages in that which is touched and needed. 
so, 2gb reserved, not all of it need be in physical memory."
Can you please explain in detail about this ? I am getting confused with the words 'reserved' , 'allocated' ,'touched' and ,'needed' - if I set sga_max_size=2gb and sga_target_size=1.5 gb at the instance start-up - how the memory is allocated actually when the instance is started for sga  and how the memory is allocated on going in future for sga?  Many thanks for your valuable time  
April     23, 2010 - 9:16 am UTC 
 
 
we'll allocate 2gb, but only touch up to 1.5 gb of it.  The OS will do what it feels like doing as far as giving us memory - the OS of today are typically what you might call 'demand paged' - as you demand the memory - they give you the physical memory, paging in from disk if needed.  
Typically, with your settings, you would expect to see 1.5gb of real memory in use and 2gb of memory allocated to the process, with 0.5gb of memory probably sitting in a page file (not really sitting there, waiting to sit there since you haven't touched it yet - it doesn't have a value, they don't have to really write anything to disk yet)
You can allocate 2gb of memory on a system with 1gb of physical ram, it'll work typically just fine - a tad slow when you try to use all of it - fine if you just used a small bit of it.  Same concept applies here, until you actually touch the memory, the OS doesn't have to make it available for you. 
 
 
sga / pga
A reader, April     23, 2010 - 2:15 pm UTC
 
 
Thanks for your reply ,Please correct my understaning i it is wrong -
1.SGA _TARGET memory is 'pre-allocated' and SGA_MAX_SZE is 'reserved' at the instance start-up in one (or) multiple SHARED SEGMENTs.  We can touch (use) the SGA memory UP TO sga_target and as we go on demanding for sga memory ,the OS  will give us.if we dont use some of the sga_target memory , it can use for other application/process running on the box ,  When we tocuh/need/ask , the OS will get it for us ..
2.But for a server process the PGA memory is not 'pre-allocated' , it is created when server process is created and will grow DYNAMICALLY using malloc()/pmap() calls. 
April     23, 2010 - 2:42 pm UTC 
 
 
1) it is all "pre allocated", if you set sga max size to 50gb and ask for a report of allocated memory, it'll show us with 50gb.
We'll only use and hence the operating system will only map to real ram - sga_target bytes of it.
If we shrink the sga_target, we'll stop using some of it and the OS would page that out to disk after a while.
2) correct 
 
 
SGA Sizing
Zain, April     25, 2010 - 11:35 am UTC
 
 
Dear All,
The basic fundamental behind sizing your SGA(System Global Area) is nothing comes out on fly, everyone has to have a practical approach rather then getting things easily and readily available. One cant become a proper DBA just by getting answers on the fly and fix it. So practical approach is very much important.
HTH ;) 
 
understand the *concepts*
bix, April     27, 2010 - 11:18 am UTC
 
 
but before that - every one must have 'SOLID' understanding of the ORACLE concepts, 
1.Learn and have solid understanding of the basics and the concepts of ORACLE in theory 
2.then start working on Oracle products - you will get practical experience 
3.use 1 & 2 together to for effective design or to fix the issues.
 
 
SGA Max an SGA Target
Jim, December  06, 2010 - 11:11 am UTC
 
 
Hi Tom
I am using Oracle 10g 64-bit - Windows 2003 64-bit, and setting both SGA Max and SGA Target to 11GB. I also have open_cursors and session_cached_cursors set to 1000 each. My question is that I am monitoring the database via OEM and I am seeing my shared_pool at times go into the 4GB range. I have no control over the code so I can only tweak the database parameters. Since Oracle is adjusting my buffer cache (6GB) and shared pool (4GB), should I be concerned about this high shared_pool value ?  I know I have read some articles in which I believe you have said that having a high shared_pool value is not good as it indicates hard parsing and lack of use of bind variables.
Thanks 
December  07, 2010 - 9:49 am UTC 
 
 
... open_cursors and session_cached_cursors set 
to 1000 each. ...
your application really needs 1,000 cursor??  I seriously doubt it.  Let me guess:
o you are running a connection pool
o you have set the connections to cycle themselves every N uses
o you set open cursors to 1000 to 'fix' an ora-100 the applications would get every now and then
In other words, you are trying to mask a massive bug in the client application - they are leaking cursors like a sieve and rather than fix the code, you've made everyone less efficient by hiding the problem and setting parameters really, almost absurdly, high.
... I know I have read some articles in which I believe 
you have said that having a high shared_pool value is not good as it indicates 
hard parsing and lack of use of bind variables. ...
it could be a cause of that - or if your application really truly has 1000 open cursor - it could just be that your system has an abnormally large amount of sql.
I rather think the former however :)  What is your soft parse percent? 
 
 
Oracle Advisors
Kev Burgess, January   25, 2011 - 7:25 am UTC
 
 
Hi Tom,
How reliable are the Oracle advisors for estimating SGA and BUFFER_CACHE sizes?  I have been using SGA_TARGET_ADVICE and DB_CACHE_ADVICE for sizing my 10gR2 databases but there seems to be very little mention of them here.
Many thanks. 
February  01, 2011 - 12:02 pm UTC 
 
 
They are very good - and when I do mention them it is simply to say "use them"
They work by using a little bit of extra memory to 'watch' what you have been doing and realistically report drops (or increases) in physical IO's  you can expect to see if you were to follow the advice. 
 
 
Follow-up on Soft Parse
Jim Cox, February  25, 2011 - 2:34 pm UTC
 
 
Hi Tom
I took a look at two snaps of 3-hour interval for this month:
Snap Id Snap Time Sessions Cursors/Session 
Begin Snap: 17211 02-Feb-11 08:00:39 
End Snap:   17214 02-Feb-11 11:00:22 
Instance Efficiency Percentages (Target 100%) 
Buffer Nowait %: 99.98                 Redo NoWait %: 100.00 
Buffer Hit %: 99.86                    In-memory Sort %: 100.00 
Library Hit %: 89.43                   Soft Parse %: 86.92 
Execute to Parse %: 76.39              Latch Hit %: 99.93 
Parse CPU to Parse Elapsd %: 21.18 %   Non-Parse CPU: 91.11 
=====
Begin Snap: 17713 23-Feb-11 08:00:40 
End Snap:   17716 23-Feb-11 11:00:27 
Instance Efficiency Percentages (Target 100%) 
Buffer Nowait %: 99.80                 Redo NoWait %: 100.00 
Buffer Hit %: 95.48                    In-memory Sort %: 100.00 
Library Hit %: 96.24                   Soft Parse %: 89.00 
Execute to Parse %: 78.44              Latch Hit %: 99.94 
Parse CPU to Parse Elapsd %: 62.38 %   Non-Parse CPU: 74.51 
Jim 
February  28, 2011 - 7:52 am UTC 
 
 
that is a horrible soft parse %.  
not sure what else to say as you didn't really say anything? 
 
 
Followup on Soft Parse-Response
Jim Cox, March     02, 2011 - 11:05 am UTC
 
 
Hi Tom
I was answering your question regarding the review I submitted titled: 
SGA Max an SGA Target
You wanted to know what my soft parse was because you did not like the fact that i had 1000 cursors configured
Jim 
March     02, 2011 - 11:19 am UTC 
 
 
Again, my hypothesis is
you are using a connection pool, your connections eventually get "max open cursors exceeded" and someone "fixed" it by bumping up the number of open cursors instead of having the developers track down their cursor leak.  Sort of like using a band-aid to fix a leaking pipe, not very pretty and won't last very long. 
And given that the hard parse rate is so high, that seems to add to my feelings that my hypothesis is correct - the developers are not really in tune with database development if they are hard parsing at such a rate.  They are flooding the shared pool with literal sql and leaving cursors open at a relatively high rate. 
 
 
 Followup on Soft Parse-Response 
Jim Cox, March     02, 2011 - 11:28 am UTC
 
 
Hi Tom
the software comes from the vendor and out of my control
I have never had max cursors exceeded. I have gradually just increased them starting at 100, incrementing by 100 and now up to 1000 over the course of the year. I thought I could keep more sql in the shared pool so it would not have to be swapped out. There were never any erros of any sort. Guess I was assuming incorrectly what the max cursors actually does as well as session_cursors.  How do you determine just what the max and session cursor should be set at ?
Thanks
 
March     02, 2011 - 12:01 pm UTC 
 
 
open cursors controls the number of open cursors an individual session may request to have open.  If that session doesn't request that many cursors, it'll never hit it - all you've done is waste a bit of memory on each connection as we use that parameter to size a data structure (well, we allocate 64 slots at a time).
You probably should have just left it at the default value, it was more than sufficient. 
 
 
Followup on Soft Parse-Response 
Jim Cox, March     08, 2011 - 2:52 pm UTC
 
 
Hi Tom
just a followup after changing my cursors from 1000 to 100
Received this in DBConsole for my Database
ADDM Findings:
Soft parsing of SQL statements was consuming significant database time.
Investigate application logic to keep open the frequently used cursors. 
Note that cursors are closed by both cursor close calls and session disconnects
(I have no control over the code)
Consider increasing the maximum number of open cursors a session can have by increasing the value of parameter "open_cursors". 
Action Consider increasing the session cursor cache size by increasing the value of parameter "session_cached_cursors". 
 
Rationale The value of parameter "open_cursors" was "100" during the analysis period. 
Rationale The value of parameter "session_cached_cursors" was "100" during the analysis period
I am running 10.2.0.5 on windows 2003 R2 (both 64-bit)
I have one database with 2 web servers connecting with 100 persistent connections each
how do i actually determine a good number for cursors
Thanks
Jim 
March     08, 2011 - 3:28 pm UTC 
 
 
You have already (found the right size).  I'm not sure why they suggest upping open_cursors - that would not decrease the number of parse calls.  
Having session_cached_cursors at 100 is a pretty good setting, I wouldn't be too worried about upping that value too much - 100 to 150 is "normal".
The only reason I could see for upping open cursors would be to up session cached cursors - but I wouldn't go above 100 or 150 for that setting. 
 
 
Followup on Soft Parse-Response (Thanks)
Jim Cox, March     15, 2011 - 12:14 pm UTC
 
 
Thanks for your time Tom
Really appreciate your assistance
Jim 
 
hassan, September 25, 2011 - 2:56 pm UTC
 
 
oracle@abc:~> sqlplus
SQL*Plus: Release 10.1.0.3.0 - Production on Mon Feb 28 14:25:13 2005
Copyright (c) 1982, 2004, Oracle.  All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to an idle instance.
SQL> alter system set sga_target ='500M';
alter system set sga_target ='500M'
*
ERROR at line 1:
ORA-01034: ORACLE not available
SQL> startup
ORA-00821: Specified value of sga_target is too small, needs to be at least 12M
SQL>
 
 
September 25, 2011 - 3:10 pm UTC 
 
 
Ok, it is time for my favorite game:
Let's play "guess the question".
All you do to play is post some stuff and you let us try to guess what you wanted...
I'll guess you are using an spfile...
I'll guess you managed to set the sga_target to a really small value using "scope=spfile" and cannot start your database...
I'll guess you want to know what your options are...
Here is perhaps the easiest way:
idle> startup force
ORA-00821: Specified value of sga_target 4M is too small, needs to be at least 36M
<b>I have the same problem you do...</b>
idle> create pfile='/tmp/pfile.ora' from spfile;
File created.
<b>create an OS text file of parameters...</b>
idle> edit /tmp/pfile.ora
<b> edit it and fix it up...</b>
idle> create spfile from pfile='/tmp/pfile.ora';
File created.
<b>make it be my spfile again...</b>
idle> startup force
ORACLE instance started.
Total System Global Area  150667264 bytes
Fixed Size                  1342736 bytes
Variable Size              96469744 bytes
Database Buffers           46137344 bytes
Redo Buffers                6717440 bytes
Database mounted.
Database opened.
idle> 
and we are back in business... 
 
 
 
SGA_max_Size and Sga_target
Rohit, October   09, 2011 - 10:27 am UTC
 
 
Hi
I am configuraring a new Oracle 10g instance for production purposes. I read from Oracle 10g new 
features for administrators exam guide (from Oracle Press) that when we use sga_target we should 
not set any parameters for the 4 dynamic tunable components, buffer cache, shared pool, java pool 
and large pool to reduce database's ability to adapt to database wrkload changes. How true is this? 
If I set sga_target to 1000M how much memory will these 4 components consume to start?
I have another question about sga_target & sga_max_size. If we set sga_max_size bigger than 
sga_target will sga_target always be lower than sga_max_size? For example
sga_target = 1200M
sga_max_size = 1600M
Does this make sense? Will Oracle allocate memory up to 1600M sometime or maximum it will reach 
1200M. What's the point combining these two parameters, shouldnt we just use sga_target and forget 
about sga_max_size? 
Followup   December 20, 2004 - 8am Central time zone:
how true is it?
100% true, if you set the sga_target, the other 4 components are set for you.
if you set the SGA_TARGET to 1000m, the 4 components will be sized to consume 1000m.  consider:
SQL> show parameter sga_target
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------
sga_target                           big integer 1000M
SQL> show sga
 
Total System Global Area 1048576000 bytes
Fixed Size                   782424 bytes
Variable Size             259002280 bytes
Database Buffers          788529152 bytes
Redo Buffers                 262144 bytes
SQL> show parameter pool
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep                     string
buffer_pool_recycle                  string
global_context_pool_size             string
java_pool_size                       big integer 0
large_pool_size                      big integer 0
olap_page_pool_size                  big integer 0
shared_pool_reserved_size            big integer 12373196
shared_pool_size                     big integer 0
streams_pool_size                    big integer 0
SQL>
basically, Oracle will setup reasonable initial sized pools (if you know how to peek at _ 
parameters, you'll see them:
__java_pool_size               4194304
__large_pool_size              4194304
__shared_pool_size             247463936
) and will put the rest in the buffer cache.  Over time, if the pools need more, it'll steal from 
the buffer cache and increase them.
sga_target has to be less than or equal to sga_max_size.  It depends on the OS how the memory is 
reserved, but basically your 1200/1600 would have you start with an SGA of 1,200 meg that could be 
grown by you to 1600m (using alter system)
SQL> show parameter sga
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 1200M
sga_target                           big integer 1008M
SQL> alter system set sga_target = 1100m;
 
System altered.
 
SQL> alter system set sga_target = 1300m;
alter system set sga_target = 1300m
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00823: Specified value of sga_target greater than sga_max_size
Ok if we manually add shared_pool_size=80m its getting configured we can check it in show parameter pool, if we set set shared_pool_size=1300m manually can it be configured?....
 
 
October   09, 2011 - 11:17 am UTC 
 
 
sga_target we should 
not set any parameters for the 4 dynamic tunable components, buffer cache, 
shared pool, java pool
I would say that should use the words "do not have to" instead of "should not".  You can - but do not technically have to.  If you do set them, they will be considered "minimun values" - that is, if you set the sga_target to 10gb and each of the components to 1gb - that means each will be at least one gigabyte in size and the remaining six will be used to increase their sizes as the software sees fit.
If I set sga_target to 1000M how much memory will these 4 components consume to 
start?
it depends and can vary over time.  That is why it is called auto - it is automatic and under the covers.
I have another question about sga_target & sga_max_size. If we set sga_max_size 
bigger than 
sga_target will sga_target always be lower than sga_max_size?
target is less than or equal to max.  So, it might not be lower, it could be equal.
Does this make sense? Will Oracle allocate memory up to 1600M sometime or 
maximum it will reach 
1200M.
that causes us to allocate and use 1200m, but allows you to dynamically alter the target up to 1600m without having to shutdown and restart.
 
 
 
Huge SGA cause performance degration
goh, December  17, 2011 - 8:11 am UTC
 
 
Hi Tom,
   Is it any implication having huge SGA size (100GB) ? We have a heavy OLTP environment with about 2 Terabyte in size. Currently, we have more than 120GB physical RAM and we set 100GB SGA_MAX. Buffer hit ratio is 99.9% and we have adequte memory for the MTS and OS process. One of the consultant asks us to reduce the SGA_MAX size as he says to much SGA size will have impact on database performance. Can you share what is the impact if having too much SGA size assuming we have sufficient memory for OS and MTS operation ? Is it normal to have 100GB SGA size for 2 terabyte database size, it is only 5% of the total DB size ? Thanks.
Regards
Goh 
December  17, 2011 - 9:28 am UTC 
 
 
A 100gb SGA is becoming fairly "normal" these days.
do you see any indication of any overhead due to a large SGA?  High cpu consumption for simple queries?  lots of cache buffers chains latching issues?
what does the buffer cache adivisor tell you - if you were to decrease the SGA size - would physical reads increase? 
 
 
SGA
sam, December  17, 2011 - 10:00 am UTC
 
 
Tom:
I thought on 32 bit machines an oracle instance memory max is 2GB and 64 bit machines it is 4 GB.
Based on your comment here you can set the SGA to any size you wish limited by the total physical RAM on machine.
I think you also mentioned that increaing memory/cache infinitely for oracle will not improve overall performance.
can you clarify? 
December  17, 2011 - 10:06 am UTC 
 
 
64 bit is usually done using 48 bit of the pointer on intel x86 - allowing for about 256 TB - 262,144gb -  of memory to be addressed.
on 32 bit machines it was typically 1.75gb - sometimes extendable by magic on windows with a series of switches that could totally destabilize your system.
I think you also mentioned that increaing memory/cache infinitely for oracle 
will not improve overall performance.
correct, there are diminishing returns on using memory at some point for disk based database systems (but not a database like times ten).  The larger the cache, the more to manage, the possibly longer the list of blocks to walk.  
But 100gb is not considered huge these days, it is becoming a new normal in some respects.  10 years ago, it would have been different. 
 
 
SGA
sam, December  17, 2011 - 10:12 am UTC
 
 
Tom:
so on 32 bit machines SGA max = 1.75 GB
and on 64 bit machines SGA max = 252 TB?
Those 32 bit machine do not scale at all. it will only do small sized databases. 
December  17, 2011 - 12:22 pm UTC 
 
 
those 32 bit machines did us well in their time Sam.
When I started working at Oracle - if your server had 256MB of ram and 4 cpus (which could have been 486 class cpus - the sequent machine I used was) - you had a honking big server.
When I started at Oracle - the theoretical 1.75gb limit was something we didn't anticipate hitting any time soon.
And you know what - we got stuff done on those machines, believe it - or not.  The world ran on that.  Mainframes - they were even smaller (memory wise).
You can do quite a bit with a 1.75gb SGA...
But, today in 2011 - it wouldn't make sense to use 32bit since 64bit is so widely available.
The theoretical maximum amount of memory varies by platform - it could be 2^34gb of memory if they used all of their bits in the pointer.  It depends.
And it is theoretical, no ones put such a thing together yet - physical machine limits you to a lot less.  You have to have engineered a machine capable of having 256tb of memory. 
 
 
Huge SGA
goh, December  17, 2011 - 9:56 pm UTC
 
 
Thanks Tom.
   No swap activity happen in the OS level or high CPU utilization in the server.
  cache buffers chains latching does not appear in the top 5 events (1 hour interval). 
Top 5 Timed Events                                         Avg %Total
~~~~~~~~~~~~~~~~~~                                        wait   Call
Event                                 Waits    Time (s)   (ms)   Time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
CPU time                                         30,954          66.1
db file sequential read           4,911,498      15,815      3   33.8   User I/O
db file parallel write               36,982         927     25    2.0 System I/O
log file parallel write              80,478         320      4    0.7 System I/O
log file sync                        55,473         273      5    0.6     Commit
Apart from top 5 events, where can we check if cache buffers chains latching contention in the awr report and which event we should pay attention. Is there any rule of thumb for the buffers chains latching contention event? 
From -> Latch Activity
                                           Pct    Avg   Wait                 Pct
                                    Get    Get   Slps   Time       NoWait NoWait
Latch Name                     Requests   Miss  /Miss    (s)     Requests   Miss
------------------------ -------------- ------ ------ ------ ------------ ------
cache buffer handles          2,273,312    0.6    0.0      0            0    N/A
cache buffers chains      1,424,332,001    0.1    0.0      1    8,422,533    0.1
cache buffers lru chain       7,758,100    3.4    0.0      3    7,706,088    4.2
cache table scan latch                0    N/A    N/A      0       35,392    0.2
Latch Sleep Breakdown 
Latch Name
----------------------------------------
  Get Requests      Misses      Sleeps  Spin Gets   Sleep1   Sleep2   Sleep3
-------------- ----------- ----------- ---------- -------- -------- --------
cache buffers lru chain
     7,758,100     260,217       5,355    255,117        0        0        0
From SGA Target advisor, set SGA to 134GB should be the ideal setting for our environment. Right.
SGA Target Advisor
SGA Target   SGA Size       Est DB     Est Physical
  Size (M)     Factor     Time (s)            Reads
---------- ---------- ------------ ----------------
    19,200        0.3    3,847,412      534,361,335
    38,400        0.5    2,382,446      324,887,652
    57,600        0.8    1,765,080      206,741,288
    76,800        1.0    1,429,092      148,499,704
    96,000        1.3    1,275,187      114,805,121
   115,200        1.5    1,177,730       93,465,714 
   134,400        1.8    1,099,845       76,388,248
   153,600        2.0    1,099,851       76,388,248
Instance Efficiency Percentages (Target 100%)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buffer Nowait %:   99.99       Redo NoWait %:  100.00
Buffer  Hit   %:   99.32    In-memory Sort %:  100.00
This is based on 1 hour interval of AWR report during the peak hour.
Appreciate your advice.
Regards
Goh 
December  18, 2011 - 5:29 am UTC 
 
 
you are not really missing your get requests on the latch and not sleeping on it - so at a cursory glance, it doesn't appear to be an issue.  And given that you still do 5million IO's in that IO (reads), it doesn't seem to be advisable to reduce the buffer cache (this is all off the top of the head here, I don't really know anything about your database...)
I'd doubt that shrinking the SGA would be advisable.  
134gb would be the ideal setting if and only if you had more memory.  It would be a bad idea as it is now.
Given the high number of db file sequential reads - I'm hoping you are a pure OLTP system... 
 
 
Huge SGA
goh, December  18, 2011 - 5:43 am UTC
 
 
Thanks Tom,
    It is the OLTP environment and it appears that one of SQL required some tuning 15,000 executions in 1 hour and each execution read contribute about 5000 IO. 
    Can share from which section and events that tell no contention of buffer cache latch as explain in your previous reply "you are not really missing your get requests on the latch and not sleeping on it ". 
    Appreciate it.
cache buffers lru chain
     7,758,100     260,217       5,355    255,117        
From -> Latch Activity
                                           Pct    Avg   Wait                 Pct
                                    Get    Get   Slps   Time       NoWait NoWait
Latch Name                     Requests   Miss  /Miss    (s)     Requests   Miss
------------------------ -------------- ------ ------ ------ ------------ ------
cache buffer handles          2,273,312    0.6    0.0      0            0    N/A
cache buffers chains      1,424,332,001    0.1    0.0      1    8,422,533    0.1
cache buffers lru chain       7,758,100    3.4    0.0      3    7,706,088    4.2
cache table scan latch                0    N/A    N/A      0       35,392    0.2
Latch Sleep Breakdown 
Latch Name
----------------------------------------
  Get Requests      Misses      Sleeps  Spin Gets   Sleep1   Sleep2   Sleep3
-------------- ----------- ----------- ---------- -------- -------- --------
cache buffers lru chain
     7,758,100     260,217       5,355    255,117        0        0        0
Regards
Goh 
 
December  18, 2011 - 8:11 am UTC 
 
 
your average slps/miss and wait times.  
you don't have very many misses, hardly any sleeps. 
 
 
AMM
A reader, May       08, 2012 - 11:03 am UTC
 
 
Tom:
I am migrating a 9i schema to 11g R2 new database on linux.
Do you normally recommend using the automatic memory manager in 11g or just allocation fixed amount of RAM to use?
I heard some DBA saying the memory manager does not work very well and they had to go back to manual mode. 
May       08, 2012 - 11:27 am UTC 
 
 
automatic memory management works well for those "small databases, with a few users, that do not have a dedicated dba to watch".  I would use auto pga memory management along with either
a) sga target with lower bounds set for the db cache, shared pool and such
b) just setting the db cache, shared pool and such and using the advisors to see if we should schedule a change
 
 
 
memory
A reader, May       08, 2012 - 10:55 pm UTC
 
 
it is fairly small database (15 GB) and a few hundred users (not database accounts).
But i select AMM in dbca and I selected 1 GB for total memory. Do i need to do something special in dbca or after db is created to set minimum buffer cache size or anything else. 
May       10, 2012 - 3:06 am UTC 
 
 
Sam
have your DBA take care of this please.
or re-read what I already typed just above, I could cut and paste it again, but that isn't really necessary is it. 
 
 
SDO_NET Cache
Jon T, September 12, 2012 - 10:36 am UTC
 
 
When we size the SGA do we have to consider the Load on Demand cache managed by the Network Data Model component of Oracle Spatial?  I'm asking since I'm not really sure where this cache is stored (or if it's even in the SGA).
 http://docs.oracle.com/cd/E11882_01/appdev.112/e11831/sdo_net_concepts.htm#CIHFHAID It looks like there's a config file that you can use to force Oracle to keep certain node partitions in memory but I have no idea if other things, like ASMM, play a role.
Thanks for all the help over the years! 
 
 
A sysadmin speaks
Tim, September 27, 2012 - 7:58 pm UTC
 
 
Hi Tom & all contributors - As a Unix sysadmin with little knowledge of Oracle internals, I've found this page very useful in explaining the thought processes needed to plan SGA sizing (and hence physical memory requirements). 
I appreciate that the DB is better at managing its data than OS filesystem caching, but in future any DBA who demands more memory on the grounds "more is better" will be asked to show some evidence that the application needs it.
To digress slightly, and give you a view from the "other side" - Many years ago, I went on a Unix performance tuning course. The tutors introduction was basically "I don't know why you're here - 95% of performance problems are due to badly designed Apps". And he was right, most issues I've seen since then could only be slightly helped by hardware or OS tweaking, whereas a review of indexes or SQL gave huge improvements. 
Finally, I believe the old issue of disk I/O & multiple spindles has been largely obsoleted by modern Enterprise disk arrays with large caches. But I'll browse the rest of "AskTom" to get your views on these side issues.
Thanks again! 
 
Large SGA Causing paging and CBC
Praveen, May       07, 2013 - 9:43 am UTC
 
 
Hi Tom,
I have a OLTP system running on windows 64 bit. We were facing a lot of CBC, lot of paging on the system and high CPU usage as well.
We have a SGA_TARGET=46gb and SGA_MAX=54gb, it is a 10.2.0.3 database. Size of the database is about 450gb.
I am trying to prove to client that the huge SGA is causing the latches and paging to occur.
By reducing the SGA as per advisory I do not see a raise in the estimated physical reads, does that mean I can reduce the SGA?
Let me know your advice, or the points I need to look for to highlight that indeed the large SGA is cauising this.
Thanks,
Praveen 
May       07, 2013 - 3:33 pm UTC 
 
 
paging - sure.  latching, maybe - maybe not.
latching is a symptom, not a cause.  The number one cause of the sympton - artificially high concurrency. 
http://tinyurl.com/RWP-OLTP-CONNECTIONS showing that there is paging going on would be easy, should be anyway.  The OS would tell you that.  is there?  
you don't say how much physical RAM the machine has, if it has 64gb or more, I don't think the SGA is too large as you would have a small number of connections (see video), PGA memory would be small (no big sorts or anything, it is OLTP). 
 
 
 
Estimate SGA Size
pranav, June      21, 2013 - 4:19 pm UTC
 
 
Tom,
First of all, thank you very much for spending your valuable time in helping people like me. We are so blessed.
I am trying to calculate the estimated size of SGA. I am not sure how to check whether my database benefits from increasing the SGA size(especially shared_pool/buffer_cache). I have access to AWR reports but no OEM. Please provide some guidance. Thanks for your help. 
July      01, 2013 - 5:07 pm UTC 
 
 
there is a buffer cache advisory report in there, check it out. 
 
 
What happen if SGA memory is very low ?
Kumaraswamy, June      29, 2013 - 9:25 am UTC
 
 
Hi Tom,
what will happen if SGA's allocated memory is very low apart from it's performance ?
Thanks in advance. 
July      01, 2013 - 9:22 pm UTC 
 
 
you could receive ora-4031 errors, unable to allocate. 
 
 
Estimate SGA Size
pranav, July      01, 2013 - 5:13 pm UTC
 
 
Thanks Tom. But we disabled the parameter db_cache_advice parameter as it caused the database outages. Please tell me how else we can make an educated guess for the correct parameters. Wondering if there is a way at all(apart from the advisory). 
July      01, 2013 - 9:34 pm UTC 
 
 
do you have a bug# I can look at then?  how did you determine it was this?
there are too many variables to make an educated guess short of "more is probably better except when it isn't" 
 
 
why exist some netcard information in spfile ?
A reader, December  09, 2013 - 8:29 am UTC
 
 
strings /oracle/products/11.2.0/dbs/spfileXXXXXXXXX.ora 查看spfile,some information about netcard exists,i donnot know why?
...............................................
*.shared_pool_size=2g
xxx.shared_pool_size=2147483648
*.sql92_security=TRUE
*.standby_file_management='AUTO'
xxx.thread=2
xxx.thread=1
xxx.undo_tablespace='UNDOTBS1'
xxx.undo_tablespace='UNDOTBS2'
                                                0.0     0.7          0          0
11/29/13 00:00:03   lan904                                                             809.2   389.2          0          0
                     NetIF               NetIn      NetOut        Net        Net
  Date     Time       Name             bytes/s     bytes/s  COLLISION      ERROR
----------------------------------------------------------------------------------
11/29/13 00:00:47   lan0                                                                67.9    75.8          0          0
11/29/13 00:00:47   lan1                                                                 0.2     3.6          0          0
11/29/13 00:00:47   lan9                                                                11.8     8.8          0          0
11/29/13 00:00:47   lan11                                                                2.0     2.2          0          0
11/29/13 00:00:47   lan13                                                              412.7   485.1          0          0
11/29/13 00:00:47   lan3                                                                 0.4     0.0          0          0
11/29/13 00:00:47   lan14                                                                0.7     0.0          0          0
11/29/13 00:00:47   lan4                                                                 0.4     0.0          0          0
11/29/13 00:00:47   lan21                                                                0.7     0.0          0          0
11/29/13 00:00:47   lan7                                                                 0.4     0.0          0          0
11/29/13 00:00:47   lan26                                                                0.7     0.0          0          0
11/29/13 00:00:47   lan900                                                              69.2    75.8          0          0
11/29/13 00:00:47   lan901                                                               0.2     3.6          0          0
11/29/13 00:00:47   lan902                                                              14.1     8.8          0          0
11/29/13 00:00:47   lan903                                                               2.1     2.2          0          0
11/29/13 00:00:47   lan904                                                             402.9   479.4          0          0
                     NetIF               NetIn      NetOut        Net        Net
  Date     Time       Name             bytes/s     bytes/s  COLLISION      ERROR
----------------------------------------------------------------------------------
11/29/13 00:01:30   lan0                                                                41.7    41.2          0          0