Script to Display Database SGA Statistics

SET SERVEROUTPUT ON
SET ECHO OFF
SET FEEDBACK OFF
SET PAGES 80
SET LINES 132

REM
REM || Title : show_sga_stat.sql
REM ||
REM || Purpose : This script will Display database SGA statistics.
REM ||
REM ||
REM || Release No : 1
REM ||
REM || Variables : None
REM ||
REM || Schema : system
REM ||
REM ||


DECLARE
libcac NUMBER (10, 2);
rowcac NUMBER (10, 2);
bufcac NUMBER (10, 2);
redlog NUMBER (10, 2);
spsize NUMBER;
blkbuf NUMBER;
logbuf NUMBER;

BEGIN

SELECT VALUE
INTO redlog
FROM v$sysstat
WHERE name = 'redo log space requests';

SELECT 100 * (SUM (pins) - SUM (reloads)) / SUM (pins)
INTO libcac
FROM v$librarycache;

SELECT 100 * (SUM (gets) - SUM (getmisses)) / SUM (gets)
INTO rowcac
FROM v$rowcache;

SELECT 100 * (cur.VALUE + con.VALUE - phys.VALUE) / (cur.VALUE + con.VALUE)
INTO bufcac
FROM v$sysstat cur,
v$sysstat con,
v$sysstat phys,
v$statname ncu,
v$statname nco,
v$statname nph
WHERE cur.statistic# = ncu.statistic#
AND ncu.name = 'db block gets'
AND con.statistic# = nco.statistic#
AND nco.name = 'consistent gets'
AND phys.statistic# = nph.statistic#
AND nph.name = 'physical reads';

SELECT VALUE
INTO spsize
FROM v$parameter
WHERE name = 'shared_pool_size';

SELECT VALUE
INTO blkbuf
FROM v$parameter
WHERE name = 'db_block_buffers';

SELECT VALUE
INTO logbuf
FROM v$parameter
WHERE name = 'log_buffer';

DBMS_OUTPUT.put_line ('> SGA CACHE STATISTICS');
DBMS_OUTPUT.put_line ('> ********************');
DBMS_OUTPUT.put_line ('> SQL Cache Hit rate = '|| libcac);
DBMS_OUTPUT.put_line ('> Dict Cache Hit rate = '|| rowcac);
DBMS_OUTPUT.put_line ('> Buffer Cache Hit rate = '|| bufcac);
DBMS_OUTPUT.put_line ('> Redo Log space requests = '|| redlog);
DBMS_OUTPUT.put_line ('> ');
DBMS_OUTPUT.put_line ('> INIT.ORA SETTING');
DBMS_OUTPUT.put_line ('> ****************');
DBMS_OUTPUT.put_line ('> Shared Pool Size = '|| spsize || ' Bytes');
DBMS_OUTPUT.put_line ('> DB Block Buffer = '|| blkbuf || ' Blocks');
DBMS_OUTPUT.put_line ('> Log Buffer = '|| logbuf || ' Bytes');
DBMS_OUTPUT.put_line ('> ');

IF libcac < 99
THEN
DBMS_OUTPUT.put_line ('HINT: Library Cache too low! Increase the Shared Pool Size.');
END IF;

IF rowcac < 85
THEN
DBMS_OUTPUT.put_line ('HINT: Row Cache too low! Increase the Shared Pool Size.');
END IF;

IF bufcac < 90
THEN
DBMS_OUTPUT.put_line ('HINT: Buffer Cache too low! Increase the DB Block Buffer value.');
END IF;

IF redlog > 100
THEN
DBMS_OUTPUT.put_line ('HINT: Log Buffer value is rather low!');
END IF;
END;
/

SPOOL show_sga_stat.lis
/
SPOOL off

This script is provided for educational purposes only. The script has been tested and appears to work as intended. However, you should always test any script before relying on it. No responsibility will be accepted for Lost or damage that may occur from it's use.