Files
oracle/vdh/sga_report.sql
2026-03-12 21:23:47 +01:00

261 lines
5.5 KiB
SQL

/* This script generates an overview of the memory settings and usage of a database
Run the script as an admin user (eg SYS) from within sqlplus.
A logfile will be created in the current working directory
*/
--- set layout options
clear breaks
set pagesize 9999
set linesize 150
set verify off
set echo off
set feedback off
set trimspool on
-- initialize spoolfile
--column dcol new_value spoolname noprint
--column inputpar01 new_value 1 noprint
--select 1 inputpar01 from dual where 1=2;
--select
-- nvl('&1', db_unique_name || '_' || to_char(sysdate,'YYYYMMDDHH24MISS') || '_memory_report.log') dcol
--from
-- v$database
--;
--undefine 1
--spool &spoolname
--- db and platform identification
prompt
prompt DB IDENTIFICATION
prompt ------------------
set linesize 200
column platform_name format a40
column name format a15
column db_unique_name format a20
select
dbid, name, db_unique_name, database_role, platform_name
from
v$database
;
column host_name format a40
prompt
select
instance_number, instance_name, host_name, version
from
gv$instance
order by
instance_number
;
--- sga spfile parameter
prompt
prompt
prompt SGA PARAMETERS
prompt --------------
column name format a40
column value format a25
column description format a40 word_wrapped
set linesize 150
select ksppinm name, ksppstvl value, ksppstdf isdefault, x.inst_id inst_id, ksppdesc description
from x$ksppi x, x$ksppcv y
where (x.indx = y.indx)
and ksppinm in
( 'sga_target', 'sga_max_target', 'memory_target', 'db_cache_size',
'db_2k_cache_size', 'db_4k_cache_size', 'db_8k_cache_size',
'db_16k_cache_size', 'db_32k_cache_size', 'db_keep_cache_size',
'db_recycle_cache_size', 'java_pool_size', 'large_pool_size',
'olap_page_pool_size'
)
order by ksppinm, x.inst_id;
--- sga overview
prompt
prompt
prompt SGA OVERVIEW
prompt ------------
set linesize 120
set pagesize 9999
column component format a40
column curr_mb format 99G999D99
column min_mb format 99G999D99
column max_mb format 99G999D99
column user_mb format 99G999D99
column granule_mb format 99G999D99
compute sum of curr_mb on report
break on report
select component, current_size/1024/1024 curr_mb, min_size/1024/1024 min_mb, max_size/1024/1024 max_mb,
user_specified_size/1024/1024 user_mb, granule_size/1024/1024 granule_mb
from v$sga_dynamic_components
order by component;
clear breaks
--- sga resizes
prompt
prompt
prompt SGA RESIZE OPERATIONS
prompt ---------------------
set linesize 250
set pages 9999
column start_time format a20
column end_time format a20
column initial_mb format 999G999D99
column target_mb format 999G999D99
column final_mb format 999G999D99
column component format a30
select *
from ( select to_char(start_time, 'DD/MM/YYYY HH24:MI:SS') start_time, to_char(end_time, 'DD/MM/YYYY HH24:MI:SS') end_time,
component, oper_type, oper_mode, initial_size/1024/1024 initial_mb, target_size/1024/1024 target_mb,
final_size/1024/1024 final_mb, status
from v$sga_resize_ops a
order by a.start_time desc
)
where rownum <= 40;
--- sqlcursor memory usage per parsing schema
prompt
prompt
prompt SQL CURSOR MEMORY
prompt -----------------
set linesize 150
column sharable_mem_kb format 99G999G999D00
column persistent_mem_kb format 99G999G999D00
column runtime_mem_kb format 99G999G999D00
column cursor_cnt format 999G999G990
column unique_cursor_cnt format 999G999G990
compute sum of sharable_mem_kb on report
compute sum of persistent_mem_kb on report
compute sum of runtime_mem_kb on report
compute sum of cursor_cnt on report
compute sum of unique_cursor_cnt on report
break on report
with
childs as
( select
parsing_schema_id,
sql_id,
count(*) child_cnt
from
v$sql
group by
parsing_schema_id,
sql_id
),
mchild as
( select
parsing_schema_id,
max(child_cnt) max_child_cnt
from
childs
group by
parsing_schema_id
),
vsql as
( select
parsing_schema_id,
count(*) cursor_cnt,
count(distinct sql_id) unique_cursor_cnt,
sum(sharable_mem)/1024 sharable_mem_kb,
sum(persistent_mem)/1024 persistent_mem_kb,
sum(runtime_mem)/1024 runtime_mem_kb
from
v$sql
group by
parsing_schema_id
)
select
username, cursor_cnt, unique_cursor_cnt, max_child_cnt,
sharable_mem_kb, persistent_mem_kb, runtime_mem_kb
from
mchild,
vsql,
dba_users usr
where
vsql.parsing_schema_id = mchild.parsing_schema_id
and vsql.parsing_schema_id = usr.user_id
order by
username
;
clear breaks
clear computes
--- Top sql cursors by shared memory
prompt
prompt
prompt TOP SQL CURSORS (by shared memory)
prompt ----------------------------------
set linesize 150
column sharable_mem_kb format 99G999G999D00
column persistent_mem_kb format 99G999G999D00
column runtime_mem_kb format 99G999G999D00
select
*
from
( select
sql_id,
sum(sharable_mem)/1024 sharable_mem_kb,
sum(persistent_mem)/1024 persistent_mem_kb,
sum(runtime_mem)/1024 runtime_mem_kb,
count(*) child_cnt,
parsing_schema_name
from
v$sql
group by
sql_id,
parsing_schema_name
order by
sharable_mem_kb desc,
parsing_schema_name
)
where
rownum <= 10
;
--- memory usage by pool
prompt
prompt
prompt POOL OVERVIEW
prompt -------------
column bytes format 999G999G999G999
compute sum of bytes on pool
break on pool skip 1
select pool, name, bytes
from v$sgastat
order by pool, name;
--- END OF SCRIPT
--spool off