2026-03-12 20:23:15

This commit is contained in:
root
2026-03-12 21:23:47 +01:00
parent eab4b36eca
commit 93039b8489
3332 changed files with 699614 additions and 0 deletions

View File

@@ -0,0 +1,123 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
-- LatchProfX collector v2.0 by Tanel Poder (blog.tanelpoder.com)
-- drop table latchprof_reasons;
create table latchprof_reasons (
indx number not null
, reason_name varchar2(200) not null
, reason_label varchar2(200)
, primary key (indx)
)
organization index
tablespace users
/
insert into latchprof_reasons (indx,reason_name,reason_label)
select indx, ksllwnam, ksllwlbl
from x$ksllw
/
commit;
--drop table latchprof_history;
create table latchprof_history
tablespace users
as
select
systimestamp sample_timestamp
, lh.ksuprpid pid
, lh.ksuprsid sid
, lh.ksuprlat child_address
, lh.ksuprlnm latch_name
, lh.ksuprlmd hold_mode
, lh.ksulawhr where_location
, lh.ksulawhy which_object
, s.ksusesqh sqlhash
, s.ksusesql sqladdr
, s.ksusesph planhash
, s.ksusesch sqlchild
, s.ksusesqi sqlid
from
x$ksuprlat lh
, x$ksuse s
where
lh.ksuprsid = s.indx
and 1=0
/
create or replace package latchprof as
procedure snap_latchholder(p_sleep in number default 1);
end latchprof;
/
show err
create or replace package body latchprof as
procedure snap_latchholder(p_sleep in number default 1) as
begin
while true loop
insert into latchprof_history
select /*+ LEADING(lh) USE_NL(s) LATCHPROF_INSERT */
systimestamp sample_timestamp
, lh.ksuprpid pid
, lh.ksuprsid sid
, lh.ksuprlat child_address
, lh.ksuprlnm latch_name
, lh.ksuprlmd hold_mode
, lh.ksulawhr where_location
, lh.ksulawhy which_object
, s.ksusesqh sqlhash
, s.ksusesql sqladdr
, s.ksusesph planhash
, s.ksusesch sqlchild
, s.ksusesqi sqlid
from
x$ksuprlat lh
, x$ksuse s
where
lh.ksuprsid = s.indx
;
commit;
dbms_lock.sleep(p_sleep);
end loop; -- while true
end snap_latchholder;
end latchprof;
/
show err
-- 9i version
create or replace view latchprof_view as
select
h.sample_timestamp
, h.pid
, h.sid
, h.child_address
, h.latch_name
, h.hold_mode
, h.where_location
, h.which_object
, h.sqlid
, h.sqlchild
, h.planhash
, h.sqlhash
, h.sqladdr
, r.reason_name
, r.reason_label
from
latchprof_history h
, latchprof_reasons r
where
h.where_location = r.indx
/

View File

@@ -0,0 +1,58 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
drop table mutexprof_history;
create table mutexprof_history
tablespace users
as
select
*
from
x$mutex_sleep_history
where
1=0
/
create or replace package mutexprof as
procedure snap_mutex_sleeps(p_sleep in number default 1);
end mutexprof;
/
show err
create or replace package body mutexprof as
procedure snap_mutex_sleeps(p_sleep in number default 1) as
lv_max_sleep_timestamp timestamp := systimestamp;
type typ is table of x$mutex_sleep_history%rowtype;
t typ;
begin
while true loop
select * bulk collect into t
from x$mutex_sleep_history
where sleep_timestamp > lv_max_sleep_timestamp;
-- get max timestamp so next time we can ignore these rows
for r in 1 .. t.count loop
if t(r).sleep_timestamp > lv_max_sleep_timestamp then
lv_max_sleep_timestamp := t(r).sleep_timestamp;
end if;
end loop;
-- insert
forall r in 1 .. t.count
insert into mutexprof_history values t(r);
commit;
dbms_lock.sleep(p_sleep);
end loop; -- while true
end snap_mutex_sleeps;
end mutexprof;
/
show err

View File

@@ -0,0 +1,109 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
CREATE OR REPLACE PACKAGE plancap_collector AS
PROCEDURE snap_data_files;
PROCEDURE snap_free_space;
PROCEDURE snap_segment_space;
PROCEDURE snap_service_stats;
END plancap_collector;
/
CREATE OR REPLACE PACKAGE BODY plancap_collector AS
PROCEDURE snap_data_files AS
BEGIN
INSERT INTO plancap$data_files
SELECT
sysdate
, tablespace_name
, file_id
, SUM(bytes)
, SUM(blocks)
, relative_fno
FROM
dba_data_files
GROUP BY
sysdate, tablespace_name, file_id, relative_fno;
COMMIT;
END snap_data_files;
PROCEDURE snap_free_space AS
BEGIN
INSERT INTO plancap$free_space
SELECT
sysdate
, tablespace_name
, file_id
, SUM(bytes)
, SUM(blocks)
, relative_fno
FROM
dba_free_space
GROUP BY
sysdate, tablespace_name, file_id, relative_fno;
COMMIT;
END snap_free_space;
PROCEDURE snap_segment_space AS
BEGIN
INSERT INTO plancap$segment_space
SELECT
sysdate
, owner
, segment_name
, NVL(partition_name,'-') partition_name
, segment_type
, tablespace_name
, SUM(bytes) bytes
, SUM(blocks) blocks
, SUM(extents) extents
FROM
dba_segments
GROUP BY
sysdate, owner, segment_name, NVL(partition_name,'-'), tablespace_name, segment_type;
COMMIT;
END snap_segment_space;
PROCEDURE snap_service_stats AS
BEGIN
INSERT INTO plancap$service_stats
WITH sq AS (
SELECT service_name,stat_name,value FROM v$service_stats
)
SELECT
sysdate
, a.service_name
, a.value DB_CPU
, b.value EXECUTE_COUNT
, c.value USER_COMMITS
, d.value USER_CALLS
FROM
sq a
, sq b
, sq c
, sq d
WHERE
a.service_name = b.service_name
AND b.service_name = c.service_name
AND c.service_name = d.service_name
AND a.stat_name = 'DB CPU'
AND b.stat_name = 'execute count'
AND c.stat_name = 'user commits'
AND d.stat_name = 'user calls';
COMMIT;
END;
END plancap_collector;
/
SHOW ERR

View File

@@ -0,0 +1,67 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
-- drop table plancap$data_files;
-- drop table plancap$free_space;
-- drop table plancap$segment_space;
CREATE TABLE plancap$data_files (
snap_time DATE NOT NULL
, tablespace_name VARCHAR2(100) NOT NULL
, file_id NUMBER NOT NULL
, bytes NUMBER NOT NULL
, blocks NUMBER NOT NULL
, relative_fno NUMBER NOT NULL
);
ALTER TABLE plancap$data_files ADD CONSTRAINT pk_data_files
PRIMARY KEY (snap_time,tablespace_name,file_id);
CREATE TABLE plancap$free_space (
snap_time DATE NOT NULL
, tablespace_name VARCHAR2(100) NOT NULL
, file_id NUMBER NOT NULL
, bytes NUMBER NOT NULL
, blocks NUMBER NOT NULL
, relative_fno NUMBER NOT NULL
);
ALTER TABLE plancap$free_space ADD CONSTRAINT pk_free_space
PRIMARY KEY (snap_time,tablespace_name,file_id);
CREATE TABLE plancap$segment_space(
snap_time DATE NOT NULL
, owner VARCHAR2(100) NOT NULL
, segment_name VARCHAR2(100) NOT NULL
, partition_name VARCHAR2(100) NOT NULL
, segment_type VARCHAR2(100) NOT NULL
, tablespace_name VARCHAR2(100) NOT NULL
, bytes NUMBER NOT NULL
, blocks NUMBER NOT NULL
, extents NUMBER NOT NULL
);
ALTER TABLE plancap$segment_space ADD CONSTRAINT pk_segment_space
PRIMARY KEY (snap_time,owner,segment_name,partition_name,segment_type);
CREATE TABLE plancap$service_stats (
snap_time DATE NOT NULL
, service_name VARCHAR2(100) NOT NULL
, db_cpu NUMBER NOT NULL
, execute_count NUMBER NOT NULL
, user_commits NUMBER NOT NULL
, user_calls NUMBER NOT NULL
);
ALTER TABLE plancap$service_stats ADD CONSTRAINT pk_service_stats
PRIMARY KEY (snap_time,service_name);
CREATE PUBLIC SYNONYM plancap$data_files FOR plancap$data_files;
CREATE PUBLIC SYNONYM plancap$free_space FOR plancap$free_space;
CREATE PUBLIC SYNONYM plancap$segment_space FOR plancap$segment_space;
GRANT SELECT ON plancap$data_files to DBA;
GRANT SELECT ON plancap$free_space to DBA;
GRANT SELECT ON plancap$segment_space to DBA;

View File

@@ -0,0 +1,58 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
-- select * from v$shared_pool_reserved;
--CREATE TABLE tanel_ksmspr TABLESPACE USERS AS SELECT * FROM sys.x$ksmspr;
--CREATE TABLE tanel_kglob STORAGE (INITIAL 10M NEXT 10M PCTINCREASE 0) TABLESPACE users AS SELECT * FROM sys.x$kglob;
SELECT
l.kglnaown owner
, l.kglnaobj object_name
, l.kglnahsh hash_value
, decode(l.kglhdnsp,0,'CURSOR',1,'TABLE/PROCEDURE',2,'BODY',3,'TRIGGER', 4,'INDEX',5,'CLUSTER',6,'OBJECT',
13,'JAVA SOURCE',14,'JAVA RESOURCE', 15,'REPLICATED TABLE OBJECT',
16,'REPLICATION INTERNAL PACKAGE',
17,'CONTEXT
POLICY',18,'PUB_SUB',19,'SUMMARY',20,'DIMENSION', 21,'APP CONTEXT',22,'STORED OUTLINE'
,23,'RULESET',24,'RSRC PLAN',
25,'RSRC CONSUMER GROUP',26,'PENDING RSRC PLAN',27,'PENDING RSRC CONSUMER GROUP',
28,'SUBSCRIPTION',29,'LOCATION',30,'REMOTE OBJECT',
31,'SNAPSHOT METADATA',32,'JAVA SHARED DATA',33,'SECURITY PROFILE', 'INVALID NAMESPACE') obj_namespace
, decode(bitand(l.kglobflg,3),0,'NOT LOADED',2,'NON-EXISTENT',3,'INVALID STATUS',
decode(kglobtyp, 0,'CURSOR',1,'INDEX',2,'TABLE',3,'CLUSTER',4,'VIEW',
5,'SYNONYM',6,'SEQUENCE',7,'PROCEDURE',8,'FUNCTION',9,'PACKAGE',10, 'NON-EXISTENT',
11,'PACKAGE BODY',12,'TRIGGER',13,'TYPE',14,'TYPE BODY',
15,'OBJECT',16,'USER',17,'DBLINK',18,'PIPE',19,'TABLE PARTITION'
, 20,'INDEX PARTITION',21,'LOB',22,'LIBRARY',23,'DIRECTORY',24,'QUEUE',
25,'INDEX-ORGANIZED TABLE',26,'REPLICATION OBJECT GROUP',
27,'REPLICATION PROPAGATOR', 28,'JAVA SOURCE',29,'JAVA CLASS',30,'JAVA RESOURCE'
,31,'JAVA JAR', 32,'INDEX TYPE',33,
'OPERATOR',34,'TABLE SUBPARTITION',35,'INDEX SUBPARTITION',
36, 'REPLICATED TABLE OBJECT',37,'REPLICATION INTERNAL PACKAGE', 38,'CONTEXT POLICY'
,39,'PUB_SUB',40,'LOB PARTITION',41,'LOB SUBPARTITION', 42,'SUMMARY',43,'DIMENSION'
,44,'APP CONTEXT',45,'STORED OUTLINE',46,'RULESET', 47,'RSRC PLAN',
48,'RSRC CONSUMER GROUP',49,'PENDING RSRC PLAN', 50,'PENDING RSRC CONSUMER GROUP'
,51,'SUBSCRIPTION',52,'LOCATION', 53,'REMOTE OBJECT',54,'SNAPSHOT METADATA',55,'IFS'
, 56,'JAVA SHARED DATA',57,'SECURITY PROFILE','INVALID TYPE')) obj_type
, s.ksmchptr
, s.ksmchsiz
, s.ksmchcls
, s.ksmchcom
, s.ksmchpar
FROM
tanel_ksmspr s
, tanel_kglob l
-- x$ksmspr s
--, x$kglob l
WHERE
s.ksmchptr = l.kglobhd0
OR s.ksmchptr = l.kglobhd1
OR s.ksmchptr = l.kglobhd2
OR s.ksmchptr = l.kglobhd3
OR s.ksmchptr = l.kglobhd4
OR s.ksmchptr = l.kglobhd5
OR s.ksmchptr = l.kglobhd6
OR s.ksmchptr = l.kglobhd7
ORDER BY
s.ksmchsiz
/

View File

@@ -0,0 +1,204 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
-- monitor shared pool activity, free memory and chunk flushing
--
-- USAGE:
-- exec shared_pool_monitor.get_all( <sampling_interval>, <how_many_samples )
--
-- exec shared_pool_monitor.get_all -- this will sample every 10 minutes, forever
CREATE OR REPLACE PACKAGE shared_pool_monitor AS
PROCEDURE get_subpool_stats (p_date IN DATE DEFAULT SYSDATE);
PROCEDURE get_flush_stats (p_date IN DATE DEFAULT SYSDATE);
PROCEDURE get_heap_activity_stats (p_date IN DATE DEFAULT SYSDATE);
PROCEDURE get_reserved_chunk_stats (p_date IN DATE DEFAULT SYSDATE);
PROCEDURE get_reserved_chunk_details (p_date IN DATE DEFAULT SYSDATE);
PROCEDURE get_all (p_sleep IN NUMBER DEFAULT 600, p_times IN NUMBER DEFAULT 0);
END shared_pool_monitor;
/
SHOW ERR
CREATE OR REPLACE PACKAGE BODY shared_pool_monitor AS
PROCEDURE get_subpool_stats(p_date IN DATE DEFAULT SYSDATE) AS
BEGIN
DBMS_APPLICATION_INFO.SET_ACTION('GET_SUBPOOL_STATS:BEGIN');
INSERT INTO spmon_subpool_stats (sample_time,subpool,name,bytes)
SELECT
SYSDATE
, ksmdsidx
, ksmssnam
, SUM(ksmsslen)
FROM
x$ksmss
WHERE
ksmsslen > 0
AND ksmdsidx > 0
GROUP BY
SYSDATE
, ksmdsidx
, ksmssnam;
COMMIT;
DBMS_APPLICATION_INFO.SET_ACTION('GET_SUBPOOL_STATS:END');
END get_subpool_stats;
PROCEDURE get_flush_stats(p_date IN DATE DEFAULT SYSDATE) AS
BEGIN
DBMS_APPLICATION_INFO.SET_ACTION('GET_FLUSH_STATS:BEGIN');
-- this procedure relies on the fact that X$KSMLRU contents are cleared out
-- automatically every time it's queried
INSERT INTO spmon_flush_stats ( sample_time, addr, indx, inst_id, chunk_subpool
, chunk_duration, chunk_comment , chunk_size
, chunks_flushed_out , flusher_object_name
, flusher_hash_value , flusher_ses_addr )
SELECT
p_date sample_time
, ADDR
, INDX
, INST_ID
, KSMLRIDX
, KSMLRDUR
, KSMLRCOM
, KSMLRSIZ
, KSMLRNUM
, KSMLRHON
, KSMLROHV
, KSMLRSES
FROM
x$ksmlru
WHERE
ksmlrnum > 0;
COMMIT;
DBMS_APPLICATION_INFO.SET_ACTION('GET_FLUSH_STATS:END');
END get_flush_stats;
PROCEDURE get_heap_activity_stats(p_date IN DATE DEFAULT SYSDATE) AS
BEGIN
DBMS_APPLICATION_INFO.SET_ACTION('GET_HEAP_ACTIVITY_STATS:BEGIN');
INSERT INTO spmon_heap_activity_stats
SELECT
p_date
, kghluidx
, kghludur
, kghlufsh
, kghluops
, kghlurcr
, kghlutrn
, kghlunfu
, kghlunfs
, kghlumxa
, kghlumes
, kghlumer
, kghlurcn
, kghlurmi
, kghlurmz
, kghlurmx
FROM
x$kghlu;
COMMIT;
DBMS_APPLICATION_INFO.SET_ACTION('GET_HEAP_ACTIVITY_STATS:END');
END get_heap_activity_stats;
PROCEDURE get_reserved_chunk_details(p_date IN DATE DEFAULT SYSDATE) AS
BEGIN
DBMS_APPLICATION_INFO.SET_ACTION('GET_RESERVED_CHUNKS:BEGIN');
INSERT INTO spmon_reserved_chunk_details
SELECT
p_date
, ADDR
, INDX
, INST_ID
, KSMCHCOM
, KSMCHPTR
, KSMCHSIZ
, KSMCHCLS
, KSMCHTYP
, KSMCHPAR
FROM
x$ksmspr -- important, this view must be x$ksmspR <-- (not the x$ksmsp which may hang your instance)
;
COMMIT;
DBMS_APPLICATION_INFO.SET_ACTION('GET_RESERVED_CHUNKS:END');
END get_reserved_chunk_details;
PROCEDURE get_reserved_chunk_stats(p_date IN DATE DEFAULT SYSDATE) AS
BEGIN
DBMS_APPLICATION_INFO.SET_ACTION('GET_RESERVED_CHUNKS:BEGIN');
INSERT INTO spmon_reserved_chunk_stats
SELECT
p_date
, KSMCHCLS
, KSMCHCOM
, KSMCHTYP
, COUNT(*)
, SUM(KSMCHSIZ)
, AVG(KSMCHSIZ)
, MIN(KSMCHSIZ)
, MAX(KSMCHSIZ)
FROM
x$ksmspr -- important, this view must be x$ksmspR <-- (not the x$ksmsp which may hang your instance)
GROUP BY
p_date
, ksmchcls
, ksmchcom
, ksmchtyp;
COMMIT;
DBMS_APPLICATION_INFO.SET_ACTION('GET_RESERVED_CHUNKS:END');
END get_reserved_chunk_stats;
PROCEDURE get_all(p_sleep IN NUMBER DEFAULT 600, p_times IN NUMBER DEFAULT 0) AS
cur_date DATE;
BEGIN
IF p_times > 0 THEN -- sample x times
FOR i IN 1..p_times LOOP
cur_date := SYSDATE;
get_subpool_stats(cur_date);
get_heap_activity_stats(cur_date);
get_flush_stats(cur_date);
get_reserved_chunk_stats(cur_date);
DBMS_APPLICATION_INFO.SET_ACTION('MAIN LOOP:SLEEPING');
DBMS_LOCK.SLEEP(p_sleep);
END LOOP; -- 1..p_times
ELSE -- sample forever
WHILE TRUE LOOP
cur_date := SYSDATE;
get_subpool_stats(cur_date);
get_heap_activity_stats(cur_date);
get_flush_stats(cur_date);
get_reserved_chunk_stats(cur_date);
DBMS_APPLICATION_INFO.SET_ACTION('MAIN LOOP:SLEEPING');
DBMS_LOCK.SLEEP(p_sleep);
END LOOP; -- while true
END IF; -- p_times > 0
END get_all;
BEGIN
DBMS_APPLICATION_INFO.SET_MODULE('SHARED POOL MONITOR', 'PACKAGE INITIALIZATION');
END shared_pool_monitor;
/
SHOW ERR
GRANT EXECUTE ON shared_pool_monitor TO perfstat;

View File

@@ -0,0 +1,19 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
SELECT
SAMPLE_TIME
, SUBPOOL
, DURATION
, FLUSHED_CHUNKS_D
, LRU_OPERATIONS_D
, RESERVED_SCANS
, RESERVED_MISSES
, UNSUCCESSFUL_FLUSHES
, LAST_UNSUCC_MISS_REQ_SIZE
, LAST_UNSUCC_FLUSH_REQ_SIZE
FROM
sys.SPMON_HEAP_ACTIVITY_VIEW
WHERE
sample_time BETWEEN %FROM_DATE% AND %TO_DATE%

View File

@@ -0,0 +1,124 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
-- change to whichever tablespace you want to create these tables in
DEF tablespace=TOOLS
-- x$ksmss (v$sgastat)
CREATE TABLE spmon_subpool_stats (
sample_time DATE
, subpool NUMBER
, name VARCHAR2(100)
, bytes NUMBER
)
TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0);
-- x$ksmlru
CREATE TABLE spmon_flush_stats (
sample_time DATE
, addr RAW(8)
, indx NUMBER
, inst_id NUMBER
, chunk_subpool NUMBER
, chunk_duration NUMBER
, chunk_comment VARCHAR2(100)
, chunk_size NUMBER
, chunks_flushed_out NUMBER
, flusher_object_name VARCHAR2(100)
, flusher_hash_value NUMBER
, flusher_ses_addr RAW(8)
)
TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0);
-- x$kghlu (part of v$shared_pool_reserved)
CREATE TABLE spmon_heap_activity_stats (
sample_time DATE
, kghluidx NUMBER -- subpool id
, kghludur NUMBER -- allocation duration class
, kghlufsh NUMBER -- chunks flushed
, kghluops NUMBER -- LRU operations (moving chunks around in LRU list)
, kghlurcr NUMBER -- recurrent chunks (pinned/unpinned 3 times or more)
, kghlutrn NUMBER -- transient chunks (pinned 1-2 times)
, kghlumxa NUMBER --
, kghlumes NUMBER --
, kghlumer NUMBER --
, kghlurcn NUMBER -- reserved freelist scans
, kghlurmi NUMBER -- reserved freelist misses
, kghlurmz NUMBER -- last reserved scan miss size
, kghlurmx NUMBER -- reserved list scan max miss size
, kghlunfu NUMBER -- number of free-unpinned unsuccessful attempts
, kghlunfs NUMBER -- last free unpinned unsuccessful size
)
TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0);
CREATE OR REPLACE VIEW spmon_heap_activity_view AS
SELECT
sample_time
, kghluidx subpool
, kghludur duration
, CASE WHEN kghlufsh - NVL(lag(kghlufsh,1) over (partition by kghluidx, kghludur order by sample_time), kghlufsh) < 0
THEN kghlufsh
ELSE kghlufsh - lag(kghlufsh,1) over (partition by kghluidx, kghludur order by sample_time)
END flushed_chunks_d
, CASE WHEN kghluops - NVL(lag(kghluops,1) over (partition by kghluidx, kghludur order by sample_time), kghluops) < 0
THEN kghluops
ELSE kghluops - lag(kghluops,1) over (partition by kghluidx, kghludur order by sample_time)
END lru_operations_d
, CASE WHEN kghlurcn - NVL(lag(kghlurcn,1) over (partition by kghluidx, kghludur order by sample_time), kghlurcn) < 0
THEN kghlurcn
ELSE kghlurcn - lag(kghlurcn,1) over (partition by kghluidx, kghludur order by sample_time)
END reserved_scans
, CASE WHEN kghlurmi - NVL(lag(kghlurmi,1) over (partition by kghluidx, kghludur order by sample_time), kghlurmi) < 0
THEN kghlurmi
ELSE kghlurmi - lag(kghlurmi,1) over (partition by kghluidx, kghludur order by sample_time)
END reserved_misses
, CASE WHEN kghlunfu - NVL(lag(kghlunfu,1) over (partition by kghluidx, kghludur order by sample_time), kghlunfu) < 0
THEN kghlunfu
ELSE kghlunfu - lag(kghlunfu,1) over (partition by kghluidx, kghludur order by sample_time)
END unsuccessful_flushes
, kghlurmz last_unsucc_miss_req_size
, kghlunfs last_unsucc_flush_req_size
FROM
spmon_heap_activity_stats
/
-- chunk details (all chunks in reserved area are dumped here)
-- x$ksmspr (v$shared_pool_reserved)
CREATE TABLE spmon_reserved_chunk_details (
sample_time DATE
, addr RAW(8)
, indx NUMBER
, inst_id NUMBER
, ksmchcom VARCHAR2(100)
, ksmchptr RAW(8)
, ksmchsiz NUMBER
, ksmchcls VARCHAR2(100)
, ksmchtyp NUMBER
, ksmchpar RAW(8)
)
TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0);
-- min,max,avg chunk size grouped by chunk type and (allocation reason) comment
-- x$ksmspr (v$shared_pool_reserved) summary
CREATE TABLE spmon_reserved_chunk_stats (
sample_time DATE
, ksmchcls VARCHAR2(100)
, ksmchcom VARCHAR2(100)
, ksmchtype NUMBER
, chunk_count NUMBER
, total_size NUMBER
, avg_size NUMBER
, min_size NUMBER
, max_size NUMBER
)
TABLESPACE &tablespace STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0);
GRANT SELECT ON SPMON_FLUSH_STATS TO PERFSTAT;
GRANT SELECT ON SPMON_HEAP_ACTIVITY_STATS TO PERFSTAT;
GRANT SELECT ON SPMON_RESERVED_CHUNK_DETAILS TO PERFSTAT;
GRANT SELECT ON SPMON_RESERVED_CHUNK_STATS TO PERFSTAT;
GRANT SELECT ON SPMON_SUBPOOL_STATS TO PERFSTAT;
GRANT SELECT ON spmon_heap_activity_view TO PERFSTAT;

View File

@@ -0,0 +1,13 @@
-- Copyright 2018 Tanel Poder. All rights reserved. More info at http://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
-- this script requires PLANCAP_COLLECTOR package
-- which is created using these scripts
-- 1) plancap_collector_schema.sql
-- 2) plancap_collector.sql
EXEC SNAP_DATA_FILES
EXEC SNAP_FREE_SPACE
EXEC SNAP_SEGMENT_SPACE
EXEC SNAP_SERVICE_STATS