I don't trust scripts I didn't write myself, and not even some of those.  ;)

What does this reveal?

select a.value + ( b.value * c.value )
from
( select sum(value) value from v$parameter
  where name like '%pool%'
) a
 , v$parameter b
 , v$parameter c
where b.name = 'db_block_buffers'
and c.name = 'db_block_size'

As long as you're not using some of the newer 9i memory allocation parameters, this
should be pretty close to the amount of memory you've allocated in init.ora.

Now see how much is in the SGA:

select sum(value) from v$sga;

Should be fairly close to the first number.

Jared




"Corniche Park" <[EMAIL PROTECTED]>
Sent by: [EMAIL PROTECTED]

 08/27/2003 12:44 PM
 Please respond to ORACLE-L

       
        To:        Multiple recipients of list ORACLE-L <[EMAIL PROTECTED]>
        cc:        
        Subject:        Shared Pool Utilization



I have two databases, one in which the shared_pool utilization is not
exceeded (development) and the other one in which it appears that the
shared_pool utilization is exceeded.
The queries i am using are
1. COL Free_Mem FORMAT 999999.99 heading 'Free|Mem|(Mb)'
SELECT pool, name, bytes/(1024*1024) Free_Mem FROM V$SGASTAT
WHERE NAME = 'free memory'
  AND POOL = 'shared pool'
/

2. Metalink note
SGA/Shared Pool Utilization - Metalink Note : 105004.1 (modified for
bytes--> Mb and nvl clauses)

set serveroutput on size 1000000;
DECLARE
       object_mem     NUMBER;
       shared_sql     NUMBER;
       cursor_mem     NUMBER;
       mts_mem        NUMBER;
       used_pool_size NUMBER;
       free_mem       NUMBER;
       pool_size      VARCHAR2(512); -- same AS V$PARAMETER.VALUE
BEGIN
       -- Stored objects (PACKAGEs, views)
       --V$DB_OBJECT_CACHE
       --This view displays database objects that are cached in the
library cache. Objects include
       --tables, indexes, clusters, synonym definitions, PL/SQL
procedures and packages, and triggers.
       --http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96536/ch346.htm#1113348
   SELECT SUM(NVL(sharable_mem,0)) INTO object_mem FROM v$db_object_cache;
--
--
       -- User Cursor Usage -- run this during peak usage.
       -- assumes 250 bytes per open cursor, FOR each concurrent user.
       -- V$SQLAREA lists statistics on shared SQL area and contains one
row per SQL string.
       -- It provides statistics on SQL statements that are in memory,
parsed, and ready for execution.
   SELECT SUM(250*users_opening) INTO cursor_mem FROM v$sqlarea;

   -- For a test system -- get usage FOR one user, multiply by # users
   -- SELECT (250 * value) bytes_per_user
   -- FROM v$sesstat s, v$statname n
   -- WHERE s.statistic# = n.statistic#
   -- AND n.name = 'opened cursors current'
   -- AND s.sid = 25;  -- WHERE 25 is the sid of the process

   -- MTS memory needed to hold session inFORmation FOR shared server users
   -- This query computes a total FOR all currently logged on users (run
   --  during peak period). Alternatively calculate FOR a single user and
   --  multiply by # users.
SELECT SUM(NVL(value,0)) INTO mts_mem FROM v$sesstat s, v$statname n
      WHERE s.statistic#=n.statistic#
      AND n.name='session uga memory max';

   -- Free (unused) memory IN the SGA: gives an indication of how much
memory
   -- is being wasted OUT of the total allocated.
SELECT NVL(bytes,0) INTO free_mem FROM v$sgastat
       WHERE name = 'free memory' AND pool='shared pool';
   -- For non-MTS add up object, shared sql, cursors AND 30% overhead.
   --used_pool_size := ROUND(1.3*(object_mem+cursor_mem));

   -- For MTS mts contribution needs to be included (comment OUT previous
line)
   used_pool_size :=
ROUND(1.3*(object_mem+NVL(shared_sql,0)+cursor_mem+mts_mem));

SELECT NVL(value,0) INTO pool_size FROM v$parameter WHERE
name='shared_pool_size';

  -- Display results
DBMS_OUTPUT.PUT_LINE ('Object mem :  
'||TO_CHAR(ROUND(object_mem/(1024*1024),2)) || ' Mb');
DBMS_OUTPUT.PUT_LINE ('Cursors    :  
'||TO_CHAR(ROUND(cursor_mem/(1024*1024),2)) || ' Mb');
DBMS_OUTPUT.PUT_LINE ('MTS session:  
'||TO_CHAR(ROUND(mts_mem/(1024*1024),2)) || ' Mb');
DBMS_OUTPUT.PUT_LINE ('Free memory:  
'||TO_CHAR(ROUND(free_mem/(1024*1024),2)) || ' Mb ' ||
'('|| TO_CHAR(ROUND(free_mem/1024/1024,2)) || 'MB)');
DBMS_OUTPUT.PUT_LINE ('Shared pool utilization (total):  '||
TO_CHAR(used_pool_size) || ' bytes ' || '(' ||
TO_CHAR(ROUND(used_pool_size/1024/1024,2)) || 'MB)');
DBMS_OUTPUT.PUT_LINE ('Shared pool allocation (actual):  '|| pool_size

||'bytes ' || '(' || TO_CHAR(ROUND(pool_size/1024/1024,2)) || 'MB)');
DBMS_OUTPUT.PUT_LINE ('Percentage Utilized:  '||TO_CHAR
(ROUND(used_pool_size/pool_size*100)) || '%');
END;
/

The dev instance shows properly  (Free Mem seems to be tallying)

(F) Approx = (B) - (A)

                                            Free
                                             Mem
POOL        NAME                             (Mb)
----------- -------------------------- ----------
shared pool free memory                     18.27          (F)

and
Object mem :   10.5 Mb
Cursors    :   .07 Mb
MTS session:   9.47 Mb
Free memory:   18.29 Mb (18.29MB)  (F2) for Shared Pool
Shared pool utilization (total):  27316566 bytes (26.05MB)  (A)
Shared pool allocation (actual):  50331648bytes (48MB)      (B)
Percentage Utilized:  54%

BUT in Prodn it does not seem to be the case.



                                            Free
                                             Mem
POOL        NAME                             (Mb)
----------- -------------------------- ----------
shared pool free memory                    120.17 (F)


Object mem :   59.43 Mb
Cursors    :   2.14 Mb
MTS session:   302.59 Mb
Free memory:   120.13 Mb (120.13MB) (F2) for Shared Pool
Shared pool utilization (total):  496410073 bytes (473.41MB) (A)
Shared pool allocation (actual):  201326592bytes (192MB)     (B)
Percentage Utilized:  247%

PL/SQL procedure successfully completed.

I understand F2 and F are tallying.  But how can one say that
there exists some free memory in Shared Pool when the Utilization
seems to have exceed the actual allocation.

Where is the mismatch?




--
Please see the official ORACLE-L FAQ: http://www.orafaq.net
--
Author: Corniche Park
 INET: [EMAIL PROTECTED]

Fat City Network Services    -- 858-538-5051 http://www.fatcity.com
San Diego, California        -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).



Reply via email to