2026-03-12 20:23:15
This commit is contained in:
2478
vg/Exadata_commands.txt
Normal file
2478
vg/Exadata_commands.txt
Normal file
File diff suppressed because it is too large
Load Diff
114
vg/Incremental_Cube_Build_UNIX.sql
Normal file
114
vg/Incremental_Cube_Build_UNIX.sql
Normal file
@@ -0,0 +1,114 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- ENABLLING LOGGING
|
||||
|
||||
BEGIN
|
||||
SYS.DBMS_CUBE_LOG.ENABLE(NULL, NULL, 3, 'CUBE_BUILD_LOG');
|
||||
END ;
|
||||
/
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- LOAD DIMENSIONS
|
||||
|
||||
BEGIN
|
||||
|
||||
EXECUTE IMMEDIATE ' ALTER SESSION ENABLE PARALLEL DML ' ;
|
||||
EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP PARALLEL 12 ' ;
|
||||
|
||||
DBMS_CUBE.BUILD(
|
||||
'
|
||||
CRM_DW_OWN.CONTACT_PARTNERSHIPS_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
),
|
||||
CRM_DW_OWN.FIRM_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
),
|
||||
CRM_DW_OWN.OFFICE_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
),
|
||||
CRM_DW_OWN.RETAILPRODUCT_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
),
|
||||
CRM_DW_OWN.TERRITORY_2_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
),
|
||||
CRM_DW_OWN.TERRITORY_3_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
),
|
||||
CRM_DW_OWN.TERRITORY_4_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
),
|
||||
CRM_DW_OWN.TERRITORY_5_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
),
|
||||
CRM_DW_OWN.TERRITORY_DIM USING
|
||||
(
|
||||
LOAD NO SYNCH,
|
||||
COMPILE SORT
|
||||
)',
|
||||
'CCCCCCCCC', -- refresh method
|
||||
false, -- refresh after errors
|
||||
2, -- parallelism
|
||||
false, -- atomic refresh
|
||||
false, -- automatic order
|
||||
false -- add dimensions
|
||||
);
|
||||
|
||||
EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP NOPARALLEL ' ;
|
||||
|
||||
END;
|
||||
/
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- LOAD TRANSCTION_CUBE
|
||||
|
||||
BEGIN
|
||||
|
||||
EXECUTE IMMEDIATE ' ALTER SESSION ENABLE PARALLEL DML ' ;
|
||||
EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.FACT_TRANSACTIONS PARALLEL 8 ' ;
|
||||
|
||||
DBMS_CUBE.BUILD(
|
||||
' CRM_DW_OWN.TRANSACTION_CUBE USING
|
||||
( LOAD PRUNE,
|
||||
SOLVE
|
||||
)',
|
||||
'S', -- refresh method
|
||||
false, -- refresh after errors
|
||||
6, -- parallelism
|
||||
false, -- atomic refresh
|
||||
true, -- automatic order
|
||||
false -- add dimensions
|
||||
);
|
||||
|
||||
EXECUTE IMMEDIATE ' ALTER TABLE CRM_DW_OWN.FACT_TRANSACTIONS NOPARALLEL ' ;
|
||||
|
||||
END;
|
||||
/
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- UPDATE BUILD_TYPE
|
||||
|
||||
UPDATE CRM_DW_OWN.BUILD_TYPE
|
||||
SET BUILD_FLAG = 'T',
|
||||
UPDATE_DT = SYSTIMESTAMP
|
||||
WHERE (TARGET_NAME = 'CRM_DW_OWN.DIM_FIRM' AND BUILD_FLAG = 'F')
|
||||
OR (TARGET_NAME = 'CRM_DW_OWN.DIM_OFFICE' AND BUILD_FLAG = 'F')
|
||||
OR (TARGET_NAME = 'CRM_DW_OWN.DIM_CONTACT_PARTNERSHIP' AND BUILD_FLAG = 'F')
|
||||
OR (TARGET_NAME = 'CRM_DW_OWN.FACT_TRANSACTIONS' AND BUILD_FLAG = 'F');
|
||||
|
||||
COMMIT ;
|
||||
BIN
vg/TPT_public.zip
Normal file
BIN
vg/TPT_public.zip
Normal file
Binary file not shown.
42
vg/TimesTen_commands.txt
Normal file
42
vg/TimesTen_commands.txt
Normal file
@@ -0,0 +1,42 @@
|
||||
Check for connection DSN name in following odbc.ini files.
|
||||
|
||||
############################
|
||||
# ODBC ini file locations
|
||||
############################
|
||||
/opt/TimesTen/tt112230/info/sys.odbc.ini
|
||||
|
||||
|
||||
############################
|
||||
# Start/Stop/Restart Timesten MAIN daemon
|
||||
# -force Starts or stops the TimesTen main daemon, even when warnings are returned.
|
||||
ttDaemonAdmin [-force] {-start | -stop | -restart}
|
||||
|
||||
|
||||
############################
|
||||
# Start/Stop/Restart Timesten Server daemon
|
||||
# -force immediately stops the server processes.
|
||||
ttDaemonAdmin [ -startserver | -restartserver ]
|
||||
ttDaemonAdmin [-force] -stopserver
|
||||
ttDaemonAdmin
|
||||
|
||||
############################
|
||||
# Display Timesten status
|
||||
ttStatus {-h | -help | -?}
|
||||
ttStatus {-V | -version}
|
||||
ttStatus [-v] [-r secs] [-[no]pretty]
|
||||
ttStatus [-r secs] [-[no]pretty] {DSN | -connStr connection_string | dspath}
|
||||
|
||||
|
||||
|
||||
############################
|
||||
# Transaction
|
||||
############################
|
||||
ttIsql -connStr "DSN=aceds;"
|
||||
Command> call ttLogHolds;
|
||||
Command>
|
||||
|
||||
############################
|
||||
# Display Query Plan
|
||||
############################
|
||||
ttIsql -connStr "DSN=aceds;"
|
||||
Command> call ttSQLCmdQueryPlan(25215090200);
|
||||
3854
vg/_README.htm
Normal file
3854
vg/_README.htm
Normal file
File diff suppressed because it is too large
Load Diff
BIN
vg/_README.xls
Normal file
BIN
vg/_README.xls
Normal file
Binary file not shown.
338
vg/amm_info.sql
Normal file
338
vg/amm_info.sql
Normal file
@@ -0,0 +1,338 @@
|
||||
@@header
|
||||
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Tablespace usage
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -------------------------------------------------
|
||||
* 26-Jan-15 Vishal Gupta Renamed oper_count heading to "Resize Oper Count"
|
||||
* 24-FEB-14 Vishal Gupta Modified to make instance specific columns dynamic.
|
||||
* 28-MAY-12 Vishal Gupta Fixed to differentiate between instance specific
|
||||
* and generic (*.param) parameter values in spfile
|
||||
* 14-MAR-12 Vishal Gupta Modified to make it RAC friendly
|
||||
* 15-SEP-08 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
define _IF_INST1_EXISTS="--"
|
||||
define _IF_INST2_EXISTS="--"
|
||||
define _IF_INST3_EXISTS="--"
|
||||
define _IF_INST4_EXISTS="--"
|
||||
define _IF_INST5_EXISTS="--"
|
||||
define _IF_INST6_EXISTS="--"
|
||||
define _IF_INST7_EXISTS="--"
|
||||
define _IF_INST8_EXISTS="--"
|
||||
define _IF_INST9_EXISTS="--"
|
||||
define _IF_INST10_EXISTS="--"
|
||||
define _IF_INST11_EXISTS="--"
|
||||
define _IF_INST12_EXISTS="--"
|
||||
define _IF_INST13_EXISTS="--"
|
||||
define _IF_INST14_EXISTS="--"
|
||||
define _IF_INST15_EXISTS="--"
|
||||
define _IF_INST16_EXISTS="--"
|
||||
|
||||
col INST1_EXISTS new_value _IF_INST1_EXISTS noprint
|
||||
col INST2_EXISTS new_value _IF_INST2_EXISTS noprint
|
||||
col INST3_EXISTS new_value _IF_INST3_EXISTS noprint
|
||||
col INST4_EXISTS new_value _IF_INST4_EXISTS noprint
|
||||
col INST5_EXISTS new_value _IF_INST5_EXISTS noprint
|
||||
col INST6_EXISTS new_value _IF_INST6_EXISTS noprint
|
||||
col INST7_EXISTS new_value _IF_INST7_EXISTS noprint
|
||||
col INST8_EXISTS new_value _IF_INST8_EXISTS noprint
|
||||
col INST9_EXISTS new_value _IF_INST9_EXISTS noprint
|
||||
col INST10_EXISTS new_value _IF_INST10_EXISTS noprint
|
||||
col INST11_EXISTS new_value _IF_INST11_EXISTS noprint
|
||||
col INST12_EXISTS new_value _IF_INST12_EXISTS noprint
|
||||
col INST13_EXISTS new_value _IF_INST13_EXISTS noprint
|
||||
col INST14_EXISTS new_value _IF_INST14_EXISTS noprint
|
||||
col INST15_EXISTS new_value _IF_INST15_EXISTS noprint
|
||||
col INST16_EXISTS new_value _IF_INST16_EXISTS noprint
|
||||
|
||||
set term off
|
||||
SELECT MIN(DECODE(inst_id,1,' ', '--')) INST1_EXISTS
|
||||
, MIN(DECODE(inst_id,2,' ', '--')) INST2_EXISTS
|
||||
, MIN(DECODE(inst_id,3,' ', '--')) INST3_EXISTS
|
||||
, MIN(DECODE(inst_id,4,' ', '--')) INST4_EXISTS
|
||||
, MIN(DECODE(inst_id,5,' ', '--')) INST5_EXISTS
|
||||
, MIN(DECODE(inst_id,6,' ', '--')) INST6_EXISTS
|
||||
, MIN(DECODE(inst_id,7,' ', '--')) INST7_EXISTS
|
||||
, MIN(DECODE(inst_id,8,' ', '--')) INST8_EXISTS
|
||||
, MIN(DECODE(inst_id,9,' ', '--')) INST9_EXISTS
|
||||
, MIN(DECODE(inst_id,10,' ', '--')) INST10_EXISTS
|
||||
, MIN(DECODE(inst_id,11,' ', '--')) INST11_EXISTS
|
||||
, MIN(DECODE(inst_id,12,' ', '--')) INST12_EXISTS
|
||||
, MIN(DECODE(inst_id,13,' ', '--')) INST13_EXISTS
|
||||
, MIN(DECODE(inst_id,14,' ', '--')) INST14_EXISTS
|
||||
, MIN(DECODE(inst_id,15,' ', '--')) INST15_EXISTS
|
||||
, MIN(DECODE(inst_id,16,' ', '--')) INST16_EXISTS
|
||||
FROM gv$instance
|
||||
GROUP BY version
|
||||
;
|
||||
set term on
|
||||
|
||||
PROMPT
|
||||
PROMPT #############################################################
|
||||
PROMPT ####### #######
|
||||
PROMPT ####### Automatic Memory Management Settings #######
|
||||
PROMPT ####### #######
|
||||
PROMPT #############################################################
|
||||
PROMPT
|
||||
|
||||
COLUMN inst_id HEADING "Inst#" FORMAT 99999
|
||||
COLUMN name HEADING "Name" FORMAT a21
|
||||
|
||||
COLUMN current_value1 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value2 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value3 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value4 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value5 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value6 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value7 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value8 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value9 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value10 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value11 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value12 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value13 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value14 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value15 HEADING "Current" FORMAT a7
|
||||
COLUMN current_value16 HEADING "Current" FORMAT a7
|
||||
|
||||
COLUMN spfile_value1 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value2 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value3 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value4 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value5 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value6 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value7 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value8 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value9 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value10 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value11 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value12 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value13 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value14 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value15 HEADING "SPFile" FORMAT a7
|
||||
COLUMN spfile_value16 HEADING "SPFile" FORMAT a7
|
||||
|
||||
COLUMN end_column HEADING " " FORMAT a1
|
||||
|
||||
set colsep '|'
|
||||
|
||||
set head off
|
||||
SELECT '- '
|
||||
&&_IF_INST1_EXISTS || ' <---Inst 1 --->'
|
||||
&&_IF_INST2_EXISTS || ' <---Inst 2 --->'
|
||||
&&_IF_INST3_EXISTS || ' <---Inst 3 --->'
|
||||
&&_IF_INST4_EXISTS || ' <---Inst 4 --->'
|
||||
&&_IF_INST5_EXISTS || ' <---Inst 5 --->'
|
||||
&&_IF_INST6_EXISTS || ' <---Inst 6 --->'
|
||||
&&_IF_INST7_EXISTS || ' <---Inst 7 --->'
|
||||
&&_IF_INST8_EXISTS || ' <---Inst 8 --->'
|
||||
FROM DUAL;
|
||||
set head on
|
||||
|
||||
select RPAD(pp.name,20) name
|
||||
&&_IF_INST1_EXISTS , MAX(DECODE(pp.inst_id, 1, pp.display_value,NULL)) current_value1
|
||||
&&_IF_INST1_EXISTS , MAX(DECODE(pp.inst_id, 1, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value1
|
||||
&&_IF_INST2_EXISTS , MAX(DECODE(pp.inst_id, 2, pp.display_value,NULL)) current_value2
|
||||
&&_IF_INST2_EXISTS , MAX(DECODE(pp.inst_id, 2, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value2
|
||||
&&_IF_INST3_EXISTS , MAX(DECODE(pp.inst_id, 3, pp.display_value,NULL)) current_value3
|
||||
&&_IF_INST3_EXISTS , MAX(DECODE(pp.inst_id, 3, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value3
|
||||
&&_IF_INST4_EXISTS , MAX(DECODE(pp.inst_id, 4, pp.display_value,NULL)) current_value4
|
||||
&&_IF_INST4_EXISTS , MAX(DECODE(pp.inst_id, 4, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value4
|
||||
&&_IF_INST5_EXISTS , MAX(DECODE(pp.inst_id, 5, pp.display_value,NULL)) current_value5
|
||||
&&_IF_INST5_EXISTS , MAX(DECODE(pp.inst_id, 5, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value5
|
||||
&&_IF_INST6_EXISTS , MAX(DECODE(pp.inst_id, 6, pp.display_value,NULL)) current_value6
|
||||
&&_IF_INST6_EXISTS , MAX(DECODE(pp.inst_id, 6, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value6
|
||||
&&_IF_INST7_EXISTS , MAX(DECODE(pp.inst_id, 7, pp.display_value,NULL)) current_value7
|
||||
&&_IF_INST7_EXISTS , MAX(DECODE(pp.inst_id, 7, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value7
|
||||
&&_IF_INST8_EXISTS , MAX(DECODE(pp.inst_id, 8, pp.display_value,NULL)) current_value8
|
||||
&&_IF_INST8_EXISTS , MAX(DECODE(pp.inst_id, 8, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value8
|
||||
, ' ' end_column
|
||||
from gv$system_parameter pp
|
||||
JOIN gv$instance i ON pp.inst_id = i.inst_id
|
||||
LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name
|
||||
LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name
|
||||
WHERE ( pp.name in ('memory_target','memory_max_target'
|
||||
,'sga_target','sga_max_size'
|
||||
,'lock_sga','pre_page_sga','use_large_pages'
|
||||
,'pga_aggregate_target'
|
||||
,'java_pool_size','shared_pool_size','large_pool_size'
|
||||
,'db_cache_size'
|
||||
)
|
||||
)
|
||||
GROUP BY pp.name
|
||||
UNION ALL
|
||||
-- Get Host physical memory
|
||||
select RPAD(os.stat_name,20) name
|
||||
&&_IF_INST1_EXISTS , MAX(DECODE(os.inst_id, 1, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value1
|
||||
&&_IF_INST1_EXISTS , NULL spfile_value1
|
||||
&&_IF_INST2_EXISTS , MAX(DECODE(os.inst_id, 2, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value2
|
||||
&&_IF_INST2_EXISTS , NULL spfile_value2
|
||||
&&_IF_INST3_EXISTS , MAX(DECODE(os.inst_id, 3, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value3
|
||||
&&_IF_INST3_EXISTS , NULL spfile_value3
|
||||
&&_IF_INST4_EXISTS , MAX(DECODE(os.inst_id, 4, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value4
|
||||
&&_IF_INST4_EXISTS , NULL spfile_value4
|
||||
&&_IF_INST5_EXISTS , MAX(DECODE(os.inst_id, 5, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value5
|
||||
&&_IF_INST5_EXISTS , NULL spfile_value5
|
||||
&&_IF_INST6_EXISTS , MAX(DECODE(os.inst_id, 6, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value6
|
||||
&&_IF_INST6_EXISTS , NULL spfile_value6
|
||||
&&_IF_INST7_EXISTS , MAX(DECODE(os.inst_id, 7, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value7
|
||||
&&_IF_INST7_EXISTS , NULL spfile_value7
|
||||
&&_IF_INST8_EXISTS , MAX(DECODE(os.inst_id, 8, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value8
|
||||
&&_IF_INST8_EXISTS , NULL spfile_value8
|
||||
, ' ' end_column
|
||||
from gv$osstat os
|
||||
where os.stat_name = 'PHYSICAL_MEMORY_BYTES'
|
||||
GROUP BY os.stat_name
|
||||
ORDER BY 1
|
||||
/
|
||||
|
||||
|
||||
|
||||
set head off
|
||||
SELECT '- '
|
||||
&&_IF_INST9_EXISTS || ' <---Inst 9 --->'
|
||||
&&_IF_INST10_EXISTS || ' <---Inst 10--->'
|
||||
&&_IF_INST11_EXISTS || ' <---Inst 11--->'
|
||||
&&_IF_INST12_EXISTS || ' <---Inst 12--->'
|
||||
&&_IF_INST13_EXISTS || ' <---Inst 13--->'
|
||||
&&_IF_INST14_EXISTS || ' <---Inst 14--->'
|
||||
&&_IF_INST15_EXISTS || ' <---Inst 15--->'
|
||||
&&_IF_INST16_EXISTS || ' <---Inst 16--->'
|
||||
FROM DUAL;
|
||||
set head on
|
||||
|
||||
select RPAD(pp.name,20) name
|
||||
&&_IF_INST9_EXISTS , MAX(DECODE(pp.inst_id, 9, pp.display_value,NULL)) current_value9
|
||||
&&_IF_INST9_EXISTS , MAX(DECODE(pp.inst_id, 9, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value9
|
||||
&&_IF_INST10_EXISTS , MAX(DECODE(pp.inst_id, 10, pp.display_value,NULL)) current_value10
|
||||
&&_IF_INST10_EXISTS , MAX(DECODE(pp.inst_id, 10, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value10
|
||||
&&_IF_INST11_EXISTS , MAX(DECODE(pp.inst_id, 11, pp.display_value,NULL)) current_value11
|
||||
&&_IF_INST11_EXISTS , MAX(DECODE(pp.inst_id, 11, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value11
|
||||
&&_IF_INST12_EXISTS , MAX(DECODE(pp.inst_id, 12, pp.display_value,NULL)) current_value12
|
||||
&&_IF_INST12_EXISTS , MAX(DECODE(pp.inst_id, 12, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value12
|
||||
&&_IF_INST13_EXISTS , MAX(DECODE(pp.inst_id, 13, pp.display_value,NULL)) current_value13
|
||||
&&_IF_INST13_EXISTS , MAX(DECODE(pp.inst_id, 13, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value13
|
||||
&&_IF_INST14_EXISTS , MAX(DECODE(pp.inst_id, 14, pp.display_value,NULL)) current_value14
|
||||
&&_IF_INST14_EXISTS , MAX(DECODE(pp.inst_id, 14, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value14
|
||||
&&_IF_INST15_EXISTS , MAX(DECODE(pp.inst_id, 15, pp.display_value,NULL)) current_value15
|
||||
&&_IF_INST15_EXISTS , MAX(DECODE(pp.inst_id, 15, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value15
|
||||
&&_IF_INST16_EXISTS , MAX(DECODE(pp.inst_id, 16, pp.display_value,NULL)) current_value16
|
||||
&&_IF_INST16_EXISTS , MAX(DECODE(pp.inst_id, 16, NVL(sp.display_value,sp_generic.display_value) ,NULL)) spfile_value16
|
||||
, ' ' end_column
|
||||
from gv$system_parameter pp
|
||||
JOIN gv$instance i ON pp.inst_id = i.inst_id
|
||||
LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name
|
||||
LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name
|
||||
WHERE ( pp.name in ('memory_target','memory_max_target'
|
||||
,'sga_target','sga_max_size'
|
||||
,'lock_sga','pre_page_sga','use_large_pages'
|
||||
,'pga_aggregate_target'
|
||||
,'java_pool_size','shared_pool_size','large_pool_size'
|
||||
)
|
||||
)
|
||||
AND i.inst_id > 8
|
||||
GROUP BY pp.name
|
||||
UNION ALL
|
||||
-- Get Host physical memory
|
||||
select RPAD(os.stat_name,20) name
|
||||
&&_IF_INST9_EXISTS , MAX(DECODE(os.inst_id, 9, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value9
|
||||
&&_IF_INST9_EXISTS , NULL spfile_value9
|
||||
&&_IF_INST10_EXISTS , MAX(DECODE(os.inst_id, 10, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value10
|
||||
&&_IF_INST10_EXISTS , NULL spfile_value10
|
||||
&&_IF_INST11_EXISTS , MAX(DECODE(os.inst_id, 11, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value11
|
||||
&&_IF_INST11_EXISTS , NULL spfile_value11
|
||||
&&_IF_INST12_EXISTS , MAX(DECODE(os.inst_id, 12, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value12
|
||||
&&_IF_INST12_EXISTS , NULL spfile_value12
|
||||
&&_IF_INST13_EXISTS , MAX(DECODE(os.inst_id, 13, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value13
|
||||
&&_IF_INST13_EXISTS , NULL spfile_value13
|
||||
&&_IF_INST14_EXISTS , MAX(DECODE(os.inst_id, 14, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value14
|
||||
&&_IF_INST14_EXISTS , NULL spfile_value14
|
||||
&&_IF_INST15_EXISTS , MAX(DECODE(os.inst_id, 15, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value15
|
||||
&&_IF_INST15_EXISTS , NULL spfile_value15
|
||||
&&_IF_INST16_EXISTS , MAX(DECODE(os.inst_id, 16, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value16
|
||||
&&_IF_INST16_EXISTS , NULL spfile_value16
|
||||
, ' ' end_column
|
||||
from gv$osstat os
|
||||
where os.stat_name = 'PHYSICAL_MEMORY_BYTES'
|
||||
AND os.inst_id > 8
|
||||
GROUP BY os.stat_name
|
||||
ORDER BY 1
|
||||
/
|
||||
|
||||
|
||||
|
||||
set colsep " "
|
||||
|
||||
|
||||
COLUMN component HEADING "Component" FORMAT a24
|
||||
COLUMN user_specified_size HEADING "User|Specified|(MB)" FORMAT 99,999,999
|
||||
COLUMN current_size HEADING "Current|(MB)" FORMAT 99,999,999
|
||||
COLUMN free_size HEADING "Free|(MB)" FORMAT 99,999,999
|
||||
COLUMN min_size HEADING "Min|(MB)" FORMAT 99,999,999
|
||||
COLUMN max_size HEADING "Max|(MB)" FORMAT 99,999,999
|
||||
COLUMN GRANULE_SIZE HEADING "Granule|(MB)" FORMAT 9,999
|
||||
COLUMN last_oper_type HEADING "Last|Operation|Type" FORMAT a12
|
||||
COLUMN oper_count HEADING "Resize|Oper|Count" FORMAT 99,999
|
||||
COLUMN last_oper_time HEADING "Last|Operation|Time" FORMAT a18
|
||||
|
||||
BREAK ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF current_size FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF free_size FORMAT 99,999,999 ON REPORT
|
||||
|
||||
BREAK ON inst_id SKIP 1
|
||||
|
||||
SELECT c.inst_id
|
||||
, c.component
|
||||
, ROUND(c.user_specified_size / power(1024,2)) user_specified_size
|
||||
, ROUND(c.current_size / power(1024,2)) current_size
|
||||
, ROUND(DECODE(c.component
|
||||
,'PGA Target',NVL(p.value,0)
|
||||
, ROUND(NVL(s.bytes,0))
|
||||
)
|
||||
/ power(1024,2)
|
||||
) free_size
|
||||
, ROUND(c.min_size / power(1024,2)) min_size
|
||||
, ROUND(c.max_size / power(1024,2)) max_size
|
||||
, ROUND(c.GRANULE_SIZE / power(1024,2)) GRANULE_SIZE
|
||||
, c.oper_count
|
||||
, c.last_oper_type
|
||||
, to_char(c.last_oper_time,'DD-MON-YY hh24:mi:Ss') last_oper_time
|
||||
FROM gv$memory_dynamic_components c
|
||||
LEFT OUTER JOIN GV$SGASTAT s ON s.inst_id = c.inst_id AND s.pool = c.component AND s.name = 'free memory'
|
||||
LEFT OUTER JOIN gv$pgastat p ON p.inst_id = c.inst_id AND p.name = 'total freeable PGA memory'
|
||||
WHERE c.current_size <> 0
|
||||
ORDER BY c.inst_id, c.component
|
||||
/
|
||||
|
||||
|
||||
|
||||
undefine _IF_INST1_EXISTS
|
||||
undefine _IF_INST2_EXISTS
|
||||
undefine _IF_INST3_EXISTS
|
||||
undefine _IF_INST4_EXISTS
|
||||
undefine _IF_INST5_EXISTS
|
||||
undefine _IF_INST6_EXISTS
|
||||
undefine _IF_INST7_EXISTS
|
||||
undefine _IF_INST8_EXISTS
|
||||
undefine _IF_INST9_EXISTS
|
||||
undefine _IF_INST10_EXISTS
|
||||
undefine _IF_INST11_EXISTS
|
||||
undefine _IF_INST12_EXISTS
|
||||
undefine _IF_INST13_EXISTS
|
||||
undefine _IF_INST14_EXISTS
|
||||
undefine _IF_INST15_EXISTS
|
||||
undefine _IF_INST16_EXISTS
|
||||
|
||||
|
||||
@@footer
|
||||
75
vg/apex_queries.sql
Normal file
75
vg/apex_queries.sql
Normal file
@@ -0,0 +1,75 @@
|
||||
--------------------------------------------------------------------------------------------
|
||||
-- Apex Activity Logs
|
||||
--------------------------------------------------------------------------------------------
|
||||
select * From apex_040100.WWV_FLOW_ACTIVITY_LOG1$ order by TIME_STAMP desc;
|
||||
select * From apex_040100.WWV_FLOW_ACTIVITY_LOG2$ order by TIME_STAMP desc;
|
||||
|
||||
|
||||
---------------
|
||||
-- Hourly Hits
|
||||
---------------
|
||||
select TRUNC(al.time_stamp,'HH24'), count(1)
|
||||
From (select * from apex_040100.WWV_FLOW_ACTIVITY_LOG1$
|
||||
union all
|
||||
select * from apex_040100.WWV_FLOW_ACTIVITY_LOG2$
|
||||
)al
|
||||
group by TRUNC(al.time_stamp,'HH24')
|
||||
order by TRUNC(al.time_stamp,'HH24') desc;
|
||||
|
||||
|
||||
|
||||
-----------------------------------
|
||||
-- Apex Mail test
|
||||
-----------------------------------
|
||||
declare
|
||||
l_workspace_id apex_workspaces.workspace_id%type;
|
||||
begin
|
||||
SELECT app.workspace_id
|
||||
into l_workspace_id
|
||||
FROM apex_applications app
|
||||
WHERE app.application_id = 508;
|
||||
wwv_flow_api.set_security_group_id(l_workspace_id);
|
||||
|
||||
apex_mail.send(p_to => 'vishal@vishalgupta.com (Vishal Gupta),email@domain.com (Firstname Surname)',
|
||||
p_from => 'from@domain.com',
|
||||
p_body => 'Testing',
|
||||
p_body_html => '<html><b>This is testing</b></html>',
|
||||
p_subj => 'Testing Email',
|
||||
p_cc => 'cc@domain.com',
|
||||
p_bcc => null);
|
||||
APEX_MAIL.PUSH_QUEUE;
|
||||
end;
|
||||
/
|
||||
|
||||
-----------------------------------
|
||||
-- Apex Mail Log
|
||||
-----------------------------------
|
||||
SELECT * from APEX_040100.WWV_FLOW_MAIL_LOG ORDER BY last_updated_on desc;
|
||||
SELECT * from APEX_040100.WWV_FLOW_MAIL_QUEUE ORDER BY last_updated_on desc;
|
||||
SELECT * from APEX_040100.WWV_FLOW_MAIL_ATTACHMENTS ORDER BY last_updated_on desc;
|
||||
|
||||
|
||||
|
||||
SELECT last_updated_on, last_updated_by, mail_from, mail_to, mail_bcc, mail_cc, mail_subj from APEX_040100.WWV_FLOW_MAIL_LOG ORDER BY LAST_UPDATED_ON DESC;
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------------------
|
||||
-- Apex email settings
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
- Login to Apex INTERNAL workspace using admin user
|
||||
- Manage Instances
|
||||
- Instance settings
|
||||
- Click on Email tab
|
||||
SMTP Host Address
|
||||
SMTP Host Port
|
||||
SMTP Authentication Username
|
||||
SMTP Authentication Password
|
||||
Use SSL/TLS
|
||||
Administration Email Address
|
||||
Notification Email Address
|
||||
Maximum Emails per Workspace
|
||||
|
||||
|
||||
|
||||
102
vg/archive_dest.sql
Normal file
102
vg/archive_dest.sql
Normal file
@@ -0,0 +1,102 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Archive Destination Configuration
|
||||
* Parameters : NONE
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 21-Apr-15 Vishal Gupta Conditional multiple Oracle version output
|
||||
* 09-May-14 Vishal Gupta Output layout changes
|
||||
* 19-Mar-14 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * Archive Destinations
|
||||
PROMPT *****************************************************************
|
||||
|
||||
COLUMN dest_id HEADING "Dest|Id" FORMAT 99
|
||||
COLUMN dest_name HEADING "Dest Name" FORMAT a20
|
||||
COLUMN db_unique_name HEADING "UniqueName" FORMAT a15
|
||||
COLUMN destination HEADING "Destination" FORMAT a25
|
||||
COLUMN name_space HEADING "Name|Space" FORMAT a8
|
||||
COLUMN compression HEADING "Compress" FORMAT a8
|
||||
COLUMN archiver HEADING "Arch|iver" FORMAT a4
|
||||
COLUMN transmit_mode HEADING "Transmit|Mode"
|
||||
COLUMN affirm HEADING "AFFIRM" FORMAT a6
|
||||
|
||||
COLUMN reopen_secs HEADING "Reopen|(sec)" FORMAT 999999
|
||||
COLUMN delay_mins HEADING "Delay|(min)" FORMAT 99999
|
||||
COLUMN max_connections HEADING "Max|Conns" FORMAT 99999
|
||||
COLUMN net_timeout HEADING "Net|Time|Out|(sec)" FORMAT 9999
|
||||
COLUMN alternate HEADING "Alertnate" FORMAT a10
|
||||
COLUMN dependency HEADING "Dependency" FORMAT a10
|
||||
|
||||
COLUMN register HEADING "Regi|ster" FORMAT a4
|
||||
COLUMN log_sequence HEADING "LogSeq" FORMAT 9999999
|
||||
|
||||
COLUMN async_blocks HEADING "ASYNC|Blocks" FORMAT 999999
|
||||
COLUMN valid_now HEADING "Valid|Now" FORMAT a7
|
||||
COLUMN verify HEADING "Verify" FORMAT a6
|
||||
|
||||
COLUMN applied_scn HEADING "Applied SCN" FORMAT 99999999999999
|
||||
COLUMN applied_time HEADING "Applied Time" FORMAT a18
|
||||
|
||||
COLUMN fail_date HEADING "FailDate" FORMAT a15
|
||||
COLUMN fail_sequence HEADING "FailSeq" FORMAT 9999999
|
||||
COLUMN failure_count HEADING "Fail|Count" FORMAT 99999
|
||||
COLUMN max_failure HEADING "Max|Fail" FORMAT 99999
|
||||
COLUMN error HEADING "Error" FORMAT a30
|
||||
|
||||
SELECT ad.dest_id
|
||||
, ad.dest_name
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , ad.db_unique_name
|
||||
, ad.destination
|
||||
, ad.status
|
||||
, ad.schedule
|
||||
, ad.target
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_type
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_role
|
||||
, ad.binding
|
||||
, ad.name_space
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ad.compression
|
||||
, ad.archiver
|
||||
, ad.transmit_mode
|
||||
, ad.affirm
|
||||
FROM v$archive_dest ad
|
||||
WHERE status <> 'INACTIVE'
|
||||
;
|
||||
|
||||
SELECT ad.dest_id
|
||||
, ad.delay_mins
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , ad.max_connections
|
||||
, ad.max_failure
|
||||
, ad.reopen_secs
|
||||
, ad.net_timeout
|
||||
, ad.process
|
||||
, ad.register
|
||||
, ad.log_sequence
|
||||
, ad.alternate
|
||||
, ad.dependency
|
||||
, ad.async_blocks
|
||||
, ad.type
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , ad.valid_now
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , ad.verify
|
||||
&&_IF_ORA_11202_OR_HIGHER , ad.applied_scn
|
||||
--&&_IF_ORA_11202_OR_HIGHER , TO_CHAR(SCN_TO_TIMESTAMP(ad.applied_scn),'DD-MON-YY HH24:MI') applied_time
|
||||
&&_IF_ORA_11202_OR_HIGHER , TO_CHAR(ad.fail_date,'DD-MON-YY HH24:MI') fail_date
|
||||
, ad.fail_sequence
|
||||
, ad.failure_count
|
||||
, ad.error
|
||||
FROM v$archive_dest ad
|
||||
WHERE status <> 'INACTIVE'
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
109
vg/archivelog_gap.sql
Normal file
109
vg/archivelog_gap.sql
Normal file
@@ -0,0 +1,109 @@
|
||||
@@header
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display archivelog gap
|
||||
* Parameter : 1 - Thread Number (Default '%')
|
||||
* 2 - From Sequence (Default '%')
|
||||
* 3 - To Sequence (Default '%')
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 04-Apr-10 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE thread="&&1"
|
||||
DEFINE from_sequence="&2"
|
||||
DEFINE to_sequence="&3"
|
||||
|
||||
set term off
|
||||
COLUMN _thread NEW_VALUE thread NOPRINT
|
||||
COLUMN _from_sequence NEW_VALUE from_sequence NOPRINT
|
||||
COLUMN _to_sequence NEW_VALUE to_sequence NOPRINT
|
||||
|
||||
SELECT DECODE('&&thread','','%','&&thread') "_thread"
|
||||
, DECODE('&&from_sequence','','%','&&from_sequence') "_from_sequence"
|
||||
, DECODE('&&to_sequence','','%','&&to_sequence') "_to_sequence"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* M A I N S C R I P T
|
||||
************************************/
|
||||
|
||||
COLUMN sequence# HEADING "SEQUENCE#" FORMAT 99999999
|
||||
|
||||
/*
|
||||
* Not using WITH clause (aka CTE aka sub-query refactorying
|
||||
* , as it does not work on standby database in MOUNT mode and not in OPEN mode.
|
||||
*/
|
||||
|
||||
select minmax.thread#
|
||||
, i.sequence# + minmax.min_sequence# - 1 sequence#
|
||||
--, l.thread#
|
||||
--, l.sequence#
|
||||
, l.applied
|
||||
, l.deleted
|
||||
, l.status
|
||||
, l.archived
|
||||
, NVL(TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS'),' Missing ') first_time
|
||||
, TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time
|
||||
, l.fal
|
||||
, l.creator
|
||||
, l.registrar
|
||||
, TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time
|
||||
from (select rownum sequence#
|
||||
from dual
|
||||
connect by level <= 1500
|
||||
) i
|
||||
join (select dest_id
|
||||
, thread#
|
||||
, max(DECODE(applied, 'YES',sequence#,0)) - 3 min_sequence#
|
||||
, max(sequence#) max_sequence#
|
||||
--, min(first_time)
|
||||
--, max(first_time)
|
||||
From v$archived_log
|
||||
where dest_id = 1
|
||||
AND thread# like '&&thread'
|
||||
and first_time > trunc(sysdate - 1)
|
||||
group by dest_id, thread#
|
||||
order by thread#
|
||||
) minmax on 1 = 1
|
||||
LEFT OUTER JOIN v$archived_log l on l.thread# = minmax.thread# and l.sequence# = i.sequence# + minmax.min_sequence# - 1
|
||||
WHERE 1=1
|
||||
--AND (l.thread# IS NULL OR l.sequence# IS NULL)
|
||||
and i.sequence# + minmax.min_sequence# - 1 <= minmax.max_sequence#
|
||||
AND minmax.thread# like '&&thread'
|
||||
AND i.sequence# + minmax.min_sequence# - 1
|
||||
BETWEEN DECODE('&&from_sequence','%',minmax.min_sequence#,'&&from_sequence')
|
||||
AND DECODE('&&to_sequence','%',minmax.max_sequence#,'&&to_sequence')
|
||||
order by minmax.thread#
|
||||
, i.sequence#
|
||||
--order by l.first_change#
|
||||
;
|
||||
|
||||
|
||||
SELECT l.thread#
|
||||
, TO_CHAR(sysdate,'DD-MON-YY HH24:MI:SS') current_time
|
||||
, TO_CHAR(max(l.next_time) ,'DD-MON-YY HH24:MI:SS') max_next_time
|
||||
FROM v$archived_log l
|
||||
GROUP BY l.thread#
|
||||
ORDER BY l.thread#
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
95
vg/archivelog_gap2.sql
Normal file
95
vg/archivelog_gap2.sql
Normal file
@@ -0,0 +1,95 @@
|
||||
@@header
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display archivelog gap
|
||||
* Parameter : 1 - Thread Number (Default '%')
|
||||
* 2 - From Sequence (Default '%')
|
||||
* 3 - To Sequence (Default '%')
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 04-Apr-10 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE thread="&&1"
|
||||
DEFINE from_sequence="&2"
|
||||
DEFINE to_sequence="&3"
|
||||
|
||||
set term off
|
||||
COLUMN _thread NEW_VALUE thread NOPRINT
|
||||
COLUMN _from_sequence NEW_VALUE from_sequence NOPRINT
|
||||
COLUMN _to_sequence NEW_VALUE to_sequence NOPRINT
|
||||
|
||||
SELECT DECODE('&&thread','','%','&&thread') "_thread"
|
||||
, DECODE('&&from_sequence','','%','&&from_sequence') "_from_sequence"
|
||||
, DECODE('&&to_sequence','','%','&&to_sequence') "_to_sequence"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* M A I N S C R I P T
|
||||
************************************/
|
||||
|
||||
COLUMN sequence# HEADING "SEQUENCE#" FORMAT 99999999
|
||||
|
||||
select minmax.thread#
|
||||
, i.sequence# + minmax.min_sequence# - 1 sequence#
|
||||
--, l.thread#
|
||||
--, l.sequence#
|
||||
, l.applied
|
||||
, l.deleted
|
||||
, l.status
|
||||
, l.archived
|
||||
, NVL(TO_CHAR(l.first_time,'DD-MON-YY HH24:MI:SS'),' Missing ') first_time
|
||||
, TO_CHAR(l.next_time,'DD-MON-YY HH24:MI:SS') next_time
|
||||
, l.fal
|
||||
, l.creator
|
||||
, l.registrar
|
||||
, TO_CHAR(l.completion_time,'DD-MON-YY HH24:MI:SS') completion_time
|
||||
from (select rownum sequence#
|
||||
from dual
|
||||
connect by level <= 1500
|
||||
) i
|
||||
join (select dest_id
|
||||
, thread#
|
||||
, max(DECODE(applied, 'YES',sequence#,0)) - 3 min_sequence#
|
||||
, max(sequence#) max_sequence#
|
||||
--, min(first_time)
|
||||
--, max(first_time)
|
||||
From v$archived_log
|
||||
where dest_id = 1
|
||||
AND thread# like '&&thread'
|
||||
and first_time > trunc(sysdate - 1)
|
||||
group by dest_id, thread#
|
||||
order by thread#
|
||||
) minmax on 1 = 1
|
||||
LEFT OUTER JOIN v$archived_log l on l.thread# = minmax.thread# and l.sequence# = i.sequence# + minmax.min_sequence# - 1
|
||||
WHERE 1=1
|
||||
--AND (l.thread# IS NULL OR l.sequence# IS NULL)
|
||||
and i.sequence# + minmax.min_sequence# - 1 <= minmax.max_sequence#
|
||||
AND minmax.thread# like '&&thread'
|
||||
AND i.sequence# + minmax.min_sequence# - 1
|
||||
BETWEEN DECODE('&&from_sequence','%',minmax.min_sequence#,'&&from_sequence')
|
||||
AND DECODE('&&to_sequence','%',minmax.max_sequence#,'&&to_sequence')
|
||||
order by minmax.thread#
|
||||
, i.sequence#
|
||||
--order by l.first_change#
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
134
vg/archivelog_size_hourly.sql
Normal file
134
vg/archivelog_size_hourly.sql
Normal file
@@ -0,0 +1,134 @@
|
||||
@@header
|
||||
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display hourly and daily redolog switches by size
|
||||
* Parameters : None
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 30-Dec-14 Vishal Gupta Added number of days as input parameter
|
||||
* 18-Mar-14 Vishal Gupta Added separator columns for daily total
|
||||
* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality
|
||||
* 05-Aug-04 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE days
|
||||
DEFINE days="&&1"
|
||||
|
||||
set term off
|
||||
COLUMN _DAYS NEW_VALUE DAYS NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&days','','15','&&days')) "_DAYS"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE size_label=GB
|
||||
DEFINE size_divider="1024/1024/1024"
|
||||
DEFINE round_precision=2
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ************************************************************************
|
||||
PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size)
|
||||
PROMPT * (Hourly and Daily figures in &&size_label)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT ************************************************************************
|
||||
PROMPT
|
||||
PROMPT - <-------------------------------------------------------- hourly total ----------------------------------------------->
|
||||
/*
|
||||
Total h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23
|
||||
Date Day (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB)
|
||||
--------- --- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
|
||||
*/
|
||||
|
||||
SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000
|
||||
|
||||
COLUMN separator HEADING "!|!|!" FORMAT A1
|
||||
|
||||
COLUMN "Date" HEADING "Date" FORMAT A9
|
||||
COLUMN "Total" HEADING "Day|Total|(&size_label)" FORMAT 99999
|
||||
COLUMN "Day" HEADING "Day" FORMAT A3
|
||||
COLUMN h0 HEADING "h0|(&size_label)" FORMAT 9999
|
||||
COLUMN h1 HEADING "h1|(&size_label)" FORMAT 9999
|
||||
COLUMN h2 HEADING "h2|(&size_label)" FORMAT 9999
|
||||
COLUMN h3 HEADING "h3|(&size_label)" FORMAT 9999
|
||||
COLUMN h4 HEADING "h4|(&size_label)" FORMAT 9999
|
||||
COLUMN h5 HEADING "h5|(&size_label)" FORMAT 9999
|
||||
COLUMN h6 HEADING "h6|(&size_label)" FORMAT 9999
|
||||
COLUMN h7 HEADING "h7|(&size_label)" FORMAT 9999
|
||||
COLUMN h8 HEADING "h8|(&size_label)" FORMAT 9999
|
||||
COLUMN h9 HEADING "h9|(&size_label)" FORMAT 9999
|
||||
COLUMN h10 HEADING "h10|(&size_label)" FORMAT 9999
|
||||
COLUMN h11 HEADING "h11|(&size_label)" FORMAT 9999
|
||||
COLUMN h12 HEADING "h12|(&size_label)" FORMAT 9999
|
||||
COLUMN h13 HEADING "h13|(&size_label)" FORMAT 9999
|
||||
COLUMN h14 HEADING "h14|(&size_label)" FORMAT 9999
|
||||
COLUMN h15 HEADING "h15|(&size_label)" FORMAT 9999
|
||||
COLUMN h16 HEADING "h16|(&size_label)" FORMAT 9999
|
||||
COLUMN h17 HEADING "h17|(&size_label)" FORMAT 9999
|
||||
COLUMN h18 HEADING "h18|(&size_label)" FORMAT 9999
|
||||
COLUMN h19 HEADING "h19|(&size_label)" FORMAT 9999
|
||||
COLUMN h20 HEADING "h20|(&size_label)" FORMAT 9999
|
||||
COLUMN h21 HEADING "h21|(&size_label)" FORMAT 9999
|
||||
COLUMN h22 HEADING "h22|(&size_label)" FORMAT 9999
|
||||
COLUMN h23 HEADING "h23|(&size_label)" FORMAT 9999
|
||||
|
||||
|
||||
|
||||
|
||||
SELECT to_char(trunc(COMPLETION_TIME),'DD-Mon-YY') "Date",
|
||||
to_char(COMPLETION_TIME, 'Dy') "Day",
|
||||
'|' separator,
|
||||
ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&size_divider))) "Total",
|
||||
'|' separator,
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'00',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h0",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'01',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h1",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'02',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h2",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'03',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h3",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'04',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h4",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'05',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h5",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'06',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h6",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'07',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h7",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'08',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h8",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'09',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h9",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'10',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h10",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'11',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h11",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'12',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h12",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'13',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h13",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'14',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h14",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'15',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h15",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'16',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h16",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'17',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h17",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'18',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h18",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'19',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h19",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'20',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h20",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'21',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h21",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'22',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h22",
|
||||
ROUND(SUM(decode(to_char(COMPLETION_TIME, 'hh24'),'23',(BLOCKS * BLOCK_SIZE)/&size_divider,0))) "h23"
|
||||
from v$archived_log
|
||||
where standby_dest = 'NO'
|
||||
AND CREATOR IN ('ARCH' , 'FGRD','LGWR','RFS')
|
||||
AND completion_time > sysdate - &days
|
||||
group by trunc(COMPLETION_TIME), to_char(COMPLETION_TIME, 'Dy')
|
||||
order by trunc(COMPLETION_TIME)
|
||||
/
|
||||
|
||||
@@footer
|
||||
96
vg/archivelog_size_hourly_detail.sql
Normal file
96
vg/archivelog_size_hourly_detail.sql
Normal file
@@ -0,0 +1,96 @@
|
||||
@@header
|
||||
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display hourly and daily redolog switches by size
|
||||
* Parameters : None
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 30-Dec-14 Vishal Gupta Added number of days as input parameter
|
||||
* 18-Mar-14 Vishal Gupta Added separator columns for daily total
|
||||
* 27-Feb-12 Vishal Gupta Formated the output and parameterized size granuality
|
||||
* 05-Aug-04 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE days
|
||||
DEFINE days="&&1"
|
||||
|
||||
set term off
|
||||
COLUMN _DAYS NEW_VALUE DAYS NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&days','','2','&&days')) "_DAYS"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE size_label=MB
|
||||
DEFINE size_divider="1024/1024"
|
||||
--DEFINE size_label=GB
|
||||
--DEFINE size_divider="1024/1024/1024"
|
||||
DEFINE round_precision=2
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ************************************************************************
|
||||
PROMPT * A R C H I V E L O G S W I T C H S U M M A R Y (By Size)
|
||||
PROMPT * (Hourly and Daily figures in &&size_label)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT ************************************************************************
|
||||
PROMPT
|
||||
|
||||
SET head on FEED off ECHO OFF LINES 1000 TRIMSPOOL ON TRIM on PAGES 1000
|
||||
|
||||
COLUMN separator HEADING "!|!|!" FORMAT A1
|
||||
|
||||
COLUMN "Date" HEADING "Date" FORMAT A12
|
||||
COLUMN "Day" HEADING "Day" FORMAT A3
|
||||
COLUMN "Total" HEADING "Hourly|Total|(&size_label)" FORMAT 9,999,999
|
||||
COLUMN "M00" HEADING "Minutes|01-10 |(&size_label) " FORMAT 999,999
|
||||
COLUMN "M10" HEADING "Minutes|11-20 |(&size_label) " FORMAT 999,999
|
||||
COLUMN "M20" HEADING "Minutes|21-30 |(&size_label) " FORMAT 999,999
|
||||
COLUMN "M30" HEADING "Minutes|31-40 |(&size_label) " FORMAT 999,999
|
||||
COLUMN "M40" HEADING "Minutes|41-50 |(&size_label) " FORMAT 999,999
|
||||
COLUMN "M50" HEADING "Minutes|51-60 |(&size_label) " FORMAT 999,999
|
||||
|
||||
|
||||
|
||||
|
||||
SELECT TO_CHAR(trunc(COMPLETION_TIME,'HH24'),'DD-MON-YY HH24') "Date",
|
||||
to_char(COMPLETION_TIME, 'Dy') "Day",
|
||||
'|' separator,
|
||||
ROUND(SUM(((BLOCKS * BLOCK_SIZE)/&&size_divider))) "Total",
|
||||
'|' separator,
|
||||
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 01 AND 10 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M00",
|
||||
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 11 AND 20 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M10",
|
||||
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 21 AND 30 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M20",
|
||||
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 31 AND 40 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M30",
|
||||
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 41 AND 50 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M40",
|
||||
ROUND(SUM(CASE WHEN TO_NUMBER(to_char(COMPLETION_TIME, 'MI')) BETWEEN 51 AND 60 THEN ROUND((BLOCKS * BLOCK_SIZE)/&&size_divider) ELSE 0 END)) "M50",
|
||||
'|' separator
|
||||
from v$archived_log
|
||||
where standby_dest = 'NO'
|
||||
and CREATOR IN ('ARCH' , 'FGRD')
|
||||
AND completion_time > sysdate - &days
|
||||
group by trunc(COMPLETION_TIME,'HH24'), to_char(COMPLETION_TIME, 'Dy')
|
||||
order by trunc(COMPLETION_TIME,'HH24')
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
123
vg/ash.sql
Normal file
123
vg/ash.sql
Normal file
@@ -0,0 +1,123 @@
|
||||
@@header
|
||||
|
||||
PROMPT ****** NOT FINISHED ***********
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display session from ASH
|
||||
* Version :
|
||||
* Parameters :
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 27-Sep-12 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE days="&&3"
|
||||
|
||||
|
||||
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
|
||||
set term on
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
FROM DUAL;
|
||||
set term off
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=9,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=9,999,999,999
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
|
||||
--DEFINE TIME_DIVIDER="0.001"
|
||||
--DEFINE TIME_HEADING="msec"
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="60"
|
||||
--DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
Prompt
|
||||
Prompt ******************************************************************
|
||||
Prompt * A S H I N F O
|
||||
Prompt *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * -
|
||||
Prompt ******************************************************************
|
||||
|
||||
|
||||
SELECT ash.sample_time
|
||||
, ash.inst_id
|
||||
, u.username
|
||||
, sn.name service_name
|
||||
, ash.machine
|
||||
, ash.program
|
||||
, ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_exec_start
|
||||
, ash.top_sql_id
|
||||
, ash.module
|
||||
, ash.action
|
||||
, ash.event
|
||||
FROM gv$active_session_history ash
|
||||
, dba_users u
|
||||
, dba_services sn
|
||||
WHERE ash.service_hash = sn.name_hash
|
||||
AND ash.user_id = u.user_id
|
||||
AND ash.sample_time > systimestamp - 5/24
|
||||
-- and ash.service_hash = '1859414386'
|
||||
-- and ash.sql_id like '9m4qqj5uzzn3k'
|
||||
-- AND ash.top_level_sql_id LIKE '%'
|
||||
and u.username like '%ATTRIB%'
|
||||
-- and upper(ash.machine) like upper('%beta%')
|
||||
-- AND upper(sn.name) like upper('SYS$USERS') -- service_name
|
||||
-- and upper(ash.program) like upper('%SQL%')
|
||||
-- and upper(ash.module) like upper('%PiNT%')
|
||||
-- ORDER BY s.end_interval_time
|
||||
ORDER BY ash.sample_time
|
||||
|
||||
@@footer
|
||||
65
vg/ash_info.sql
Normal file
65
vg/ash_info.sql
Normal file
@@ -0,0 +1,65 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display ASH Info
|
||||
* Compatibility : 11.2 and above
|
||||
* Parameters : NONE
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 30-Aug-12 Vishal Gupta First cut
|
||||
* 27-Sep-12 Vishal Gupta Updated output formatting
|
||||
*
|
||||
*/
|
||||
|
||||
PROMPT
|
||||
PROMPT *******************
|
||||
PROMPT * ASH Info
|
||||
PROMPT *******************
|
||||
|
||||
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN total_size HEADING "Total|Size" FORMAT 999,999,999
|
||||
COLUMN fixed_size HEADING "Fixed|Size" FORMAT 999,999,999
|
||||
COLUMN sampling_interval HEADING "Sampling|Interval|(ms)" FORMAT 99999
|
||||
COLUMN avg_sample_time HEADING "Avg|Sample|Time|(ms)" FORMAT 99999
|
||||
COLUMN disk_filter_ratio HEADING "Disk|Filter|Ratio" FORMAT 99
|
||||
COLUMN oldest_sample_time HEADING "Oldest|SampleTime" FORMAT a18
|
||||
COLUMN latest_sample_time HEADING "Latest|SampleTime" FORMAT a18
|
||||
COLUMN duration HEADING "Duration" FORMAT a12
|
||||
COLUMN sampled_bytes HEADING "Sampled|MB" FORMAT 999,999,999
|
||||
COLUMN sample_count HEADING "Sample|Count" FORMAT 999,999,999
|
||||
COLUMN sampler_elapsed_time HEADING "Sampler|Elapsed|Time|(ms)" FORMAT 999,999,999,999
|
||||
COLUMN awr_flush_count HEADING "AWR|Flush|Count" FORMAT 999,999
|
||||
COLUMN awr_flush_emergency_count HEADING "AWR|Emer|Flush|Count" FORMAT 999,999
|
||||
COLUMN awr_flush_bytes HEADING "AWR|Flush|MB" FORMAT 999,999
|
||||
|
||||
SELECT i.inst_id
|
||||
, i.total_size
|
||||
, i.fixed_size
|
||||
, i.sampling_interval
|
||||
, ROUND(i.sampler_elapsed_time/i.sample_count) avg_sample_time
|
||||
, i.disk_filter_ratio
|
||||
, to_char(i.oldest_sample_time,'DD-MON-YY HH24:MI:SS') oldest_sample_time
|
||||
, to_char(i.latest_sample_time,'DD-MON-YY HH24:MI:SS') latest_sample_time
|
||||
, REPLACE(SUBSTR((i.latest_sample_time - i.oldest_sample_time)
|
||||
,1,INSTR((i.latest_sample_time - i.oldest_sample_time),'.')-1
|
||||
)
|
||||
,'+0000000','+'
|
||||
) duration
|
||||
, i.sample_count
|
||||
, ROUND(i.sampled_bytes/1024/1024) sampled_bytes
|
||||
, i.sampler_elapsed_time
|
||||
, i.awr_flush_count
|
||||
, i.awr_flush_emergency_count
|
||||
, ROUND(i.awr_flush_bytes/1024/1024) awr_flush_bytes
|
||||
FROM gv$ash_info i
|
||||
ORDER BY i.inst_id
|
||||
;
|
||||
|
||||
@@footer
|
||||
98
vg/ash_report.sql
Normal file
98
vg/ash_report.sql
Normal file
@@ -0,0 +1,98 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Generate ASH report for instances passed
|
||||
* Parameters : 1 - From Time ( YYYY-MM-DD HH24:MI:SS format)
|
||||
* 2 - To Time ( YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - Instance Number ( % for all or comma separated list of instance numbers).
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 17-Feb-14 Vishal Gupta Changed order of input parameters
|
||||
* 18Feb-12 Vishal Gupta Created
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE TO_TIMESTAMP
|
||||
UNDEFINE INSTANCE_LIST
|
||||
|
||||
DEFINE FROM_TIMESTAMP="&&1"
|
||||
DEFINE TO_TIMESTAMP="&&2"
|
||||
DEFINE INSTANCE_LIST="&&3"
|
||||
|
||||
|
||||
|
||||
COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT
|
||||
COLUMN _TO_TIME NEW_VALUE TO_TIMESTAMP NOPRINT
|
||||
COLUMN _INSTANCE_LIST NEW_VALUE INSTANCE_LIST NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1/24,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
|
||||
, DECODE('&&TO_TIMESTAMP','',to_char(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIME"
|
||||
, DECODE('&&INSTANCE_LIST','','%','&&INSTANCE_LIST') "_INSTANCE_LIST"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ***********************************************************************
|
||||
PROMPT * A S H R E P O R T (Text)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - From Timestamp = '&&FROM_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format, default sysdate - 1/24)
|
||||
PROMPT * - To Timestamp = '&&TO_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format, default sysdate))
|
||||
PROMPT * - Instance List = '&&INSTANCE_LIST' ( % for ALL or comma separated list of instance numbers)
|
||||
PROMPT ***********************************************************************
|
||||
|
||||
set pages 0
|
||||
|
||||
/*
|
||||
|
||||
DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT(
|
||||
l_dbid IN VARCHAR2(1023),
|
||||
l_inst_num IN VARCHAR2,
|
||||
l_btime IN DATE,
|
||||
l_etime IN DATE,
|
||||
l_options IN NUMBER DEFAULT 0, -- Not currently used by Oracle
|
||||
l_slot_width IN NUMBER DEFAULT 0, -- Not currently used by Oracle
|
||||
l_sid IN NUMBER DEFAULT NULL, -- v$session.sid
|
||||
l_sql_id IN VARCHAR2 DEFAULT NULL, -- V$SQL.SQL_ID (Wildcard allowed)
|
||||
l_wait_class IN VARCHAR2 DEFAULT NULL, -- v$event_name.wait_class (Wildcard allowed)
|
||||
l_service_hash IN NUMBER DEFAULT NULL, -- v$active_services.name_hash
|
||||
l_module IN VARCHAR2 DEFAULT NULL, -- v$session.module (Wildcard allowed)
|
||||
l_action IN VARCHAR2 DEFAULT NULL, -- v$session.action (Wildcard allowed)
|
||||
l_client_id IN VARCHAR2 DEFAULT NULL, -- v$session.client_identifier (Wildcard allowed)
|
||||
l_plsql_entry IN VARCHAR2 DEFAULT NULL,
|
||||
l_data_src IN NUMBER DEFAULT 0)
|
||||
RETURN awrrpt_text_type_table PIPELINED;
|
||||
|
||||
*/
|
||||
|
||||
SELECT * from table(dbms_workload_repository.ash_global_report_text
|
||||
( l_dbid => (select dbid from v$database)
|
||||
, l_inst_num => DECODE(upper('&INSTANCE_LIST'),'%',NULL,'&INSTANCE_LIST')
|
||||
, l_btime => TO_DATE('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
, l_etime => TO_DATE('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
, l_sid => NULL
|
||||
, l_sql_id => NULL
|
||||
, l_wait_class => NULL
|
||||
, l_service_hash => NULL
|
||||
, l_module => NULL
|
||||
, l_action => NULL
|
||||
, l_client_id => NULL
|
||||
)
|
||||
);
|
||||
|
||||
UNDEFINE NO_OF_HOURS
|
||||
UNDEFINE INSTANCE_LIST
|
||||
|
||||
@@footer
|
||||
136
vg/ash_report_html.sql
Normal file
136
vg/ash_report_html.sql
Normal file
@@ -0,0 +1,136 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Generate ASH report for instances passed
|
||||
* Parameters : 1 - From Time (Optional) ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate - 1/24)
|
||||
* 2 - To Time (Optional) ( YYYY-MM-DD HH24:MI:SS format) - Default is sysdate
|
||||
* 2 - INST_ID (Optional) ( % for all or comma separated list of instance numbers).
|
||||
* 4 - ServiceName (Optional) Default is NULL
|
||||
* 5 - SID (Optional) Default is NULL
|
||||
* 6 - SQL_ID (Optional) Default is NULL
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 17-Feb-14 Vishal Gupta Changed order of input parameters
|
||||
* 28-Jan-15 Vishal Gupta Added SID, SQL_ID, ServiceName input parameters
|
||||
* 04-Oct-12 Vishal Gupta Added default input parameter values
|
||||
* 18-Feb-12 Vishal Gupta Created
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE TO_TIMESTAMP
|
||||
UNDEFINE INSTANCE_LIST
|
||||
UNDEFINE SERVICE_NAME
|
||||
UNDEFINE SID
|
||||
UNDEFINE SQL_ID
|
||||
|
||||
DEFINE FROM_TIMESTAMP="&&1"
|
||||
DEFINE TO_TIMESTAMP="&&2"
|
||||
DEFINE INSTANCE_LIST="&&3"
|
||||
DEFINE SERVICE_NAME="&&4"
|
||||
DEFINE SID="&&5"
|
||||
DEFINE SQL_ID="&&6"
|
||||
|
||||
|
||||
|
||||
COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT
|
||||
COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT
|
||||
COLUMN _INSTANCE_LIST NEW_VALUE INSTANCE_LIST NOPRINT
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
|
||||
COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT
|
||||
COLUMN _SERVICE_HASH NEW_VALUE SERVICE_HASH NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1/24,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
|
||||
, DECODE('&&TO_TIMESTAMP','',to_char(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP"
|
||||
, DECODE('&&INSTANCE_LIST','','%','&&INSTANCE_LIST') "_INSTANCE_LIST"
|
||||
, DECODE('&&SERVICE_NAME','','%','&&SERVICE_NAME') "_SERVICE_NAME"
|
||||
, DECODE('&&SERVICE_HASH','','%','&&SERVICE_HASH') "_SERVICE_HASH"
|
||||
, DECODE('&&SID','','%','&&SID') "_SID"
|
||||
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
|
||||
FROM DUAL;
|
||||
|
||||
set term on
|
||||
|
||||
set term off
|
||||
SELECT s.name_hash "_SERVICE_HASH"
|
||||
FROM dba_services s
|
||||
WHERE s.name = '&&SERVICE_NAME';
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ***********************************************************************
|
||||
PROMPT * A S H R E P O R T (HTML)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - From Timestamp = '&&FROM_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate - 1/24)
|
||||
PROMPT * - To Timestamp = '&&TO_TIMESTAMP' ( YYYY-MM-DD HH24:MI:SS format) - Default is (sysdate)
|
||||
PROMPT * - Instance List = '&&INSTANCE_LIST' ( % for ALL or comma separated list of instance numbers) - Default is %
|
||||
PROMPT * - SERVICE_NAME = '&&SERVICE_NAME' - Default is %
|
||||
PROMPT * - SID = '&&SID' - Default is %
|
||||
PROMPT * - SQL_ID = '&&SQL_ID' - Default is %
|
||||
PROMPT ***********************************************************************
|
||||
|
||||
set pages 0
|
||||
|
||||
/*
|
||||
|
||||
DBMS_WORKLOAD_REPOSITORY.ASH_GLOBAL_REPORT_TEXT(
|
||||
l_dbid IN VARCHAR2(1023),
|
||||
l_inst_num IN VARCHAR2,
|
||||
l_btime IN DATE,
|
||||
l_etime IN DATE,
|
||||
l_options IN NUMBER DEFAULT 0, -- Not currently used by Oracle
|
||||
l_slot_width IN NUMBER DEFAULT 0, -- Not currently used by Oracle
|
||||
l_sid IN NUMBER DEFAULT NULL, -- v$session.sid
|
||||
l_sql_id IN VARCHAR2 DEFAULT NULL, -- V$SQL.SQL_ID (Wildcard allowed)
|
||||
l_wait_class IN VARCHAR2 DEFAULT NULL, -- v$event_name.wait_class (Wildcard allowed)
|
||||
l_service_hash IN NUMBER DEFAULT NULL, -- v$active_services.name_hash
|
||||
l_module IN VARCHAR2 DEFAULT NULL, -- v$session.module (Wildcard allowed)
|
||||
l_action IN VARCHAR2 DEFAULT NULL, -- v$session.action (Wildcard allowed)
|
||||
l_client_id IN VARCHAR2 DEFAULT NULL, -- v$session.client_identifier (Wildcard allowed)
|
||||
l_plsql_entry IN VARCHAR2 DEFAULT NULL,
|
||||
l_data_src IN NUMBER DEFAULT 0)
|
||||
RETURN awrrpt_text_type_table PIPELINED;
|
||||
|
||||
*/
|
||||
|
||||
set term off
|
||||
spool ash_report.html
|
||||
SELECT * from table(dbms_workload_repository.ash_global_report_html
|
||||
( l_dbid => (select dbid from v$database)
|
||||
, l_inst_num => DECODE(upper('&INSTANCE_LIST'),'%',NULL,'&INSTANCE_LIST')
|
||||
, l_btime => TO_DATE('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
, l_etime => TO_DATE('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
, l_sid => DECODE('&&SID','%',NULL,'&&SID')
|
||||
, l_sql_id => DECODE('&&SQL_ID','%',NULL,'&&SQL_ID')
|
||||
, l_wait_class => NULL
|
||||
, l_service_hash => DECODE('&&SERVICE_HASH','%',NULL,'&&SERVICE_HASH')
|
||||
, l_module => NULL
|
||||
, l_action => NULL
|
||||
, l_client_id => NULL
|
||||
)
|
||||
);
|
||||
|
||||
spool off
|
||||
set term on
|
||||
PROMPT
|
||||
PROMPT Report generated as ash_report.html file. It will automatically open in your default browser.
|
||||
|
||||
set pages 5000
|
||||
host ash_report.html
|
||||
|
||||
@@footer
|
||||
132
vg/ash_sessions.sql
Normal file
132
vg/ash_sessions.sql
Normal file
@@ -0,0 +1,132 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session details from ASH
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - Number of hours (Default 1 hour)
|
||||
* 2 - SQLExec Duration (in Seconds) (Default 60 sec)
|
||||
* 3 - DB User Name (Default '%')
|
||||
* 4 - Program (Default '%')
|
||||
* 5 - Service Name (Default '%')
|
||||
* 6 - Where Clause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 20-MAR-15 Vishal Gupta Modified input parameter and renamed script
|
||||
* from ash_sid_details.sql to ash_sessions.sql
|
||||
* 03-FEB-14 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE DURATION
|
||||
UNDEFINE USERNAME
|
||||
UNDEFINE PROGRAM
|
||||
UNDEFINE SERVICE_NAME
|
||||
UNDEFINE WHERECLAUSE
|
||||
|
||||
DEFINE HOURS="&&1"
|
||||
DEFINE DURATION="&&2"
|
||||
DEFINE USERNAME="&&3"
|
||||
DEFINE PROGRAM="&&4"
|
||||
DEFINE SERVICE_NAME="&&5"
|
||||
DEFINE WHERECLAUSE="&&6"
|
||||
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
COLUMN _DURATION NEW_VALUE DURATION NOPRINT
|
||||
COLUMN _USERNAME NEW_VALUE USERNAME NOPRINT
|
||||
COLUMN _PROGRAM NEW_VALUE PROGRAM NOPRINT
|
||||
COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT
|
||||
COLUMN _SERVICE_NAME NEW_VALUE SERVICE_NAME NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&HOURS'),'','1',UPPER('&&HOURS')) "_HOURS"
|
||||
, DECODE(UPPER('&&DURATION'),'','60',UPPER(DURATION)) "_DURATION"
|
||||
, DECODE(UPPER('&&USERNAME'),'','%',UPPER('&&USERNAME')) "_USERNAME"
|
||||
, DECODE(UPPER('&&PROGRAM'),'','%',UPPER('&&PROGRAM')) "_PROGRAM"
|
||||
, DECODE(UPPER('&&SERVICE_NAME'),'','%',UPPER('&&SERVICE_NAME')) "_SERVICE_NAME"
|
||||
FROM DUAL;
|
||||
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * ASH SQL Details
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * SQLExec Duration = "&&DURATION" seconds
|
||||
PROMPT * DB UserName = "&&USERNAME"
|
||||
PROMPT * Program = "&&PROGRAM"
|
||||
PROMPT * ServiceName = "&&SERVICE_NAME"
|
||||
PROMPT * WhereClause = "&&WHERECLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN sample_time_min FORMAT a18
|
||||
COLUMN sample_time_max FORMAT a18
|
||||
COLUMN username HEADING "DBUser" FORMAT a18
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a21
|
||||
COLUMN program HEADING "Program" FORMAT a25 TRUNCATE
|
||||
COLUMN machine HEADING "Machine" FORMAT a25 TRUNCATE
|
||||
COLUMN module HEADING "Module" FORMAT a25 TRUNCATE
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT /*+ parallel(ash, 10) */
|
||||
--ash.sql_exec_id,
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min
|
||||
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max
|
||||
, u.username
|
||||
, s.name service_name
|
||||
, NVL(ash_parent.program,ash.program) program
|
||||
, ash.machine
|
||||
, ash.module
|
||||
FROM gv$active_session_history ash
|
||||
JOIN dba_users u ON u.user_id = ash.user_id
|
||||
JOIN dba_services s ON s.name_hash = ash.service_hash
|
||||
LEFT OUTER JOIN gv$active_session_history ash_parent
|
||||
ON ash_parent.inst_id = ash.qc_instance_id
|
||||
AND ash_parent.session_id = ash.qc_session_id
|
||||
AND ash_parent.session_serial# = ash.qc_session_serial#
|
||||
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
|
||||
WHERE ash.sql_id IS NOT NULL
|
||||
-- AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
|
||||
-- AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
|
||||
-- AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24))
|
||||
AND ash.sql_exec_id IS NOT NULL
|
||||
AND (cast(ash.sample_time as date) - ash.sql_exec_start)* 24*60*60 > '&&DURATION'
|
||||
-- AND ash.user_id = (select user_id from dba_users where username LIKE '&&USERNAME')
|
||||
-- AND ash.service_hash = (select name_hash from dba_services where name LIKE '&&SERVICE_NAME')
|
||||
AND ash.program LIKE '&&PROGRAM'
|
||||
&&WHERECLAUSE
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.inst_id)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
, u.username
|
||||
, s.name
|
||||
, NVL(ash_parent.program,ash.program)
|
||||
, ash.machine
|
||||
, ash.module
|
||||
ORDER BY MIN(ash.sample_time) ASC
|
||||
, max(ash.sample_time) asc
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
116
vg/ash_sid_details.sql
Normal file
116
vg/ash_sid_details.sql
Normal file
@@ -0,0 +1,116 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session details from ASH
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
* 3 - Serial# (Default %)
|
||||
* 4 - Number of hours (Default 24)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 31-Dec-15 Vishal Gupta Added duration in the output
|
||||
* 03-FEB-14 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE SID
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE SERIAL
|
||||
UNDEFINE HOURS
|
||||
|
||||
DEFINE SID="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
DEFINE SERIAL="&&3"
|
||||
DEFINE HOURS="&&4"
|
||||
DEFINE WHERECLAUSE="&&5"
|
||||
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
|
||||
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
|
||||
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
|
||||
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * ASH SQL Details
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * SID = "&&SID"
|
||||
PROMPT * Instance ID = "&&INST_ID"
|
||||
PROMPT * Serial# = "&&SERIAL"
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * WhereClause = "&&WHERECLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN sample_time_min FORMAT a18
|
||||
COLUMN sample_time_max FORMAT a18
|
||||
COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12
|
||||
COLUMN username HEADING "DBUser" FORMAT a18
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a21
|
||||
COLUMN program HEADING "Program" FORMAT a25 TRUNCATE
|
||||
COLUMN machine HEADING "Machine" FORMAT a25 TRUNCATE
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT /*+ parallel(ash, 10) */
|
||||
--ash.sql_exec_id,
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min
|
||||
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max
|
||||
, SUBSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+')
|
||||
,1,INSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+'),'.')-1
|
||||
) duration
|
||||
, u.username
|
||||
, s.name service_name
|
||||
, NVL(ash_parent.program,ash.program) program
|
||||
, ash.machine
|
||||
FROM gv$active_session_history ash
|
||||
JOIN dba_users u ON u.user_id = ash.user_id
|
||||
JOIN dba_services s ON s.name_hash = ash.service_hash
|
||||
LEFT OUTER JOIN gv$active_session_history ash_parent
|
||||
ON ash_parent.inst_id = ash.qc_instance_id
|
||||
AND ash_parent.session_id = ash.qc_session_id
|
||||
AND ash_parent.session_serial# = ash.qc_session_serial#
|
||||
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
|
||||
WHERE NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
|
||||
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
|
||||
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24))
|
||||
&&WHERECLAUSE
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.inst_id)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
, u.username
|
||||
, s.name
|
||||
, NVL(ash_parent.program,ash.program)
|
||||
, ash.machine
|
||||
ORDER BY MIN(ash.sample_time) ASC
|
||||
, max(ash.sample_time) asc
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
122
vg/ash_sid_events.sql
Normal file
122
vg/ash_sid_events.sql
Normal file
@@ -0,0 +1,122 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session's events from ASH
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
* 3 - Serial# (Default %)
|
||||
* 4 - Number of hours (Default 24)
|
||||
* 5 - WhereClause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 15-MAY-14 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE SID
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE SERIAL
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE SQL_ID
|
||||
UNDEFINE WHERECLAUSE
|
||||
|
||||
DEFINE SID="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
DEFINE SERIAL="&&3"
|
||||
DEFINE HOURS="&&4"
|
||||
DEFINE WHERECLAUSE="&&5"
|
||||
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
|
||||
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
|
||||
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
|
||||
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * ASH Session Events
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * SID = "&&SID"
|
||||
PROMPT * Instance ID = "&&INST_ID"
|
||||
PROMPT * Serial# = "&&SERIAL"
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * Where Clause = "&&WHERECLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999
|
||||
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
|
||||
COLUMN sql_exec_start FORMAT a20
|
||||
COLUMN sql_exec_end FORMAT a20
|
||||
COLUMN duration FORMAT a15
|
||||
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE
|
||||
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
|
||||
COLUMN current_dop HEADING "DOP" FORMAT 999
|
||||
COLUMN event HEADING "Event" FORMAT a40 TRUNCATE
|
||||
COLUMN event_count HEADING "EventCount" FORMAT 99999999999
|
||||
|
||||
BREAK ON session_id ON inst_id ON session_serial# ON sql_exec_start ON sql_id ON sql_child_number ON sql_plan_hash_value
|
||||
|
||||
-- Get the session events from ASH
|
||||
SELECT /*+ parallel(ash, 10) */
|
||||
--ash.sql_exec_id,
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, count(1) event_count
|
||||
, ash.event
|
||||
FROM gv$active_session_history ash
|
||||
WHERE ash.sql_id IS NOT NULL
|
||||
AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
|
||||
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
|
||||
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND ash.sql_exec_id IS NOT NULL
|
||||
&&WHERECLAUSE
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.inst_id)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
, ash.event
|
||||
ORDER BY --max(ash.sample_time) asc
|
||||
--,
|
||||
NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
|
||||
, ash.sql_id
|
||||
, count(1) desc
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
127
vg/ash_sid_list.sql
Normal file
127
vg/ash_sid_list.sql
Normal file
@@ -0,0 +1,127 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session's from ASH
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
* 3 - Serial# (Default %)
|
||||
* 4 - Number of hours (Default 24)
|
||||
* 5 - SQL_ID (Default %)
|
||||
* 6 - WhereClause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 05-SEP-14 Vishal Gupta Removed filter for SQL_EXEC_START IS NOT NULL
|
||||
* 03-FEB-14 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE SID
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE SERIAL
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE SQL_ID
|
||||
UNDEFINE WHERECLAUSE
|
||||
|
||||
DEFINE SID="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
DEFINE SERIAL="&&3"
|
||||
DEFINE HOURS="&&4"
|
||||
DEFINE SQL_ID="&&5"
|
||||
DEFINE WHERECLAUSE="&&6"
|
||||
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
|
||||
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
|
||||
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
|
||||
, DECODE(UPPER('&&HOURS'),'','0.01',UPPER('&&HOURS')) "_HOURS"
|
||||
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * ASH SQL Details
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * SID = "&&SID"
|
||||
PROMPT * Instance ID = "&&INST_ID"
|
||||
PROMPT * Serial# = "&&SERIAL"
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * SQL Id = "&&SQL_ID"
|
||||
PROMPT * Where Clause = "&&WHERECLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN sample_time_min FORMAT a18
|
||||
COLUMN sample_time_max FORMAT a18
|
||||
COLUMN username HEADING "DBUser" FORMAT a20
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a22
|
||||
COLUMN program HEADING "Program" FORMAT a25 TRUNCATE
|
||||
COLUMN machine HEADING "Machine" FORMAT a25
|
||||
COLUMN pga_allocated HEADING "PGA(MB)" FORMAT 999,999
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT /*+ parallel(ash, 10) */
|
||||
--ash.sql_exec_id,
|
||||
TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min
|
||||
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max
|
||||
, NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, u.username
|
||||
, s.name service_name
|
||||
, NVL(ash_parent.program,ash.program) program
|
||||
, SUBSTR(NVL(ash_parent.machine,ash.machine)
|
||||
,1,DECODE(INSTR(NVL(ash_parent.machine,ash.machine),'.')-1,-1,LENGTH(NVL(ash_parent.machine,ash.machine)))
|
||||
) machine
|
||||
, ROUND(MAX(ash.pga_allocated + NVL(ash_parent.pga_allocated,0))/power(1024,2)) pga_allocated
|
||||
FROM gv$active_session_history ash
|
||||
JOIN dba_users u ON u.user_id = ash.user_id
|
||||
JOIN dba_services s ON s.name_hash = ash.service_hash
|
||||
LEFT OUTER JOIN gv$active_session_history ash_parent
|
||||
ON ash_parent.inst_id = ash.qc_instance_id
|
||||
AND ash_parent.session_id = ash.qc_session_id
|
||||
AND ash_parent.session_serial# = ash.qc_session_serial#
|
||||
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
|
||||
WHERE ash.sql_id IS NOT NULL
|
||||
AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
|
||||
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
|
||||
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
|
||||
AND ash.sql_id LIKE '&&SQL_ID'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24))
|
||||
--AND ash.sql_exec_start IS NOT NULL
|
||||
&&WHERECLAUSE
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.inst_id)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
, u.username
|
||||
, s.name
|
||||
, NVL(ash_parent.program,ash.program)
|
||||
, SUBSTR(NVL(ash_parent.machine,ash.machine),1,DECODE(INSTR(NVL(ash_parent.machine,ash.machine),'.')-1,-1,LENGTH(NVL(ash_parent.machine,ash.machine))))
|
||||
ORDER BY MIN(ash.sample_time) ASC
|
||||
, max(ash.sample_time) asc
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
229
vg/ash_sid_sqlids.sql
Normal file
229
vg/ash_sid_sqlids.sql
Normal file
@@ -0,0 +1,229 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session's SQL IDs from ASH
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
* 3 - Serial# (Default %)
|
||||
* 4 - Number of hours (Default 24)
|
||||
* 5 - SQL_ID (Default %)
|
||||
* 6 - WhereClause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-JUL-15 Vishal Gupta Added logic to sum up temp/page space for all parallel slaves
|
||||
* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parameter
|
||||
* 28-JUN-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE SID
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE SERIAL
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE SQL_ID
|
||||
UNDEFINE WHERECLAUSE
|
||||
UNDEFINE WHERECLAUSE2
|
||||
UNDEFINE HAVINGCLAUSE
|
||||
|
||||
DEFINE SID="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
DEFINE SERIAL="&&3"
|
||||
DEFINE HOURS="&&4"
|
||||
DEFINE SQL_ID="&&5"
|
||||
DEFINE WHERECLAUSE="&&6"
|
||||
DEFINE WHERECLAUSE2="&&7"
|
||||
DEFINE HAVINGCLAUSE="&&8"
|
||||
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
|
||||
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
|
||||
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
|
||||
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
|
||||
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=99,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
|
||||
DEFINE BYTES_FORMAT=99,999
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
/************************************/
|
||||
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * ASH SQL Ids
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * SID = "&&SID"
|
||||
PROMPT * Instance ID = "&&INST_ID"
|
||||
PROMPT * Serial# = "&&SERIAL"
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * SQL Id = "&&SQL_ID"
|
||||
PROMPT * Where Clause = "&&WHERECLAUSE"
|
||||
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
|
||||
PROMPT * Having Clause = "&&HAVINGCLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
|
||||
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
|
||||
COLUMN sql_exec_start FORMAT a18
|
||||
COLUMN sql_exec_end FORMAT a18
|
||||
COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12
|
||||
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
|
||||
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
|
||||
COLUMN current_dop HEADING "DOP" FORMAT 999
|
||||
COLUMN phyread_requests HEADING "Phy|Read|Reqs|(&&COUNT_HEADING)" FORMAT 999999
|
||||
COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(&&COUNT_HEADING)" FORMAT 999999
|
||||
COLUMN phyread HEADING "Phy|Read|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN phywrite HEADING "Phy|Write|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN interconnect_io HEADING "Inter|Connect|IO|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN pga_allocated HEADING "PGA|(&&BYTES_HEADING)" FORMAT 999.00
|
||||
COLUMN temp_space_allocated HEADING "Temp|Space|(&&BYTES_HEADING)" FORMAT 9999.00
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
|
||||
, SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000','')
|
||||
,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000',''),'.')-1
|
||||
) duration
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
--, ash.sql_exec_id
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
&&_IF_ORA_11202_OR_HIGHER , max(current_dop) current_dop
|
||||
, ash.force_matching_signature
|
||||
, ash.top_level_sql_id
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_requests)/&&COUNT_DIVIDER) phyread_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_requests)/&&COUNT_DIVIDER) phywrite_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/&&BYTES_DIVIDER) phyread
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/&&BYTES_DIVIDER) phywrite
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/&&BYTES_DIVIDER) interconnect_io
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.pga_allocated)/&&BYTES_DIVIDER,2) pga_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.temp_space_allocated)/&&BYTES_DIVIDER,2) temp_space_allocated
|
||||
FROM
|
||||
(
|
||||
SELECT /*+ parallel(ash, 10) LEADING(ash) */
|
||||
ash.session_id
|
||||
, ash.inst_id
|
||||
, ash.session_serial#
|
||||
, ash.qc_session_id
|
||||
, ash.qc_instance_id
|
||||
, ash.qc_session_serial#
|
||||
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) sql_exec_start
|
||||
, max(ash.sample_time) sample_time
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop
|
||||
, ash.force_matching_signature
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_requests) delta_read_io_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_requests) delta_write_io_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_bytes) delta_read_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_bytes) delta_write_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_interconnect_io_bytes) delta_interconnect_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.pga_allocated) pga_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.temp_space_allocated) temp_space_allocated
|
||||
FROM gv$active_session_history ash
|
||||
LEFT OUTER JOIN gv$active_session_history ash_parent
|
||||
ON ash_parent.inst_id = ash.qc_instance_id
|
||||
AND ash_parent.session_id = ash.qc_session_id
|
||||
AND ash_parent.session_serial# = ash.qc_session_serial#
|
||||
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
|
||||
AND ash_parent.sample_time > sysdate - (&&HOURS/24)
|
||||
WHERE ash.sql_id IS NOT NULL
|
||||
AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
|
||||
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
|
||||
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
|
||||
AND NVL(ash.sql_id,' ') LIKE '&&SQL_ID'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND ash.sql_exec_id IS NOT NULL
|
||||
&&WHERECLAUSE &&WHERECLAUSE2
|
||||
GROUP BY ash.session_id
|
||||
, ash.inst_id
|
||||
, ash.session_serial#
|
||||
, ash.qc_session_id
|
||||
, ash.qc_instance_id
|
||||
, ash.qc_session_serial#
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id)
|
||||
) ash
|
||||
WHERE 1=1
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.inst_id)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
--, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.top_level_sql_id
|
||||
&&HAVINGCLAUSE
|
||||
--having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 20 -- Physical Read + Write GBs
|
||||
--having (SUM(ash.delta_read_io_bytes) ) / power(1024,3) > 100 -- Physical Write GBs
|
||||
--having (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 100 -- Interconnect IO GBs
|
||||
--having (SUM(ash.pga_allocated) ) / power(1024,3) > 2 -- PGA GBs
|
||||
--having (SUM(ash.temp_space_allocated) ) / power(1024,3) > 10 -- Temp Space GBs
|
||||
ORDER BY --max(ash.sample_time) asc
|
||||
--,
|
||||
max(ash.sample_time) asc
|
||||
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
212
vg/ash_temp_usage.sql
Normal file
212
vg/ash_temp_usage.sql
Normal file
@@ -0,0 +1,212 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display tempspace usage from ASH
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - Number of hours (Default 24)
|
||||
* 2 - SPACE_MB (Default 500MB)
|
||||
* 3 - TEMPORARY_TABLESPACE (Default %)
|
||||
* 4 - WhereClause
|
||||
* 5 - WhereClause2
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 12-JUL-16 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE SPACE_MB
|
||||
UNDEFINE TEMP_TABLESPACE
|
||||
UNDEFINE WHERECLAUSE
|
||||
UNDEFINE WHERECLAUSE2
|
||||
|
||||
DEFINE HOURS="&&1"
|
||||
DEFINE SPACE_MB="&&2"
|
||||
DEFINE TEMP_TABLESPACE="&&3"
|
||||
DEFINE WHERECLAUSE="&&4"
|
||||
DEFINE WHERECLAUSE2="&&5"
|
||||
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
COLUMN _SPACE_MB NEW_VALUE SPACE_MB NOPRINT
|
||||
COLUMN _TEMP_TABLESPACE NEW_VALUE TEMP_TABLESPACE NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&HOURS' ,'','24' ,'&&HOURS') "_HOURS"
|
||||
, DECODE('&&SPACE_MB' ,'','500','&&SPACE_MB') "_SPACE_MB"
|
||||
, DECODE('&&TEMP_TABLESPACE','','%' ,UPPER('&&TEMP_TABLESPACE')) "_TEMP_TABLESPACE"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=99,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
|
||||
DEFINE BYTES_FORMAT=99,999
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
/************************************/
|
||||
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * ASH - High Temp space using SQL statements
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * Space Threshold (MB) = "&&SPACE_MB"
|
||||
PROMPT * Temporary Tablespace = "&&TEMP_TABLESPACE"
|
||||
PROMPT * Where Clause = "&&WHERECLAUSE"
|
||||
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
|
||||
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
|
||||
COLUMN sql_exec_start FORMAT a18
|
||||
COLUMN sql_exec_end FORMAT a18
|
||||
COLUMN duration FORMAT a12
|
||||
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
|
||||
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
|
||||
COLUMN current_dop HEADING "DOP" FORMAT 999
|
||||
COLUMN phyread_requests HEADING "Phy|Read|Reqs|(&&COUNT_HEADING)" FORMAT 999999
|
||||
COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(&&COUNT_HEADING)" FORMAT 999999
|
||||
COLUMN phyread HEADING "Phy|Read|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN phywrite HEADING "Phy|Write|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN interconnect_io HEADING "Inter|Connect|IO|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN pga_allocated HEADING "PGA|(&&BYTES_HEADING)" FORMAT 999.00
|
||||
COLUMN temp_space_allocated HEADING "Temp|Space|(&&BYTES_HEADING)" FORMAT 9999.00
|
||||
COLUMN temp_tbs HEADING "Temp TBS" FORMAT A30
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
|
||||
, SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000','')
|
||||
,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000',''),'.')-1
|
||||
) duration
|
||||
, (select temporary_tablespace from dba_users where user_id = ash.user_id) temp_tbs
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.temp_space_allocated)/&&BYTES_DIVIDER,2) temp_space_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.pga_allocated)/&&BYTES_DIVIDER,2) pga_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_requests)/&&COUNT_DIVIDER) phyread_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_requests)/&&COUNT_DIVIDER) phywrite_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/&&BYTES_DIVIDER) phyread
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/&&BYTES_DIVIDER) phywrite
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/&&BYTES_DIVIDER) interconnect_io
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
--, ash.sql_exec_id
|
||||
, ash.sql_id
|
||||
-- , ash.sql_child_number
|
||||
-- , ash.sql_plan_hash_value
|
||||
--&&_IF_ORA_11202_OR_HIGHER , max(current_dop) current_dop
|
||||
-- , ash.force_matching_signature
|
||||
-- , ash.top_level_sql_id
|
||||
FROM
|
||||
(
|
||||
SELECT /*+ parallel(ash, 10) LEADING(ash) */
|
||||
ash.session_id
|
||||
, ash.inst_id
|
||||
, ash.session_serial#
|
||||
, ash.qc_session_id
|
||||
, ash.qc_instance_id
|
||||
, ash.qc_session_serial#
|
||||
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) sql_exec_start
|
||||
, max(ash.sample_time) sample_time
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.user_id
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop
|
||||
, ash.force_matching_signature
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_requests) delta_read_io_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_requests) delta_write_io_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_bytes) delta_read_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_bytes) delta_write_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_interconnect_io_bytes) delta_interconnect_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.pga_allocated) pga_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.temp_space_allocated) temp_space_allocated
|
||||
FROM gv$active_session_history ash
|
||||
LEFT OUTER JOIN gv$active_session_history ash_parent
|
||||
ON ash_parent.inst_id = ash.qc_instance_id
|
||||
AND ash_parent.session_id = ash.qc_session_id
|
||||
AND ash_parent.session_serial# = ash.qc_session_serial#
|
||||
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
|
||||
AND ash_parent.sample_time > sysdate - (&&HOURS/24)
|
||||
WHERE ash.sql_id IS NOT NULL
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND ('&&TEMP_TABLESPACE' = '%'
|
||||
OR ('&&TEMP_TABLESPACE' != '%'
|
||||
AND ash.user_id IN (select user_id from dba_users where temporary_tablespace LIKE '&&TEMP_TABLESPACE')
|
||||
)
|
||||
)
|
||||
AND ash.sql_exec_id IS NOT NULL
|
||||
&&WHERECLAUSE &&WHERECLAUSE2
|
||||
GROUP BY ash.session_id
|
||||
, ash.inst_id
|
||||
, ash.session_serial#
|
||||
, ash.qc_session_id
|
||||
, ash.qc_instance_id
|
||||
, ash.qc_session_serial#
|
||||
, ash.user_id
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id)
|
||||
) ash
|
||||
WHERE 1=1
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.inst_id)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
, ash.user_id
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.top_level_sql_id
|
||||
HAVING MAX(ash.temp_space_allocated)/power(1024,2) > &&SPACE_MB -- Temp Space MBs
|
||||
ORDER BY max(ash.sample_time) asc
|
||||
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
82
vg/ash_top_actions.sql
Normal file
82
vg/ash_top_actions.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top actions from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min))
|
||||
* 2 - Top Row Count Default 10)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
|
||||
DEFINE MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top &&TOPROWCOUNT Active Actions (Over Last &&MINUTES min)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN action HEADING "Action" FORMAT a40
|
||||
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
|
||||
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
|
||||
|
||||
WITH ash as
|
||||
(SELECT /*+ NO_MERGE */
|
||||
ash.action
|
||||
, count(1) session_count
|
||||
FROM gv$active_session_history ash
|
||||
WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60))
|
||||
AND ash.session_type <> 'BACKGROUND'
|
||||
AND ash.inst_id LIKE '&&INST_ID'
|
||||
GROUP BY ash.action
|
||||
)
|
||||
, ash_total as
|
||||
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
|
||||
FROM ash
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT ash.action
|
||||
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
|
||||
, ash.session_count
|
||||
FROM ash , ash_total
|
||||
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
|
||||
)
|
||||
WHERE ROWNUM <= &&TOPROWCOUNT
|
||||
;
|
||||
|
||||
@@footer
|
||||
66
vg/ash_top_activity.sql
Normal file
66
vg/ash_top_activity.sql
Normal file
@@ -0,0 +1,66 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top activity from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min))
|
||||
* 2 - Top Row Count Default 10)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
|
||||
DEFINE MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top Activity
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
PROMPT
|
||||
@@ash_top_services '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
|
||||
PROMPT
|
||||
@@ash_top_users '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
|
||||
PROMPT
|
||||
@@ash_top_modules '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
|
||||
PROMPT
|
||||
@@ash_top_actions '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
|
||||
PROMPT
|
||||
@@ash_top_clients '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
|
||||
PROMPT
|
||||
@@ash_top_sessions '&&MINUTES' '&&TOPROWCOUNT' '&&INST_ID'
|
||||
|
||||
@@footer
|
||||
82
vg/ash_top_clients.sql
Normal file
82
vg/ash_top_clients.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top user from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min))
|
||||
* 2 - Top Row Count Default 10)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
|
||||
DEFINE MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top &&TOPROWCOUNT Active Clients (Over Last &&MINUTES min)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN client_id HEADING "Client ID" FORMAT a40
|
||||
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
|
||||
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
|
||||
|
||||
WITH ash as
|
||||
(SELECT /*+ NO_MERGE */
|
||||
ash.client_id
|
||||
, count(1) session_count
|
||||
FROM gv$active_session_history ash
|
||||
WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60))
|
||||
AND ash.session_type <> 'BACKGROUND'
|
||||
AND ash.inst_id LIKE '&&INST_ID'
|
||||
GROUP BY ash.client_id
|
||||
)
|
||||
, ash_total as
|
||||
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
|
||||
FROM ash
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT ash.client_id
|
||||
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
|
||||
, ash.session_count
|
||||
FROM ash , ash_total
|
||||
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
|
||||
)
|
||||
WHERE ROWNUM <= &&TOPROWCOUNT
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
83
vg/ash_top_modules.sql
Normal file
83
vg/ash_top_modules.sql
Normal file
@@ -0,0 +1,83 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top activity from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min))
|
||||
* 2 - Top Row Count Default 10)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
|
||||
DEFINE MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top &&TOPROWCOUNT Active Modules (Over Last &&MINUTES min)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN module HEADING "Module" FORMAT a50
|
||||
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
|
||||
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
|
||||
|
||||
WITH ash as
|
||||
(SELECT /*+ NO_MERGE */
|
||||
ash.module
|
||||
, count(1) session_count
|
||||
FROM gv$active_session_history ash
|
||||
WHERE ash.sample_time > systimestamp - (&&MINUTES/(24*60))
|
||||
AND ash.session_type <> 'BACKGROUND'
|
||||
AND ash.inst_id LIKE '&&INST_ID'
|
||||
GROUP BY ash.module
|
||||
)
|
||||
, ash_total as
|
||||
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
|
||||
FROM ash
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT ash.module
|
||||
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
|
||||
, ash.session_count
|
||||
FROM ash , ash_total
|
||||
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
|
||||
)
|
||||
WHERE ROWNUM <= &&TOPROWCOUNT
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
93
vg/ash_top_services.sql
Normal file
93
vg/ash_top_services.sql
Normal file
@@ -0,0 +1,93 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top activity from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min)
|
||||
* 2 - Top Row Count (Default 5 rows)
|
||||
* 3 - INST_ID (Default %)
|
||||
* 3 - TO_MINUTES (Default 0min)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE FROM_MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE TO_MINUTES
|
||||
|
||||
DEFINE FROM_MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
DEFINE TO_MINUTES="&&4"
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _FROM_MINUTES NEW_VALUE FROM_MINUTES NOPRINT
|
||||
COLUMN _TO_MINUTES NEW_VALUE TO_MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&FROM_MINUTES','','5','&&FROM_MINUTES') "_FROM_MINUTES"
|
||||
, DECODE('&&TO_MINUTES','','0','&&TO_MINUTES') "_TO_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top &&TOPROWCOUNT Active Services (Over Last &&FROM_MINUTES min)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&FROM_MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT * - To Minutes = '&&TO_MINUTES'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a30
|
||||
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
|
||||
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
|
||||
|
||||
WITH ash as
|
||||
(SELECT /*+ NO_MERGE */
|
||||
sn.name service_name
|
||||
, count(1) session_count
|
||||
FROM gv$active_session_history ash
|
||||
, dba_services sn
|
||||
WHERE ash.service_hash = sn.name_hash
|
||||
AND ash.session_type <> 'BACKGROUND'
|
||||
AND ash.inst_id LIKE '&&INST_ID'
|
||||
AND ash.sample_time > systimestamp - (&&FROM_MINUTES/(24*60))
|
||||
AND ash.sample_time > systimestamp - (&&TO_MINUTES/(24*60))
|
||||
GROUP BY sn.name
|
||||
)
|
||||
, ash_total as
|
||||
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
|
||||
FROM ash
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT ash.service_name
|
||||
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
|
||||
, ash.session_count
|
||||
FROM ash , ash_total
|
||||
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
|
||||
)
|
||||
WHERE ROWNUM <= &&TOPROWCOUNT
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
117
vg/ash_top_services_breakdown.sql
Normal file
117
vg/ash_top_services_breakdown.sql
Normal file
@@ -0,0 +1,117 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top activity from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min)
|
||||
* 2 - Top Row Count (Default 5 rows)
|
||||
* 3 - INST_ID (Default %)
|
||||
* 3 - TO_MINUTES (Default 0min)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE FROM_MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE TO_MINUTES
|
||||
|
||||
DEFINE FROM_MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
DEFINE TO_MINUTES="&&4"
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _FROM_MINUTES NEW_VALUE FROM_MINUTES NOPRINT
|
||||
COLUMN _TO_MINUTES NEW_VALUE TO_MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&FROM_MINUTES','','5','&&FROM_MINUTES') "_FROM_MINUTES"
|
||||
, DECODE('&&TO_MINUTES','','0','&&TO_MINUTES') "_TO_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top &&TOPROWCOUNT Active Services (Over Last &&FROM_MINUTES min)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&FROM_MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT * - To Minutes = '&&TO_MINUTES'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a30
|
||||
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
|
||||
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
|
||||
|
||||
WITH ash_session_summary AS
|
||||
(
|
||||
select TRUNC(ash.sample_time,'MI') sample_time
|
||||
, s.name service_name
|
||||
, count(1) session_count
|
||||
from gv$active_session_history ash
|
||||
JOIN dba_services s ON s.name_hash = ash.service_hash
|
||||
where 1=1
|
||||
AND s.name NOT IN ('SYS$BACKGROUND')
|
||||
--and s.name = 'pr01pimi_sas_con'
|
||||
and ash.sample_time > sysdate - (1/24)
|
||||
group by TRUNC(ash.sample_time,'MI'), s.name
|
||||
)
|
||||
, ash_rank AS
|
||||
(
|
||||
SELECT service_name
|
||||
, RANK() OVER (ORDER BY SUM(session_count) desc) rank
|
||||
FROM ash_session_summary
|
||||
GROUP BY service_name
|
||||
)
|
||||
, graph_unit AS
|
||||
(
|
||||
SELECT GREATEST(CEIL(MAX(SUM(session_count))/100),1) divider
|
||||
FROM ash_session_summary
|
||||
GROUP BY sample_time
|
||||
)
|
||||
SELECT a.sample_time
|
||||
, MAX(DECODE(r.rank,1,a.service_name,' ')) rank1_service
|
||||
, MAX(DECODE(r.rank,2,a.service_name,' ')) rank2_service
|
||||
, MAX(DECODE(r.rank,3,a.service_name,' ')) rank3_service
|
||||
, MAX(DECODE(r.rank,4,a.service_name,' ')) rank4_service
|
||||
, SUM(DECODE(r.rank,1,a.session_count,0)) rank1
|
||||
, SUM(DECODE(r.rank,2,a.session_count,0)) rank2
|
||||
, SUM(DECODE(r.rank,3,a.session_count,0)) rank3
|
||||
, SUM(DECODE(r.rank,4,a.session_count,0)) rank4
|
||||
, SUM(CASE WHEN r.rank >= 5 THEN a.session_count ELSE 0 END) rank_others
|
||||
, TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,1,a.session_count,0))/g.divider),'#'))
|
||||
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,2,a.session_count,0))/g.divider),'%'))
|
||||
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,3,a.session_count,0))/g.divider),'&'))
|
||||
|| TRIM(RPAD(' ',ROUND(SUM(DECODE(r.rank,4,a.session_count,0))/g.divider),'^'))
|
||||
|| TRIM(RPAD(' ',ROUND(SUM(CASE WHEN r.rank >= 5 THEN a.session_count ELSE 0 END)/g.divider),'*'))
|
||||
Graph
|
||||
FROM ash_session_summary a
|
||||
JOIN ash_rank r ON r.service_name = a.service_name
|
||||
JOIN graph_unit g on g.divider >= 1
|
||||
WHERE 1=1
|
||||
GROUP BY a.sample_time, g.divider
|
||||
ORDER BY a.sample_Time
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
105
vg/ash_top_sessions.sql
Normal file
105
vg/ash_top_sessions.sql
Normal file
@@ -0,0 +1,105 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top user from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min))
|
||||
* 2 - Top Row Count Default 10)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
|
||||
DEFINE MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top &&TOPROWCOUNT Active Sesssions (Over Last &&MINUTES min)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN inst_id HEADING "Instance|Number" FORMAT 9999999
|
||||
COLUMN sid HEADING "SID" FORMAT a6
|
||||
COLUMN session_serial# HEADING "Serial#" FORMAT 9999999
|
||||
COLUMN username HEADING "UserName" FORMAT a30
|
||||
COLUMN program HEADING "Program" FORMAT a15 TRUNC
|
||||
COLUMN machine HEADING "Machine" FORMAT a20 TRUNC
|
||||
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
|
||||
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
|
||||
|
||||
WITH ash as
|
||||
(SELECT /*+ NO_MERGE */
|
||||
ash.inst_id
|
||||
, ash.session_id
|
||||
, ash.session_serial#
|
||||
, u.username
|
||||
, ash.program
|
||||
, ash.machine
|
||||
, count(1) session_count
|
||||
FROM gv$active_session_history ash
|
||||
, dba_users u
|
||||
WHERE ash.user_id = u.user_id
|
||||
AND ash.session_type <> 'BACKGROUND'
|
||||
AND ash.inst_id LIKE '&&INST_ID'
|
||||
AND ash.sample_time > systimestamp - (&&MINUTES/(24*60))
|
||||
GROUP BY ash.inst_id
|
||||
, ash.session_id
|
||||
, ash.session_serial#
|
||||
, u.username
|
||||
, ash.program
|
||||
, ash.machine
|
||||
)
|
||||
, ash_total as
|
||||
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
|
||||
FROM ash
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT inst_id
|
||||
, session_id
|
||||
, session_serial#
|
||||
, username
|
||||
, program
|
||||
, machine
|
||||
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
|
||||
, ash.session_count
|
||||
FROM ash , ash_total
|
||||
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
|
||||
)
|
||||
WHERE ROWNUM <= &&TOPROWCOUNT
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
156
vg/ash_top_sqlids.sql
Normal file
156
vg/ash_top_sqlids.sql
Normal file
@@ -0,0 +1,156 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLs above certain thresholds from ASH repository
|
||||
* Compatibility : 11.1 and above
|
||||
* Parameters : 1 - Number of hours (Default 1)
|
||||
* 2 - Physical IO in GBs (Default 100)
|
||||
* 3 - Physical Read in GBs (Default 0)
|
||||
* 4 - Physical Write in GBs (Default 0)
|
||||
* 5 - Interconnect IO in GBs (Default 0)
|
||||
* 6 - WhereClause
|
||||
* 7 - WhereClause2
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parmaeter
|
||||
* 28-JUN-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE PHYIO
|
||||
UNDEFINE PHYREAD
|
||||
UNDEFINE PHYWRITE
|
||||
UNDEFINE INTERCONNECT_IO
|
||||
UNDEFINE WHERECLAUSE
|
||||
UNDEFINE WHERECLAUSE2
|
||||
UNDEFINE INST_ID
|
||||
|
||||
DEFINE HOURS="&&1"
|
||||
DEFINE PHYIO="&&2"
|
||||
DEFINE PHYREAD="&&3"
|
||||
DEFINE PHYWRITE="&&4"
|
||||
DEFINE INTERCONNECT_IO="&&5"
|
||||
DEFINE WHERECLAUSE="&&6"
|
||||
DEFINE WHERECLAUSE2="&&7"
|
||||
|
||||
DEFINE INST_ID=""
|
||||
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
COLUMN _PHYIO NEW_VALUE PHYIO NOPRINT
|
||||
COLUMN _PHYREAD NEW_VALUE PHYREAD NOPRINT
|
||||
COLUMN _PHYWRITE NEW_VALUE PHYWRITE NOPRINT
|
||||
COLUMN _INTERCONNECT_IO NEW_VALUE INTERCONNECT_IO NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&HOURS','','1','%','1','&&HOURS') "_HOURS"
|
||||
, DECODE('&&PHYIO','','100','%','100','&&PHYIO') "_PHYIO"
|
||||
, DECODE('&&PHYREAD','','0','%','0','&&PHYREAD') "_PHYREAD"
|
||||
, DECODE('&&PHYWRITE','','0','%','0','&&PHYWRITE') "_PHYWRITE"
|
||||
, DECODE('&&INTERCONNECT_IO','','0','%','0','&&INTERCONNECT_IO') "_INTERCONNECT_IO"
|
||||
FROM DUAL
|
||||
;
|
||||
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * ASH SQL Ids
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * Physical IO (GB) = "&&PHYIO"
|
||||
PROMPT * Physical Read (GB) = "&&PHYREAD"
|
||||
PROMPT * Physical Write (GB) = "&&PHYWRITE"
|
||||
PROMPT * Interconnect IO (GB) = "&&INTERCONNECT_IO"
|
||||
PROMPT * Where Clause = "&&WHERECLAUSE"
|
||||
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
|
||||
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
|
||||
COLUMN sql_exec_start FORMAT a18
|
||||
COLUMN sql_exec_end FORMAT a18
|
||||
COLUMN duration FORMAT a12
|
||||
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
|
||||
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
|
||||
COLUMN current_dop HEADING "DOP" FORMAT 999
|
||||
COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999
|
||||
COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999
|
||||
COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999
|
||||
COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 999.00
|
||||
COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 9999.00
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT /*+ parallel(ash, 10) LEADING(ash) */
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
|
||||
, SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+')
|
||||
,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+'),'.')-1
|
||||
) duration
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
--, ash.sql_exec_id
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop
|
||||
, ash.force_matching_signature
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/power(1024,3)) phyread
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/power(1024,3)) phywrite
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/power(1024,3)) interconnect_io
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(ash.pga_allocated)/power(1024,3),2) pga_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(ash.temp_space_allocated)/power(1024,3),2) temp_space_allocated
|
||||
FROM gv$active_session_history ash
|
||||
LEFT OUTER JOIN gv$active_session_history ash_parent
|
||||
ON ash_parent.inst_id = ash.qc_instance_id
|
||||
AND ash_parent.session_id = ash.qc_session_id
|
||||
AND ash_parent.session_serial# = ash.qc_session_serial#
|
||||
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
|
||||
AND ash_parent.sample_time > sysdate - (&&HOURS/24)
|
||||
WHERE ash.sql_id IS NOT NULL
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND ash.sql_exec_id IS NOT NULL
|
||||
&&WHERECLAUSE &&WHERECLAUSE2
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.inst_id)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id)
|
||||
having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_write_io_bytes) ) / power(1024,3) >= &&PHYIO
|
||||
AND (SUM(ash.delta_read_io_bytes) ) / power(1024,3) >= &&PHYREAD
|
||||
AND (SUM(ash.delta_write_io_bytes) ) / power(1024,3) >= &&PHYWRITE
|
||||
AND (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) >= &&INTERCONNECT_IO
|
||||
ORDER BY --max(ash.sample_time) asc
|
||||
--,
|
||||
NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
|
||||
, max(ash.sample_time) asc
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
86
vg/ash_top_users.sql
Normal file
86
vg/ash_top_users.sql
Normal file
@@ -0,0 +1,86 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display top user from ASH
|
||||
* Parameters : 1 - Number of MINUTES (Default 5min))
|
||||
* 2 - Top Row Count Default 10)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE MINUTES
|
||||
UNDEFINE TOPROWCOUNT
|
||||
UNDEFINE INST_ID
|
||||
|
||||
DEFINE MINUTES="&&1"
|
||||
DEFINE TOPROWCOUNT="&&2"
|
||||
DEFINE INST_ID='&&3'
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT
|
||||
COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES"
|
||||
, DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
from dual;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT *****************************************************************
|
||||
PROMPT * ASH - Top &&TOPROWCOUNT Active Users (Over Last &&MINUTES min)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Minutes = '&&MINUTES'
|
||||
PROMPT * - Top Row Count = '&&TOPROWCOUNT'
|
||||
PROMPT * - Instance ID = '&&INST_ID'
|
||||
PROMPT *****************************************************************
|
||||
|
||||
|
||||
COLUMN username HEADING "UserName" FORMAT a30
|
||||
COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99
|
||||
COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999
|
||||
|
||||
WITH ash as
|
||||
(SELECT /*+ NO_MERGE */
|
||||
u.username
|
||||
, count(1) session_count
|
||||
FROM gv$active_session_history ash
|
||||
, dba_users u
|
||||
WHERE ash.user_id = u.user_id
|
||||
AND ash.session_type <> 'BACKGROUND'
|
||||
AND ash.inst_id LIKE '&&INST_ID'
|
||||
AND ash.sample_time > systimestamp - (&&MINUTES/(24*60))
|
||||
GROUP BY u.username
|
||||
)
|
||||
, ash_total as
|
||||
(SELECT /*+ NO_MERGE */ SUM(session_count) session_total
|
||||
FROM ash
|
||||
)
|
||||
SELECT * FROM (
|
||||
SELECT ash.username
|
||||
, LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent
|
||||
, ash.session_count
|
||||
FROM ash , ash_total
|
||||
ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc
|
||||
)
|
||||
WHERE ROWNUM <= &&TOPROWCOUNT
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
217
vg/asm_database_size.sql
Normal file
217
vg/asm_database_size.sql
Normal file
@@ -0,0 +1,217 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : ASM usage by file type for all mounted diskgroups (including other databases)
|
||||
* Parameters : 1 - DBName (% - wildchar, \ - escape char, default is '%')
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ ------------------------------------------------------------------------------
|
||||
* 24-Dec-14 Vishal Gupta Enhanced script to display file only in alias directory if alias is present
|
||||
* 21-Jan-14 Vishal Gupta Commented out unmirrored figures from output
|
||||
* 18-Jul-13 Vishal Gupta Created
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DBNAME
|
||||
|
||||
DEFINE DBNAME="&&1"
|
||||
|
||||
set term off
|
||||
COLUMN _DBNAME NEW_VALUE DBNAME NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&DBNAME','','%',UPPER('&&DBNAME'))) "_DBNAME"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT *******************************************************************
|
||||
PROMPT * A S M S P A C E U S A G E B Y D A T A B A S E *
|
||||
PROMPT * *
|
||||
PROMPT * - For all diskgroups mounted in current instance *
|
||||
PROMPT * - Including files for other databases *
|
||||
PROMPT * *
|
||||
PROMPT * Input Parameters *
|
||||
PROMPT * - DB Name = '&&DBNAME'
|
||||
PROMPT *******************************************************************
|
||||
|
||||
DEFINE size_label=GB
|
||||
DEFINE size_divider="1024/1024/1024"
|
||||
|
||||
|
||||
COLUMN diskgroup_name HEADING "DiskGroup" FORMAT A16
|
||||
COLUMN DBNAME HEADING "DBName" FORMAT A15
|
||||
|
||||
COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
|
||||
COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 99,999
|
||||
COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
|
||||
COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
|
||||
COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
|
||||
COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
|
||||
COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
|
||||
COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
|
||||
COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
|
||||
|
||||
COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
|
||||
COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999
|
||||
COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
|
||||
COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
|
||||
COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
|
||||
COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
|
||||
COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
|
||||
COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
|
||||
COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
|
||||
|
||||
BREAK ON REPORT
|
||||
|
||||
/*
|
||||
BREAK ON diskgroup_name SKIP 1 DUPLICATES ON REPORT
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
*/
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
|
||||
|
||||
/*
|
||||
PROMPT
|
||||
PROMPT
|
||||
PROMPT - <------------------------ Mirrored (GB) --------------------------------> <------------------------- UnMirrored (GB) ----------------------------->
|
||||
*/
|
||||
|
||||
|
||||
WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias )
|
||||
, asm_diskgroup_stat AS (SELECT /*+ NO_MERGE */ * FROM v$asm_diskgroup )
|
||||
, asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file )
|
||||
, files AS (SELECT /*+ NO_MERGE MATERIALIZE */
|
||||
diskgroup_name
|
||||
, SUBSTR(SYS_CONNECT_BY_PATH(alias_name, '/'),2) File_Path
|
||||
, alias_name
|
||||
, type
|
||||
, alias_directory
|
||||
, space
|
||||
, bytes
|
||||
, system_created
|
||||
, file_number
|
||||
, incarnation
|
||||
FROM (SELECT dg.name diskgroup_name
|
||||
, a.parent_index parent_index
|
||||
, a.name alias_name
|
||||
, a.reference_index reference_index
|
||||
, a.system_created
|
||||
, a.alias_directory
|
||||
, f.type
|
||||
, f.space
|
||||
, f.bytes
|
||||
, f.file_number
|
||||
, f.incarnation
|
||||
FROM asm_diskgroup_stat dg
|
||||
JOIN asm_alias a ON a.group_number = dg.group_number
|
||||
/* Outer join because alias could be a directory */
|
||||
LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number
|
||||
AND f.file_number = a.file_number
|
||||
AND f.incarnation = a.file_incarnation
|
||||
-- WHERE dg.name LIKE '&&DISKGROUP_NAME'
|
||||
)
|
||||
CONNECT BY NOCYCLE PRIOR reference_index = parent_index
|
||||
START WITH mod(parent_index, power(2, 24)) = 0 /*Parent level database directory e.g. +DATA/MYDB etc */
|
||||
AND alias_name LIKE '&&DBNAME'
|
||||
|
||||
/*
|
||||
AND reference_index IN (SELECT a2.reference_index
|
||||
FROM asm_alias a2
|
||||
WHERE (mod(a2.parent_index, power(2, 24))) = 0
|
||||
)
|
||||
*/
|
||||
)
|
||||
|
||||
SELECT UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) dbname
|
||||
, ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize
|
||||
/*
|
||||
, ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize
|
||||
*/
|
||||
FROM files f /* System created files */
|
||||
LEFT OUTER JOIN files f2 /* File alias */
|
||||
ON f2.diskgroup_name = f.diskgroup_name
|
||||
AND f2.file_number = f.file_number
|
||||
AND f2.incarnation = f.incarnation
|
||||
AND f2.system_created = 'N'
|
||||
AND f2.alias_directory = 'N'
|
||||
AND f.system_created = 'Y'
|
||||
AND f.alias_directory = 'N'
|
||||
WHERE 1=1
|
||||
AND f.system_created = 'Y' /* Dont remove this condition */
|
||||
AND f.alias_directory = 'N'
|
||||
AND UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) LIKE '&&DBNAME' ESCAPE '\'
|
||||
GROUP BY UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,INSTR(NVL(f2.File_Path,f.file_path),'/')-1)) /*dbname*/
|
||||
ORDER BY dbname
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
95
vg/asm_debug.sql
Normal file
95
vg/asm_debug.sql
Normal file
@@ -0,0 +1,95 @@
|
||||
set newpage none
|
||||
spool /tmp/asmdebug.out
|
||||
--
|
||||
-- Get a timestamp
|
||||
select rpad('>', 10, '>'), to_char(sysdate, 'MON DD HH24:MM:SS') from dual;
|
||||
--
|
||||
-- Diskgroup information
|
||||
set head off
|
||||
select 'Diskgroup Information' from dual;
|
||||
set head on
|
||||
column name format a15
|
||||
column DG# format 99
|
||||
select group_number DG#, name, state, type, total_mb, free_mb from
|
||||
v$asm_diskgroup_stat;
|
||||
--
|
||||
-- Get the # of Allocation Units per DG
|
||||
set head off
|
||||
select 'Number of AUs per diskgroup' from dual;
|
||||
set head on
|
||||
select count(number_kfdat) AU_count, group_kfdat DG# from x$kfdat
|
||||
group by group_kfdat;
|
||||
--
|
||||
-- Get the # of Allocation Units per DiskGroup and Disk
|
||||
set head off
|
||||
select 'Number of AUs per Diskgroup,Disk' from dual;
|
||||
col "group#,disk#" for a30
|
||||
set head on
|
||||
select count(*)AU_count, GROUP_KFDAT||','||number_kfdat "group#,disk#" from x$kfdat group by GROUP_KFDAT,number_kfdat;
|
||||
--
|
||||
-- Get the # of allocated (V) and free (F) Allocation Units
|
||||
set head off
|
||||
select 'Number of allocated (V) and free (F) Allocation Units' from dual;
|
||||
col "VF" for a2
|
||||
set head on
|
||||
select GROUP_KFDAT "group#", number_kfdat "disk#", v_kfdat "VF", count(*)
|
||||
from x$kfdat
|
||||
group by GROUP_KFDAT, number_kfdat, v_kfdat;
|
||||
|
||||
|
||||
--
|
||||
-- Get the # of Allocation Units per ASM file
|
||||
set head off
|
||||
select 'Number of AUs per ASM file ordered by AU count for metadata only'
|
||||
from dual;
|
||||
set head on
|
||||
select count(XNUM_KFFXP) AU_count, NUMBER_KFFXP file#, GROUP_KFFXP DG# from x$kffxp where NUMBER_KFFXP < 256
|
||||
group by NUMBER_KFFXP, GROUP_KFFXP
|
||||
order by count(XNUM_KFFXP) ;
|
||||
--
|
||||
-- Get the # of Allocation Units per ASM file by file alias. Change the
|
||||
-- system_created Y|N depending if you want the short or long ASM name
|
||||
set head off
|
||||
select 'Number of AUs per ASM file ordered by AU count. This is for non
|
||||
metadata' from dual;
|
||||
set head on
|
||||
select GROUP_KFFXP, NUMBER_KFFXP, name, count(*)
|
||||
from x$kffxp, v$asm_alias
|
||||
where GROUP_KFFXP=GROUP_NUMBER and NUMBER_KFFXP=FILE_NUMBER and
|
||||
system_created='Y'
|
||||
group by GROUP_KFFXP, NUMBER_KFFXP, name
|
||||
order by GROUP_KFFXP, NUMBER_KFFXP;
|
||||
--
|
||||
-- Get partner information. This is really only useful if redundancy is other than
|
||||
-- external.
|
||||
set head off
|
||||
select 'The following shows the disk to partner relationship. This is really only
|
||||
useful if using normal or high redundancy.' from dual;
|
||||
set head on
|
||||
select grp DG#, disk, NUMBER_KFDPARTNER partner, PARITY_KFDPARTNER parity, ACTIVE_KFDPARTNER active
|
||||
from x$kfdpartner;
|
||||
--
|
||||
-- Another look at file utilization.
|
||||
set head off
|
||||
select 'bytes is the sum of AUs with data in them * 1024^2
|
||||
space is the sum of all AUs allocated for this file * 1024^2'
|
||||
from dual;
|
||||
set head on
|
||||
select f.group_number, f.file_number, bytes, space, space/(1024*1024) "InMB", a.name
|
||||
from v$asm_file f, v$asm_alias a
|
||||
where f.group_number=a.group_number and f.file_number=a.file_number
|
||||
and system_created='Y'
|
||||
order by f.group_number, f.file_number;
|
||||
--
|
||||
-- Get robust disk information
|
||||
set linesize 1500
|
||||
set head off
|
||||
select 'Robust disk information' from dual;
|
||||
set head on
|
||||
select GROUP_NUMBER, DISK_NUMBER, INCARNATION, MOUNT_STATUS, HEADER_STATUS, MODE_STATUS, STATE, LIBRARY, TOTAL_MB, FREE_MB,
|
||||
NAME, FAILGROUP, LABEL, PATH, CREATE_DATE, MOUNT_DATE, READS,
|
||||
WRITES, READ_ERRS, WRITE_ERRS, READ_TIME, WRITE_TIME, BYTES_READ, BYTES_WRITTEN
|
||||
from v$asm_disk_stat;
|
||||
--
|
||||
spool off
|
||||
|
||||
100
vg/asm_disk.sql
Normal file
100
vg/asm_disk.sql
Normal file
@@ -0,0 +1,100 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display ASM Disks
|
||||
* Parameter : 1 - DiskGroup Name (Default % , use / as escape character)
|
||||
* 2 - FailGroup (Default % , use / as escape character)
|
||||
* 3 - DiskName (Default % , use / as escape character)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 21-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DISKGROUP_NAME
|
||||
UNDEFINE FAILGROUP
|
||||
UNDEFINE DISK_NAME
|
||||
|
||||
DEFINE DISKGROUP_NAME="&&1"
|
||||
DEFINE FAILGROUP="&&2"
|
||||
DEFINE DISK_NAME="&&3"
|
||||
|
||||
set term off
|
||||
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
|
||||
COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT
|
||||
COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
|
||||
, UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP"
|
||||
, UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
PROMPT *******************************************
|
||||
PROMPT A S M D I S K S
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
|
||||
PROMPT * - FailGroup = '&&FAILGROUP'
|
||||
PROMPT * - DiskName = '&&DISK_NAME'
|
||||
PROMPT *******************************************
|
||||
|
||||
COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15
|
||||
COLUMN failgroup HEAD "FailGroup" FORMAT A10
|
||||
COLUMN name HEAD "ASM Disk Name" FORMAT A30
|
||||
COLUMN preferred_read HEAD "Pref|Read" FORMAT A4
|
||||
COLUMN mount_status HEAD "Mount|Status" FORMAT A8
|
||||
COLUMN header_status HEAD "Header|Status" FORMAT A8
|
||||
COLUMN mode_status HEAD "Mode|Status" FORMAT A8
|
||||
COLUMN repair_timer HEAD "Repair|Timer|(sec)" FORMAT 9,999
|
||||
COLUMN library HEAD "Library" FORMAT A7
|
||||
COLUMN label HEAD "Label" FORMAT A30
|
||||
COLUMN path HEAD "Path" FORMAT A50
|
||||
COLUMN total_gb HEAD "Total|(GB)" FORMAT 9,999
|
||||
COLUMN free_gb HEAD "Free|(GB)" FORMAT 9,999
|
||||
COLUMN free_gb HEAD "Free|(GB)" FORMAT 9,999
|
||||
COLUMN hot_used_gb HEAD "Hot|Used|(GB)" FORMAT 9,999
|
||||
COLUMN cold_used_gb HEAD "Cold|Used|(GB)" FORMAT 9,999
|
||||
|
||||
|
||||
SELECT dg.NAME DiskGroup
|
||||
, d.failgroup
|
||||
, d.name
|
||||
, d.preferred_read
|
||||
, d.voting_file
|
||||
, d.mount_status
|
||||
, d.header_status
|
||||
, d.mode_status
|
||||
, d.state
|
||||
, d.repair_timer
|
||||
, d.library
|
||||
--, d.label
|
||||
, d.total_mb /1024 total_gb
|
||||
, d.free_mb/1024 free_gb
|
||||
, d.hot_used_mb/1024 hot_used_gb
|
||||
, d.cold_used_mb/1024 cold_used_gb
|
||||
--, d.path
|
||||
-- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view.
|
||||
FROM v$asm_disk_stat d
|
||||
, v$asm_diskgroup_stat dg
|
||||
WHERE d.group_number = dg.group_number
|
||||
AND dg.name LIKE '&&DISKGROUP_NAME'
|
||||
AND NVL(d.failgroup,'%') LIKE '&&FAILGROUP'
|
||||
AND NVL(d.name,'%') LIKE '&&DISK_NAME'
|
||||
ORDER BY dg.NAME
|
||||
, d.FAILGROUP
|
||||
, d.name
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
63
vg/asm_disk_count.sql
Normal file
63
vg/asm_disk_count.sql
Normal file
@@ -0,0 +1,63 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : ASM Disk Count
|
||||
* Parameter : NONE
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 12-Jul-11 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DISKGROUP_NAME
|
||||
DEFINE DISKGROUP_NAME="&&1"
|
||||
|
||||
set term off
|
||||
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
PROMPT *******************************************
|
||||
PROMPT A S M D I S K C O U N T
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
|
||||
PROMPT *******************************************
|
||||
|
||||
COLUMN DiskGroup HEAD "DiskGroup" FORMAT A20
|
||||
|
||||
SELECT dg.NAME DiskGroup
|
||||
, d.FAILGROUP
|
||||
, d.MOUNT_STATUS
|
||||
, d.HEADER_STATUS
|
||||
, d.MODE_STATUS
|
||||
, d.STATE
|
||||
, COUNT(1) DiskCOunt
|
||||
-- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view.
|
||||
FROM v$asm_disk_stat d
|
||||
, v$asm_diskgroup_stat dg
|
||||
WHERE d.group_number = dg.group_number
|
||||
AND dg.name like '&&DISKGROUP_NAME'
|
||||
GROUP BY dg.NAME
|
||||
, d.FAILGROUP
|
||||
, d.MOUNT_STATUS
|
||||
, d.HEADER_STATUS
|
||||
, d.MODE_STATUS
|
||||
, d.STATE
|
||||
ORDER BY dg.NAME
|
||||
, d.FAILGROUP
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
169
vg/asm_disk_iostats.sql
Normal file
169
vg/asm_disk_iostats.sql
Normal file
@@ -0,0 +1,169 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display ASM Disk Statistics
|
||||
* Parameter : 1 - DiskGroup Name (Default % , use / as escape character)
|
||||
* 2 - FailGroup (Default % , use / as escape character)
|
||||
* 3 - DiskName (Default % , use / as escape character)
|
||||
* 4 - DBNAME (Default % , use / as escape character)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 22-Jan-15 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DISKGROUP_NAME
|
||||
UNDEFINE FAILGROUP
|
||||
UNDEFINE DISK_NAME
|
||||
UNDEFINE DB_NAME
|
||||
|
||||
DEFINE DISKGROUP_NAME="&&1"
|
||||
DEFINE FAILGROUP="&&2"
|
||||
DEFINE DISK_NAME="&&3"
|
||||
DEFINE DB_NAME="&&4"
|
||||
|
||||
set term off
|
||||
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
|
||||
COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT
|
||||
COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT
|
||||
COLUMN _DB_NAME NEW_VALUE DB_NAME NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
|
||||
, UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP"
|
||||
, UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME"
|
||||
, UPPER(DECODE('&&DB_NAME','','%','&&DB_NAME')) "_DB_NAME"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=999,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1000"
|
||||
--DEFINE COUNT_SMALL_HEADING="#1000"
|
||||
|
||||
DEFINE COUNT_FORMAT=9,999,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE COUNT_LARGE_FORMAT=999,999
|
||||
--DEFINE COUNT_LARGE_DIVIDER="1"
|
||||
--DEFINE COUNT_LARGE_HEADING="#"
|
||||
DEFINE COUNT_LARGE_DIVIDER="1000"
|
||||
DEFINE COUNT_LARGE_HEADING="#1000"
|
||||
--DEFINE COUNT_LARGE_DIVIDER="1000000"
|
||||
--DEFINE COUNT_LARGE_HEADING="million"
|
||||
--DEFINE COUNT_LARGE_DIVIDER="1000000000"
|
||||
--DEFINE COUNT_LARGE_HEADING="billion"
|
||||
--DEFINE COUNT_LARGE_DIVIDER="1000000000000"
|
||||
--DEFINE COUNT_LARGE_HEADING="trillion"
|
||||
|
||||
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
--DEFINE TIME_DIVIDER="1"
|
||||
--DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="60"
|
||||
--DEFINE TIME_HEADING="min"
|
||||
DEFINE TIME_DIVIDER="3600"
|
||||
DEFINE TIME_HEADING="hr"
|
||||
|
||||
/************************************/
|
||||
|
||||
PROMPT **************************************************
|
||||
PROMPT * A S M D I S K I O S T A T I S T I C S
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
|
||||
PROMPT * - FailGroup = '&&FAILGROUP'
|
||||
PROMPT * - DiskName = '&&DISK_NAME'
|
||||
PROMPT * - DB Name = '&&DB_NAME'
|
||||
PROMPT **************************************************
|
||||
|
||||
COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15
|
||||
COLUMN failgroup HEAD "FailGroup" FORMAT A10
|
||||
COLUMN name HEAD "ASM Disk Name" FORMAT A30
|
||||
COLUMN dbname HEAD "DB Name" FORMAT A10
|
||||
COLUMN repair_timer HEAD "Repair|Timer|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN read_time HEAD "Read|Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN reads HEAD "Total|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
|
||||
COLUMN hot_reads HEAD "Hot|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
|
||||
COLUMN cold_reads HEAD "Cold|Read|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
|
||||
COLUMN read_errs HEAD "Read|Errors|(&&COUNT_SMALL_HEADING)" FORMAT &&COUNT_SMALL_FORMAT
|
||||
COLUMN bytes_read HEAD "Reads|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN cold_bytes_read HEAD "Reads|Cold|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN hot_bytes_read HEAD "Reads|Hot|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN write_time HEAD "Write|Time|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN writes HEAD "Total|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
|
||||
COLUMN hot_writes HEAD "Hot|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
|
||||
COLUMN cold_writes HEAD "Cold|Write|Requests|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
|
||||
COLUMN write_errs HEAD "Write|Errors|(&&COUNT_SMALL_HEADING)" FORMAT &&COUNT_SMALL_FORMAT
|
||||
COLUMN bytes_written HEAD "Writes|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN hot_bytes_written HEAD "Writes|Cold|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN cold_bytes_written HEAD "Writes|Hot|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
|
||||
|
||||
SELECT dg.NAME DiskGroup
|
||||
, i.failgroup
|
||||
, d.name
|
||||
, i.dbname
|
||||
--, i.repair_timer
|
||||
, i.read_time/&&TIME_DIVIDER read_time
|
||||
, i.reads/&&COUNT_LARGE_DIVIDER reads
|
||||
, i.hot_reads/&&COUNT_LARGE_DIVIDER hot_reads
|
||||
, i.cold_reads/&&COUNT_LARGE_DIVIDER cold_reads
|
||||
, i.read_errs/&&COUNT_SMALL_DIVIDER read_errs
|
||||
, ROUND(i.bytes_read/ &&BYTES_DIVIDER,2) bytes_read
|
||||
, ROUND(i.hot_bytes_read/ &&BYTES_DIVIDER ,2) hot_bytes_read
|
||||
, ROUND(i.cold_bytes_read/ &&BYTES_DIVIDER ,2) cold_bytes_read
|
||||
, i.writes/&&COUNT_LARGE_DIVIDER writes
|
||||
, i.hot_writes/&&COUNT_LARGE_DIVIDER hot_writes
|
||||
, i.cold_writes/&&COUNT_LARGE_DIVIDER cold_writes
|
||||
, i.write_time/&&TIME_DIVIDER write_time
|
||||
, i.write_errs/&&COUNT_SMALL_DIVIDER write_errs
|
||||
, ROUND(i.bytes_written / &&BYTES_DIVIDER ,2) bytes_written
|
||||
, ROUND(i.hot_bytes_written / &&BYTES_DIVIDER ,2) hot_bytes_written
|
||||
, ROUND(i.cold_bytes_written / &&BYTES_DIVIDER ,2) cold_bytes_written
|
||||
--, i.path
|
||||
-- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view.
|
||||
FROM v$asm_disk_iostat i
|
||||
JOIN v$asm_diskgroup_stat dg ON i.group_number = dg.group_number
|
||||
JOIN v$asm_disk_stat d ON d.group_number = i.group_number AND d.disk_number = i.disk_number
|
||||
WHERE 1=1
|
||||
AND dg.name LIKE '&&DISKGROUP_NAME'
|
||||
AND NVL(i.failgroup,'%') LIKE '&&FAILGROUP'
|
||||
AND NVL(d.name,'%') LIKE '&&DISK_NAME'
|
||||
AND NVL(i.dbname,'%') LIKE '&&DB_NAME'
|
||||
ORDER BY dg.NAME
|
||||
, i.FAILGROUP
|
||||
, d.name
|
||||
, i.dbname
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
110
vg/asm_disk_stats.sql
Normal file
110
vg/asm_disk_stats.sql
Normal file
@@ -0,0 +1,110 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display ASM Disk Statistics
|
||||
* Parameter : 1 - DiskGroup Name (Default % , use / as escape character)
|
||||
* 2 - FailGroup (Default % , use / as escape character)
|
||||
* 3 - DiskName (Default % , use / as escape character)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 07-MAY-14 Vishal Gupta Commented repair_timer, as its not disk io-statistics
|
||||
* 21-Apr-13 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DISKGROUP_NAME
|
||||
UNDEFINE FAILGROUP
|
||||
UNDEFINE DISK_NAME
|
||||
|
||||
DEFINE DISKGROUP_NAME="&&1"
|
||||
DEFINE FAILGROUP="&&2"
|
||||
DEFINE DISK_NAME="&&3"
|
||||
|
||||
set term off
|
||||
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
|
||||
COLUMN _FAILGROUP NEW_VALUE FAILGROUP NOPRINT
|
||||
COLUMN _DISK_NAME NEW_VALUE DISK_NAME NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
|
||||
, UPPER(DECODE('&&FAILGROUP','','%','&&FAILGROUP')) "_FAILGROUP"
|
||||
, UPPER(DECODE('&&DISK_NAME','','%','&&DISK_NAME')) "_DISK_NAME"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
PROMPT *******************************************
|
||||
PROMPT A S M D I S K S T A T I S T I C S
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
|
||||
PROMPT * - FailGroup = '&&FAILGROUP'
|
||||
PROMPT * - DiskName = '&&DISK_NAME'
|
||||
PROMPT *******************************************
|
||||
|
||||
COLUMN DiskGroup HEAD "DiskGroup" FORMAT A15
|
||||
COLUMN failgroup HEAD "FailGroup" FORMAT A10
|
||||
COLUMN name HEAD "ASM Disk Name" FORMAT A30
|
||||
COLUMN repair_timer HEAD "Repair|Timer|(sec)" FORMAT 9,999
|
||||
COLUMN read_time HEAD "Read|Time|(sec)" FORMAT 9,999
|
||||
COLUMN reads HEAD "Total|Read|Requests|(#)" FORMAT 9,999,999
|
||||
COLUMN hot_reads HEAD "Hot|Read|Requests|(#)" FORMAT 99,999
|
||||
COLUMN cold_reads HEAD "Cold|Read|Requests|(#)" FORMAT 9,999,999
|
||||
COLUMN read_errs HEAD "Read|Errors|(#)" FORMAT 9,999
|
||||
COLUMN bytes_read HEAD "Reads|(GB)" FORMAT 9,999.99
|
||||
COLUMN cold_bytes_read HEAD "Reads|Cold|(GB)" FORMAT 9,999.99
|
||||
COLUMN hot_bytes_read HEAD "Reads|Hot|(GB)" FORMAT 9,999.99
|
||||
COLUMN write_time HEAD "Write|Time|(sec)" FORMAT 9,999
|
||||
COLUMN writes HEAD "Total|Write|Requests|(#)" FORMAT 9,999,999
|
||||
COLUMN hot_writes HEAD "Hot|Write|Requests|(#)" FORMAT 99,999
|
||||
COLUMN cold_writes HEAD "Cold|Write|Requests|(#)" FORMAT 9,999,999
|
||||
COLUMN write_errs HEAD "Write|Errors|(#)" FORMAT 9,999
|
||||
COLUMN bytes_written HEAD "Writes|(GB)" FORMAT 9,999.99
|
||||
COLUMN hot_bytes_written HEAD "Writes|Cold|(GB)" FORMAT 9,999.99
|
||||
COLUMN cold_bytes_written HEAD "Writes|Hot|(GB)" FORMAT 9,999.99
|
||||
|
||||
|
||||
SELECT dg.NAME DiskGroup
|
||||
, d.failgroup
|
||||
, d.name
|
||||
--, d.repair_timer
|
||||
, d.preferred_read
|
||||
, d.read_time
|
||||
, d.reads
|
||||
, d.hot_reads
|
||||
, d.cold_reads
|
||||
, d.read_errs
|
||||
, ROUND(d.bytes_read/ 1024/1024/1024,2) bytes_read
|
||||
, ROUND(d.hot_bytes_read/ 1024/1024/1024 ,2) hot_bytes_read
|
||||
, ROUND(d.cold_bytes_read/ 1024/1024/1024 ,2) cold_bytes_read
|
||||
, d.writes
|
||||
, d.hot_writes
|
||||
, d.cold_writes
|
||||
, d.write_time
|
||||
, d.write_errs
|
||||
, ROUND(d.bytes_written / 1024/1024/1024 ,2) bytes_written
|
||||
, ROUND(d.hot_bytes_written / 1024/1024/1024 ,2) hot_bytes_written
|
||||
, ROUND(d.cold_bytes_written / 1024/1024/1024 ,2) cold_bytes_written
|
||||
--, d.path
|
||||
-- V$ASM_DISK_STAT does not perform disk discovery like V$ASM_DISK view.
|
||||
FROM v$asm_disk_stat d
|
||||
, v$asm_diskgroup_stat dg
|
||||
WHERE d.group_number = dg.group_number
|
||||
AND dg.name LIKE '&&DISKGROUP_NAME'
|
||||
AND NVL(d.failgroup,'%') LIKE '&&FAILGROUP'
|
||||
AND NVL(d.name,'%') LIKE '&&DISK_NAME'
|
||||
ORDER BY dg.NAME
|
||||
, d.FAILGROUP
|
||||
, d.name
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
105
vg/asm_diskgroup.sql
Normal file
105
vg/asm_diskgroup.sql
Normal file
@@ -0,0 +1,105 @@
|
||||
@@header
|
||||
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : ASM DiskGroup Info
|
||||
* Parameter : NONE
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ ------------------------------------------------
|
||||
* 13-Feb-14 Vishal Gupta Added following additional fields in the output
|
||||
* - sector_size,block_size,voting_files
|
||||
* 13-Dec-12 Vishal Gupta Added additional query to display ASM attributes
|
||||
* 27-Jan-10 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
set term on
|
||||
|
||||
|
||||
SET numf 999,999
|
||||
|
||||
DEFINE size_label=GB
|
||||
DEFINE size_divider="1024/1024/1024"
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ************************************************
|
||||
PROMPT * A S M D I S K G R O U P D E T A I L S *
|
||||
PROMPT ************************************************
|
||||
|
||||
COLUMN diskgroup_name HEAD "DiskGroup" FORMAT A16
|
||||
COLUMN group_number HEAD "G#" FORMAT 99
|
||||
COLUMN type HEAD "Redundancy|Type" FORMAT A6
|
||||
COLUMN compatibility HEAD "ASM|Compat" FORMAT A10
|
||||
COLUMN database_compatibility HEAD "RDBMS|Compat" FORMAT A10
|
||||
COLUMN allocation_unit_size_MB HEAD "AU|Size|(MB)" FORMAT 999
|
||||
COLUMN sector_size HEAD "Sector|Size" FORMAT 999999
|
||||
COLUMN block_size HEAD "Block|Size" FORMAT 99,999
|
||||
COLUMN offline_disks HEAD "Offline|Disks"
|
||||
COLUMN voting_files HEAD "Voting|Files" FORMAT a6
|
||||
COLUMN TOTAL_GB HEAD "(A)||Total|Avail|(&size_label)"
|
||||
COLUMN used_GB HEAD "(B)||Total|Used|(&size_label)"
|
||||
COLUMN hot_used_GB HEAD "Hot|Used|(&size_label)"
|
||||
COLUMN cold_used_GB HEAD "Cold|Used|(&size_label)"
|
||||
COLUMN FREE_GB HEAD "(C)||Total|Free|(&size_label)"
|
||||
COLUMN REQUIRED_MIRROR_FREE_GB HEAD "(D)|Required|Free|ForMirror|(&size_label)" JUSTIFY RIGHT
|
||||
COLUMN mirrored_total_GB HEAD "(E)||Mirrored|Avail|(&size_label)"
|
||||
COLUMN mirrored_used_GB HEAD "(F)||Mirrored|Used|(&size_label)"
|
||||
COLUMN mirrored_free_GB HEAD "Mirrored|Free|(&size_label)"
|
||||
COLUMN USABLE_GB HEAD "(C-D)/REDUN||Usable|Free|(&size_label)"
|
||||
|
||||
BREAK ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF TOTAL_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF USED_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF HOT_USED_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF COLD_USED_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF FREE_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF REQUIRED_MIRROR_FREE_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF MIRRORED_TOTAL_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF MIRRORED_USED_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF MIRRORED_FREE_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF USABLE_GB FORMAT 9,999,999 ON REPORT
|
||||
|
||||
SELECT d.NAME diskgroup_name
|
||||
, d.group_number
|
||||
, d.state
|
||||
, d.type
|
||||
, d.compatibility
|
||||
, d.database_compatibility
|
||||
, d.allocation_unit_size/1024/1024 allocation_unit_size_MB
|
||||
, d.sector_size
|
||||
, d.block_size
|
||||
, d.offline_disks
|
||||
, d.voting_files
|
||||
FROM v$asm_diskgroup_stat d;
|
||||
|
||||
PROMPT
|
||||
PROMPT ******************************************************
|
||||
PROMPT * A S M D I S K G R O U P A T T R I B U T E S *
|
||||
PROMPT ******************************************************
|
||||
|
||||
COLUMN attribute HEAD "Attribute" FORMAT A25
|
||||
COLUMN system_created HEAD "System|Created" FORMAT A10
|
||||
COLUMN read_only HEAD "Read|Only" FORMAT A5
|
||||
COLUMN value HEAD "Value" FORMAT A15
|
||||
|
||||
SELECT d.name diskgroup_name
|
||||
, a.name attribute
|
||||
, DECODE(a.system_created,'N','No','Y','Yes',a.read_only) system_created
|
||||
, DECODE(a.read_only,'N','No','Y','Yes',a.read_only) read_only
|
||||
, a.value
|
||||
FROM v$asm_diskgroup_stat d
|
||||
, v$asm_attribute a
|
||||
WHERE a.group_number = d.group_number
|
||||
AND a.name not like 'template%'
|
||||
ORDER BY attribute
|
||||
, diskgroup_name
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
139
vg/asm_diskgroup_size.sql
Normal file
139
vg/asm_diskgroup_size.sql
Normal file
@@ -0,0 +1,139 @@
|
||||
@@header
|
||||
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : ASM DiskGroup Sizes and Space Usage
|
||||
* Parameter : NONE
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 17-JUN-13 Vishal Gupta Changed output layout, also switch from v$asm_diskgroup
|
||||
* to v$asm_diskgroup_stat view to avoid diskgroup discovery
|
||||
* 14-Dec-12 Vishal Gupta Added Usable %age
|
||||
* 27-Jan-10 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
set term on
|
||||
|
||||
|
||||
SET numf 999,999
|
||||
|
||||
DEFINE size_label=GB
|
||||
DEFINE size_divider="1024/1024/1024"
|
||||
|
||||
PROMPT **********************************************************************
|
||||
PROMPT * A S M D I S K G R O U P S P A C E U S A G E R E P O R T *
|
||||
PROMPT **********************************************************************
|
||||
|
||||
|
||||
COLUMN NAME HEAD "DiskGroup" FORMAT A16
|
||||
COLUMN group_number HEAD "G#" FORMAT 99
|
||||
COLUMN type HEAD "Redundancy|Type" FORMAT A6
|
||||
COLUMN compatibility HEAD "ASM|Compat" FORMAT A10
|
||||
COLUMN database_compatibility HEAD "RDBMS|Compat" FORMAT A10
|
||||
COLUMN allocation_unit_size_MB HEAD "AU|Size|(MB)" FORMAT 999
|
||||
COLUMN offline_disks HEAD "Offline|Disks"
|
||||
|
||||
COLUMN separator HEAD "!|!|!|!|!|!" FORMAT a1
|
||||
|
||||
COLUMN mirrored_total_GB HEAD "(E)||Mirrored|Total|(&size_label)"
|
||||
COLUMN USABLE_TOTAL_GB HEAD "(A-D)|/REDUN||Safely|Usable|Total|(&size_label)"
|
||||
COLUMN USABLE_USED_GB HEAD "(B-D)|/REDUN||Safely|Usable|Used|(&size_label)"
|
||||
COLUMN USABLE_FREE_GB HEAD "(C-D)|/REDUN||Safely|Usable|Free|(&size_label)"
|
||||
COLUMN USABLE_USED_PERCENT HEAD "Safely|Usable|Used|(%)" FORMAT 999.99
|
||||
COLUMN USABLE_FREE_PERCENT HEAD "Safely|Usable|Free|(%)" FORMAT 999.99
|
||||
COLUMN mirrored_free_GB HEAD "Mirrored|Free|(&size_label)"
|
||||
|
||||
|
||||
COLUMN REQUIRED_MIRROR_FREE_GB HEAD "(D)|Required|Free|ForMirror|(&size_label)" JUSTIFY RIGHT
|
||||
COLUMN TOTAL_GB HEAD "(A)||Total|Avail|(&size_label)"
|
||||
COLUMN used_GB HEAD "(B)||Total|Used|(&size_label)"
|
||||
COLUMN hot_used_GB HEAD "Hot|Used|(&size_label)"
|
||||
COLUMN cold_used_GB HEAD "Cold|Used|(&size_label)"
|
||||
COLUMN FREE_GB HEAD "(C)||Total|Free|(&size_label)"
|
||||
|
||||
|
||||
BREAK ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF TOTAL_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF USED_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF HOT_USED_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF COLD_USED_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF FREE_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF REQUIRED_MIRROR_FREE_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF MIRRORED_TOTAL_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF MIRRORED_USED_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF MIRRORED_FREE_GB FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF USABLE_GB FORMAT 9,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF USABLE_TOTAL_GB FORMAT 9,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF USABLE_USED_GB FORMAT 9,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF USABLE_FREE_GB FORMAT 9,999,999 ON REPORT
|
||||
|
||||
|
||||
/*
|
||||
|
||||
SAMPLE OUTPUT
|
||||
|
||||
**********************************************************************
|
||||
* A S M D I S K G R O U P S P A C E U S A G E R E P O R T *
|
||||
**********************************************************************
|
||||
|
||||
. <----------------------- With Mirroring ----------------------> <-------------------- Without Mirroring ---------------->
|
||||
|
||||
(A-D) (B-D) (C-D)
|
||||
! /REDUN /REDUN /REDUN ! !
|
||||
! (E) ! (D) (A) (B) (C) !
|
||||
! Safely Safely Safely Safely Safely ! Required !
|
||||
! Mirrored Usable Usable Usable Mirrored Usable Usable ! Free Total Total Hot Cold Total !
|
||||
Redund ! Avail Total Used Free Free Used Free ! ForMirror Avail Used Used Used Free !
|
||||
DiskGroup G# Type ! (GB) (GB) (GB) (GB) (GB) (%) (%) ! (GB) (GB) (GB) (GB) (GB) (GB) !
|
||||
------------ --- ------ - -------- -------- -------- -------- -------- ------- ------- - --------- -------- -------- -------- -------- -------- -
|
||||
DATA_DM01 1 NORMAL ! 92,736 86,112 44,488 41,624 48,248 51.66 48.34 ! 13,248 185,472 88,977 0 88,977 96,495 !
|
||||
DATA 2 NORMAL ! 18,480 17,160 8,145 9,015 10,335 47.47 52.53 ! 2,640 36,960 16,291 0 16,291 20,669 !
|
||||
DBFS_DG 3 NORMAL ! 2,366 2,197 2 2,195 2,364 .07 99.93 ! 338 4,732 3 0 3 4,728 !
|
||||
FLASH_DM01 4 NORMAL ! 2,240 2,080 892 1,188 1,348 42.88 57.12 ! 320 4,480 1,784 0 1,784 2,696 !
|
||||
RECO_DM01 5 NORMAL ! 139,113 129,177 38,516 90,660 100,597 29.82 70.18 ! 19,873 278,226 77,033 0 77,033 201,194 !
|
||||
RECO 6 NORMAL ! 25,929 24,077 21,893 2,184 4,036 90.93 9.07 ! 3,704 51,857 43,786 0 43,786 8,071 !
|
||||
SYSTEMDG 7 NORMAL ! 2,039 1,893 2 1,891 2,036 .11 99.89 ! 291 4,077 4 0 4 4,073 !
|
||||
-------- -------- -------- -------- -------- --------- -------- -------- -------- -------- --------
|
||||
Total 282,903 262,696 113,938 148,757 168,964 40,414 565,804 227,878 0 227,878 337,926
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT . <----------------------- With Mirroring ----------------------> <-------------------- Without Mirroring ---------------->
|
||||
|
||||
-- Note:
|
||||
-- The GROUP_NUMBER, TOTAL_MB, and FREE_MB columns are only
|
||||
-- meaningful if the disk group is mounted by the instance. Otherwise, their values will be 0.
|
||||
|
||||
SELECT NAME
|
||||
, group_number
|
||||
, type
|
||||
, '!' separator
|
||||
, ROUND(TOTAL_MB/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)/1024) mirrored_TOTAL_GB
|
||||
, ROUND((TOTAL_MB - REQUIRED_MIRROR_FREE_MB )/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)/1024) USABLE_TOTAL_GB
|
||||
, ROUND((hot_used_mb + cold_used_mb)/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3) /1024) USABLE_USED_GB
|
||||
, ROUND(USABLE_FILE_MB /1024) USABLE_FREE_GB
|
||||
, ROUND((USABLE_FILE_MB + ROUND(REQUIRED_MIRROR_FREE_MB/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)) ) /1024) mirrored_free_GB
|
||||
, ROUND( (hot_used_mb + cold_used_mb) / (TOTAL_MB - REQUIRED_MIRROR_FREE_MB ) * 100 , 2) USABLE_USED_PERCENT
|
||||
, ROUND(USABLE_FILE_MB /((TOTAL_MB - REQUIRED_MIRROR_FREE_MB )/DECODE(type,'EXTERN',1,'NORMAL',2,'HIGH',3)) * 100 ,2) USABLE_FREE_PERCENT
|
||||
, '!' separator
|
||||
, ROUND(REQUIRED_MIRROR_FREE_MB/1024) REQUIRED_MIRROR_FREE_GB
|
||||
, ROUND(TOTAL_MB/1024) TOTAL_GB
|
||||
, ROUND((hot_used_mb + cold_used_mb) /1024) USED_GB
|
||||
, ROUND(hot_used_mb/1024) HOT_USED_GB
|
||||
, ROUND(cold_used_mb/1024) COLD_USED_GB
|
||||
, ROUND(FREE_MB/1024) FREE_GB
|
||||
, '!' separator
|
||||
FROM v$asm_diskgroup_stat;
|
||||
|
||||
|
||||
@@footer
|
||||
226
vg/asm_diskgroup_usage_by_database.sql
Normal file
226
vg/asm_diskgroup_usage_by_database.sql
Normal file
@@ -0,0 +1,226 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : ASM usage by file type for all mounted diskgroups (including other databases)
|
||||
* Parameters : 1 - DBName (% - wildchar, \ - escape char, default is '%')
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ ------------------------------------------------------------------------------
|
||||
* 15-Jul-15 Vishal Gupta Make alias filter case-insensitive
|
||||
* 24-Dec-14 Vishal Gupta Enhanced script to display file only in alias directory if alias is present
|
||||
* 21-Jan-14 Vishal Gupta Commented out unmirrored figures from output
|
||||
* 18-Jul-13 Vishal Gupta Created
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DISKGROUP_NAME
|
||||
UNDEFINE DBNAME
|
||||
|
||||
DEFINE DISKGROUP_NAME="&&1"
|
||||
DEFINE DBNAME="&&2"
|
||||
|
||||
set term off
|
||||
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
|
||||
COLUMN _DBNAME NEW_VALUE DBNAME NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%',UPPER('&&DISKGROUP_NAME'))) "_DISKGROUP_NAME"
|
||||
, UPPER(DECODE('&&DBNAME','','%',UPPER('&&DBNAME'))) "_DBNAME"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT *******************************************************************
|
||||
PROMPT * A S M S P A C E U S A G E B Y D A T A B A S E *
|
||||
PROMPT * *
|
||||
PROMPT * - For all diskgroups mounted in current instance *
|
||||
PROMPT * - Including files for other databases *
|
||||
PROMPT * *
|
||||
PROMPT * Input Parameters *
|
||||
PROMPT * - DiskGroup = '&&DISKGROUP_NAME'
|
||||
PROMPT * - DB Name = '&&DBNAME'
|
||||
PROMPT *******************************************************************
|
||||
|
||||
DEFINE size_label=GB
|
||||
DEFINE size_divider="1024/1024/1024"
|
||||
|
||||
|
||||
COLUMN diskgroup_name HEADING "DiskGroup" FORMAT A16
|
||||
COLUMN DBNAME HEADING "DBName" FORMAT A15
|
||||
|
||||
COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
|
||||
COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 99,999
|
||||
COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
|
||||
COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
|
||||
COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
|
||||
COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
|
||||
COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
|
||||
COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
|
||||
COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
|
||||
|
||||
COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
|
||||
COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999
|
||||
COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
|
||||
COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
|
||||
COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
|
||||
COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
|
||||
COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
|
||||
COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
|
||||
COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
|
||||
|
||||
BREAK ON REPORT
|
||||
|
||||
/*
|
||||
BREAK ON diskgroup_name SKIP 1 DUPLICATES ON REPORT
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON diskgroup_name
|
||||
*/
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
|
||||
|
||||
/*
|
||||
PROMPT
|
||||
PROMPT
|
||||
PROMPT - <------------------------ Mirrored (GB) --------------------------------> <------------------------- UnMirrored (GB) ----------------------------->
|
||||
*/
|
||||
|
||||
|
||||
WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias )
|
||||
, asm_diskgroup_stat AS (SELECT /*+ NO_MERGE */ * FROM v$asm_diskgroup WHERE name LIKE '&&DISKGROUP_NAME' )
|
||||
, asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file )
|
||||
, files AS (SELECT /*+ NO_MERGE MATERIALIZE */
|
||||
diskgroup_name
|
||||
, SUBSTR(SYS_CONNECT_BY_PATH(alias_name, '/'),2) File_Path
|
||||
, alias_name
|
||||
, type
|
||||
, alias_directory
|
||||
, space
|
||||
, bytes
|
||||
, system_created
|
||||
, file_number
|
||||
, incarnation
|
||||
FROM (SELECT dg.name diskgroup_name
|
||||
, a.parent_index parent_index
|
||||
, a.name alias_name
|
||||
, a.reference_index reference_index
|
||||
, a.system_created
|
||||
, a.alias_directory
|
||||
, f.type
|
||||
, f.space
|
||||
, f.bytes
|
||||
, f.file_number
|
||||
, f.incarnation
|
||||
FROM asm_diskgroup_stat dg
|
||||
JOIN asm_alias a ON a.group_number = dg.group_number
|
||||
/* Outer join because alias could be a directory */
|
||||
LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number
|
||||
AND f.file_number = a.file_number
|
||||
AND f.incarnation = a.file_incarnation
|
||||
-- WHERE dg.name LIKE '&&DISKGROUP_NAME'
|
||||
)
|
||||
CONNECT BY NOCYCLE PRIOR reference_index = parent_index
|
||||
START WITH mod(parent_index, power(2, 24)) = 0 /*Parent level database directory e.g. +DATA/MYDB etc */
|
||||
AND UPPER(alias_name) LIKE '&&DBNAME'
|
||||
|
||||
/*
|
||||
AND reference_index IN (SELECT a2.reference_index
|
||||
FROM asm_alias a2
|
||||
WHERE (mod(a2.parent_index, power(2, 24))) = 0
|
||||
)
|
||||
*/
|
||||
)
|
||||
|
||||
SELECT f.diskgroup_name
|
||||
, SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1) dbname
|
||||
, ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize
|
||||
/*
|
||||
, ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize
|
||||
*/
|
||||
FROM files f /* System created files */
|
||||
LEFT OUTER JOIN files f2 /* File alias */
|
||||
ON f2.diskgroup_name = f.diskgroup_name
|
||||
AND f2.file_number = f.file_number
|
||||
AND f2.incarnation = f.incarnation
|
||||
AND f2.system_created = 'N'
|
||||
AND f2.alias_directory = 'N'
|
||||
AND f.system_created = 'Y'
|
||||
AND f.alias_directory = 'N'
|
||||
WHERE 1=1
|
||||
AND f.system_created = 'Y' /* Dont remove this condition */
|
||||
AND f.alias_directory = 'N'
|
||||
AND UPPER(SUBSTR(NVL(f2.File_Path,f.file_path),1,instr(NVL(f2.File_Path,f.file_path),'/')-1)) LIKE '&&DBNAME' ESCAPE '\'
|
||||
GROUP BY f.diskgroup_name
|
||||
, SUBSTR(NVL(f2.File_Path,f.file_path),1,INSTR(NVL(f2.File_Path,f.file_path),'/')-1) /*dbname*/
|
||||
ORDER BY f.diskgroup_name
|
||||
, UPPER(dbname)
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
112
vg/asm_diskgroup_usage_by_directory.sql
Normal file
112
vg/asm_diskgroup_usage_by_directory.sql
Normal file
@@ -0,0 +1,112 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display ASM diskgroup usage by directory
|
||||
* Parameters : 1 - DiskGroup (% - wildchar, \ - escape char, default is '%')
|
||||
* 2 - Directory (% - wildchar, \ - escape char, default is '%')
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 17-Apr-12 Vishal Gupta First Draft
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DISKGROUP_NAME
|
||||
UNDEFINE DISK_NAME
|
||||
|
||||
DEFINE DISKGROUP_NAME="&&1"
|
||||
DEFINE DIRECTORY="&&2"
|
||||
|
||||
set term off
|
||||
COLUMN _DISKGROUP_NAME NEW_VALUE DISKGROUP_NAME NOPRINT
|
||||
COLUMN _DIRECTORY NEW_VALUE DIRECTORY NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&DISKGROUP_NAME','','%','&&DISKGROUP_NAME')) "_DISKGROUP_NAME"
|
||||
, UPPER(DECODE('&&DIRECTORY','','%','&&DIRECTORY')) "_DIRECTORY"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
PROMPT
|
||||
PROMPT **********************************************************************
|
||||
PROMPT * A S M D I S K G R O U P S P A C E U S A G E *
|
||||
PROMPT * (By FileType and Directory) *
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - DiskGroup Name = '&&DISKGROUP_NAME'
|
||||
PROMPT * - Directory = '&&DIRECTORY'
|
||||
PROMPT **********************************************************************
|
||||
|
||||
COLUMN DiskGroup HEADING "DiskGroup" FORMAT a20
|
||||
COLUMN file_type HEADING "FileType" FORMAT a20
|
||||
COLUMN Mirrored_UsedSize HEADING "Mirrored|UsedSize|(GB)" FORMAT 999,999,999
|
||||
COLUMN UnMirrored_UsedSize HEADING "UnMirrored|UsedSize|(GB)" FORMAT 999,999,999
|
||||
COLUMN parent_directory HEADING "Directory" FORMAT a60
|
||||
|
||||
|
||||
WITH asm_alias AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_alias )
|
||||
, asm_diskgroup_stat AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_diskgroup_stat )
|
||||
, asm_file AS (SELECT /*+ NO_MERGE MATERIALIZE */ * FROM v$asm_file )
|
||||
, aliases as (SELECT /*+ no_merge materialize */
|
||||
SYS_CONNECT_BY_PATH(a.name, '/') File_Path
|
||||
, level hierarchy_level
|
||||
, CONNECT_BY_ISLEAF
|
||||
, a.*
|
||||
FROM asm_alias a
|
||||
CONNECT BY NOCYCLE
|
||||
PRIOR a.group_number = a.group_number
|
||||
AND PRIOR a.reference_index = a.parent_index
|
||||
START WITH mod(parent_index, power(2, 24)) = 0
|
||||
AND reference_index IN (SELECT a2.reference_index
|
||||
FROM asm_alias a2
|
||||
WHERE (mod(a2.parent_index, power(2, 24))) = 0
|
||||
/*Parent level database directory e.g. +DATA/MYDB etc */
|
||||
)
|
||||
)
|
||||
, files as
|
||||
(
|
||||
SELECT SUBSTR('+' || g.name || a.file_path,1, INSTR('+' || g.name || a.file_path,'/',-1) ) as parent_directory
|
||||
, '+' || g.name || a.file_path as file_path
|
||||
, g.name DiskGroup
|
||||
, f.type
|
||||
, f.block_size
|
||||
, f.space
|
||||
, f.redundancy
|
||||
, f.redundancy_lowered
|
||||
, f.striped
|
||||
, f.bytes
|
||||
, f.creation_date
|
||||
, f.modification_date
|
||||
FROM asm_diskgroup_stat g
|
||||
JOIN aliases a ON a.group_number = g.group_number
|
||||
LEFT OUTER JOIN asm_file f ON f.group_number = a.group_number
|
||||
AND f.file_number = a.file_number
|
||||
AND f.incarnation = a.file_incarnation
|
||||
)
|
||||
SELECT af.DiskGroup
|
||||
, af.type file_type
|
||||
, ROUND(sum(af.bytes)/1024/1024/1024) Mirrored_UsedSize
|
||||
, ROUND(sum(af.space)/1024/1024/1024) UnMirrored_UsedSize
|
||||
, af.parent_directory
|
||||
FROM files af
|
||||
WHERE af.diskgroup like '&&DISKGROUP_NAME' ESCAPE '\'
|
||||
AND af.file_path LIKE '&&DIRECTORY' ESCAPE '\'
|
||||
GROUP BY af.DiskGroup
|
||||
, af.type
|
||||
, af.parent_directory
|
||||
ORDER BY af.DiskGroup
|
||||
, af.type
|
||||
, af.parent_directory
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
148
vg/asm_diskgroup_usage_by_filetype.sql
Normal file
148
vg/asm_diskgroup_usage_by_filetype.sql
Normal file
@@ -0,0 +1,148 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : ASM usage by file type for all mounted diskgroups (including other databases)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 27-Jan-10 Vishal Gupta First Draft
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
DEFINE size_label=GB
|
||||
DEFINE size_divider="1024/1024/1024"
|
||||
|
||||
PROMPT
|
||||
PROMPT *******************************************************************
|
||||
PROMPT * A S M S P A C E U S A G E B Y F I L E T Y P E *
|
||||
PROMPT * *
|
||||
PROMPT * - For all diskgroups mounted in current instance *
|
||||
PROMPT * - Including files for other databases *
|
||||
PROMPT *******************************************************************
|
||||
|
||||
|
||||
COLUMN NAME HEADING "DiskGroup" FORMAT A15
|
||||
|
||||
COLUMN DISKGROUP_UnMirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
|
||||
COLUMN DATAFILE_UnMirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN TEMPFILE_UnMirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN ONLINELOG_UnMirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999
|
||||
COLUMN ARCHIVELOG_UnMirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
|
||||
COLUMN BACKUPSET_UnMirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
|
||||
COLUMN FLASHBACK_UnMirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
|
||||
COLUMN OCRFILE_UnMirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
|
||||
COLUMN AUTOBACKUP_UnMirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
|
||||
COLUMN CONTROLFILE_UnMirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
|
||||
COLUMN PARAMFILE_UnMirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
|
||||
|
||||
COLUMN DISKGROUP_MirroredSize HEADING "Total|(&&size_label)" FORMAT 999,999
|
||||
COLUMN DATAFILE_MirroredSize HEADING "Data|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN TEMPFILE_MirroredSize HEADING "Temp|File|(&&size_label)" FORMAT 999,999
|
||||
COLUMN ONLINELOG_MirroredSize HEADING "Redo|Log|(&&size_label)" FORMAT 9,999
|
||||
COLUMN ARCHIVELOG_MirroredSize HEADING "Arch|Log|(&&size_label)" FORMAT 999,999
|
||||
COLUMN BACKUPSET_MirroredSize HEADING "Backup|Set|(&&size_label)" FORMAT 999,999
|
||||
COLUMN FLASHBACK_MirroredSize HEADING "Flash|Back|(&&size_label)" FORMAT 999,999
|
||||
COLUMN OCRFILE_MirroredSize HEADING "OCR|(&&size_label)" FORMAT 999
|
||||
COLUMN AUTOBACKUP_MirroredSize HEADING "Auto|Backup|(&&size_label)" FORMAT 999,999
|
||||
COLUMN CONTROLFILE_MirroredSize HEADING "Ctrl|File|(&&size_label)" FORMAT 999
|
||||
COLUMN PARAMFILE_MirroredSize HEADING "Param|File|(&&size_label)" FORMAT 999
|
||||
|
||||
BREAK ON REPORT
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF DISKGROUP_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF DATAFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF TEMPFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ONLINELOG_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF BACKUPSET_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF FLASHBACK_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF OCRFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF PARAMFILE_MirroredSize FORMAT 99,999,999 ON REPORT
|
||||
|
||||
COMPUTE SUM LABEL 'Total' OF DISKGROUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF DATAFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF TEMPFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ONLINELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF ARCHIVELOG_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF BACKUPSET_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF FLASHBACK_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF OCRFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF AUTOBACKUP_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF CONTROLFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF PARAMFILE_UnMirroredSize FORMAT 99,999,999 ON REPORT
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Sample Output
|
||||
|
||||
*******************************************************************
|
||||
* A S M S P A C E U S A G E B Y F I L E T Y P E *
|
||||
* *
|
||||
* - For all diskgroups mounted in current instance *
|
||||
* - Including files for other databases *
|
||||
*******************************************************************
|
||||
|
||||
|
||||
- <----------------------- Mirrored (GB) ---------------------------------------> <----------------------- UnMirrored (GB) ------------------------------------->
|
||||
|
||||
Redo Arch Backup Auto Control Param Redo Arch Auto Control Param
|
||||
Total DataFile TempFile Log Log Set OCR Backup File File Total DataFile TempFile Log Log BackupSet OCR Backup File File
|
||||
DiskGroup (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB) (GB)
|
||||
--------------- -------- -------- -------- ------ -------- -------- ---- -------- ------- ----- -------- -------- -------- ------ -------- --------- ---- -------- ------- -----
|
||||
DATA 8,129 5,698 0 94 2,328 0 0 8 0 0 16,273 11,397 0 189 4,667 0 0 17 1 0
|
||||
DATA_DM01 44,472 43,727 0 745 0 0 0 0 0 0 88,973 87,480 0 1,492 0 0 0 0 1 0
|
||||
FLASH_DM01 881 0 881 0 0 0 0 0 0 0 1,764 0 1,764 0 0 0 0 0 0 0
|
||||
RECO 21,883 21,629 164 88 0 0 0 0 1 0 43,782 43,273 329 176 0 0 0 0 4 0
|
||||
RECO_DM01 38,510 4,442 23 121 33,923 0 0 1 0 0 77,186 8,885 46 243 68,011 0 0 2 1 0
|
||||
SYSTEMDG 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0
|
||||
-------- -------- -------- ------ -------- -------- ---- -------- ------- ----- -------- -------- -------- ------ -------- --------- ---- -------- ------- -----
|
||||
Total 113,875 75,496 1,068 1,048 36,251 0 0 9 1 0 227,979 151,035 2,139 2,100 72,678 0 1 19 7 0
|
||||
|
||||
*/
|
||||
|
||||
PROMPT
|
||||
PROMPT
|
||||
PROMPT - <----------------------- Mirrored (GB) ----------------------------------> <----------------------- UnMirrored (GB) ------------------------------------>
|
||||
|
||||
select dg.name
|
||||
, ROUND(SUM(f.bytes)/&&size_divider) DISKGROUP_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.bytes,0))/&&size_divider) DATAFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.bytes,0))/&&size_divider) TEMPFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.bytes,0))/&&size_divider) ONLINELOG_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.bytes,0))/&&size_divider) ARCHIVELOG_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.bytes,0))/&&size_divider) BACKUPSET_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.bytes,0))/&&size_divider) FLASHBACK_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.bytes,0))/&&size_divider) OCRFILE_MirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.bytes,0))/&&size_divider) AUTOBACKUP_MirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.bytes,0))/&&size_divider) CONTROLFILE_MirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.bytes,'ASMPARAMETERFILE',f.bytes,0))/&&size_divider) PARAMFILE_MirroredSize
|
||||
|
||||
, ROUND(SUM(f.space)/&&size_divider) DISKGROUP_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'DATAFILE',f.space,0))/&&size_divider) DATAFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'TEMPFILE',f.space,0))/&&size_divider) TEMPFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ONLINELOG',f.space,0))/&&size_divider) ONLINELOG_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'ARCHIVELOG',f.space,0))/&&size_divider) ARCHIVELOG_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'BACKUPSET',f.space,0))/&&size_divider) BACKUPSET_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'FLASHBACK',f.space,0))/&&size_divider) FLASHBACK_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'OCRFILE',f.space,0))/&&size_divider) OCRFILE_UnMirroredSize
|
||||
, ROUND(SUM(DECODE(f.type, 'AUTOBACKUP',f.space,0))/&&size_divider) AUTOBACKUP_UnMirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'CONTROLFILE',f.space,0))/&&size_divider) CONTROLFILE_UnMirroredSize
|
||||
--, ROUND(SUM(DECODE(f.type, 'PARAMETERFILE',f.space,'ASMPARAMETERFILE',f.space,0))/&&size_divider) PARAMFILE_UnMirroredSize
|
||||
from v$asm_file f
|
||||
, v$asm_diskgroup_stat dg
|
||||
where dg.group_number = f.group_number
|
||||
group by dg.name
|
||||
ORDER BY dg.name
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
59
vg/asm_diskgroup_usage_currentdb.sql
Normal file
59
vg/asm_diskgroup_usage_currentdb.sql
Normal file
@@ -0,0 +1,59 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display ASM diskgroup usage by Filetype for current database.
|
||||
* Parameters : NONE
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 15-Mar-12 Vishal Gupta First Draft
|
||||
*/
|
||||
|
||||
set lines 200
|
||||
COLUMN FileType FORMAT a20
|
||||
COLUMN DiskGroup FORMAT a20
|
||||
COLUMN SizeGB FORMAT 999,999,999.99
|
||||
|
||||
BREAK ON REPORT
|
||||
|
||||
COMPUTE SUM LABEL "Total" OF SizeGB FORMAT 99,999,999,999.99 ON REPORT
|
||||
|
||||
SelECt Diskgroup, FileType , SizeGB
|
||||
FROM
|
||||
(
|
||||
select 'DATAFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2) SizeGB
|
||||
from v$datafile
|
||||
group by SUBSTR(name,1, instr(name,'/') -1)
|
||||
UNION ALL
|
||||
select 'TEMPFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2)
|
||||
from v$tempfile
|
||||
group by SUBSTR(name,1, instr(name,'/') -1)
|
||||
UNION ALL
|
||||
select 'ONLINE REDO' FileType, SUBSTR(member,1, instr(member,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2)
|
||||
from v$log l , v$logfile lf
|
||||
where l.group# = lf.group#
|
||||
group by SUBSTR(member,1, instr(member,'/') -1)
|
||||
UNION ALL
|
||||
select 'ARCHIVE LOG' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(blocks* block_size)/1024/1024/1024,2)
|
||||
from v$archived_log
|
||||
where dest_id = 1 and DELETED = 'NO' and status = 'A'
|
||||
group by SUBSTR(name,1, instr(name,'/') -1)
|
||||
UNION ALL
|
||||
SELECT 'CONTROLFILE' FileType, SUBSTR(name,1, instr(name,'/') -1) DISKGROUP, ROUND(sum(file_size_blks* block_size)/1024/1024/1024,2)
|
||||
from v$controlfile
|
||||
group by SUBSTR(name,1, instr(name,'/') -1)
|
||||
UNION ALL
|
||||
select 'BCT_FILE' FileType, SUBSTR(filename,1, instr(filename,'/') -1) DISKGROUP, ROUND(sum(bytes)/1024/1024/1024,2)
|
||||
from v$block_change_tracking where status = 'ENABLED'
|
||||
group by SUBSTR(filename,1, instr(filename,'/') -1)
|
||||
ORDER BY FileType, DISKGROUP
|
||||
)
|
||||
ORDER BY DiskGroup,FileType
|
||||
;
|
||||
|
||||
@@footer
|
||||
47
vg/asm_failgroup.sql
Normal file
47
vg/asm_failgroup.sql
Normal file
@@ -0,0 +1,47 @@
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display ASM Disk Failgroups
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 27-Apr-11 Vishal Gupta First cut
|
||||
*/
|
||||
set term on
|
||||
|
||||
set lines 250
|
||||
set pages 50
|
||||
|
||||
COLUMN DiskGroup FORMAT A10
|
||||
COLUMN Disk FORMAT A30
|
||||
COLUMN Partner_Disk FORMAT A30
|
||||
COLUMN DiskGroup FORMAT A0
|
||||
COLUMN FAILGROUP FORMAT A20
|
||||
COLUMN PARTNER_FAILGROUP FORMAT A20
|
||||
COLUMN path FORMAT A30
|
||||
COLUMN PARTNER_PATH FORMAT A30
|
||||
|
||||
SELECT dg1.name DiskGroup
|
||||
, d1.NAME Disk
|
||||
-- , d1.path
|
||||
, d1.FAILGROUP
|
||||
, d2.name Partner_Disk
|
||||
, d2.FAILGROUP PARTNER_FAILGROUP
|
||||
-- , d2.path PARTNER_PATH
|
||||
FROM x$kfdpartner p
|
||||
, v$asm_disk_stat d1
|
||||
, v$asm_diskgroup_stat dg1
|
||||
, v$asm_disk_stat d2
|
||||
WHERE dg1.group_number = d1.group_number
|
||||
AND p.GRP = dg1.group_number
|
||||
AND p.disk = d1.DISK_NUMBER
|
||||
AND p.GRP = d2.group_number (+)
|
||||
AND p.NUMBER_KFDPARTNER = d2.DISK_NUMBER (+)
|
||||
AND dg1.name like '%%' --DiskGroup Name
|
||||
AND d1.name like '%%' --Disk Name
|
||||
ORDER BY dg1.name
|
||||
, d1.NAME;
|
||||
|
||||
30
vg/asm_imbalance.sql
Normal file
30
vg/asm_imbalance.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
@@header
|
||||
|
||||
COLUMN diskgroup_name HEADING "DiskGroup Name" FORMAT a20
|
||||
COLUMN Imbalance_percent HEADING "Imbalance|(%)" FORMAT 99999999.99
|
||||
COLUMN Variance HEADING "Variance" FORMAT 999.99999
|
||||
COLUMN MinFree HEADING "MinFree|(%)" FORMAT 999.99
|
||||
COLUMN DiskCnt HEADING "Disk Count" FORMAT 99999
|
||||
COLUMN Type HEADING "Redundancy|Typet" FORMAT a10
|
||||
|
||||
select g.name diskgroup_name
|
||||
, 100*(max((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576)))
|
||||
-min((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576)))
|
||||
) /max((d.total_mb-d.free_mb + (128*g.allocation_unit_size/1048576))/(d.total_mb + (128*g.allocation_unit_size/1048576)))
|
||||
Imbalance_percent
|
||||
, 100*(max(d.total_mb)-min(d.total_mb))/max(d.total_mb) Variance /* Percent difference between largest and smallest disk */
|
||||
, 100*(min(d.free_mb/d.total_mb)) MinFree /* The disk with the least free space as a percent of total space */
|
||||
, count(*) DiskCnt /* Number of disks in the diskgroup */
|
||||
, g.type Type /* Diskgroup redundancy */
|
||||
FROM v$asm_disk_stat d
|
||||
, v$asm_diskgroup_stat g
|
||||
WHERE d.group_number = g.group_number
|
||||
AND d.group_number <> 0
|
||||
AND d.state = 'NORMAL'
|
||||
AND d.mount_status = 'CACHED'
|
||||
GROUP BY g.name
|
||||
, g.type
|
||||
ORDER BY g.name
|
||||
;
|
||||
|
||||
@@footer
|
||||
51
vg/asm_imbalance2.sql
Normal file
51
vg/asm_imbalance2.sql
Normal file
@@ -0,0 +1,51 @@
|
||||
|
||||
|
||||
/*
|
||||
|
||||
**********************************************************
|
||||
********* Needs to be run on ASM instance ****************
|
||||
**********************************************************
|
||||
|
||||
Max and min columns should be close to each other for balanced files.
|
||||
|
||||
file# max min
|
||||
=== === ===
|
||||
3013 57 941
|
||||
3018 58 942
|
||||
3021 59 942
|
||||
3043 940 942
|
||||
3053 938 941
|
||||
|
||||
** All the disks in this example are having the same total capacity.
|
||||
|
||||
From the output above, files with imbalanced extents are file# 3013, 3018 and 3021. For example, for file# 3013 there are 59 extents in one disk and 942 extents in another disk.
|
||||
|
||||
|
||||
File# 3043 and 3053 have extents almost equally balanced. Small imbalances are expected.
|
||||
|
||||
*/
|
||||
|
||||
DEFINE diskgroup_number="&&1"
|
||||
|
||||
set pagesize 55
|
||||
set linesize 90
|
||||
|
||||
SELECT group_kffxp Group#
|
||||
, number_kffxp file#
|
||||
, MAX(count1) MAX
|
||||
, MIN(count1) MIN
|
||||
FROM
|
||||
(SELECT group_kffxp
|
||||
, number_kffxp
|
||||
, disk_kffxp
|
||||
, COUNT(XNUM_KFFXP) count1
|
||||
FROM sys.x$kffxp
|
||||
WHERE group_kffxp = &diskgroup_number
|
||||
ANd disk_kffxp != 65534
|
||||
GROUP BY group_kffxp, number_kffxp, disk_kffxp
|
||||
)
|
||||
GROUP BY group_kffxp, number_kffxp;
|
||||
ORDER BY group_kffxp
|
||||
, number_kffxp
|
||||
|
||||
UNDEFINE diskgroup_number
|
||||
45
vg/asm_operation.sql
Normal file
45
vg/asm_operation.sql
Normal file
@@ -0,0 +1,45 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display ASM Operations
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 16-APR-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
PROMPT ************************************
|
||||
PROMPT *** A S M O P E R A T I O N S ***
|
||||
PROMPT ************************************
|
||||
|
||||
COLUMN name HEADING "DiskGroup" FORMAT a20
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN group_number HEADING "G#" FORMAT 99
|
||||
COLUMN operation HEADING "Operation" FORMAT a10
|
||||
COLUMN state HEADING "State" FORMAT a8
|
||||
COLUMN power HEADING "Power" FORMAT 99999
|
||||
COLUMN actual HEADING "Actual" FORMAT 999999
|
||||
COLUMN sofar HEADING "SoFar" FORMAT 9,999,999,999
|
||||
COLUMN est_work HEADING "Estimated|Work" FORMAT 9,999,999,999
|
||||
COLUMN est_rate HEADING "Estimated|Rate" FORMAT 999,999
|
||||
COLUMN est_minutes HEADING "Estimated|Minutes" FORMAT 999,999
|
||||
COLUMN error_code HEADING "Error Code" FORMAT a20
|
||||
|
||||
SELECT g.name
|
||||
, o.*
|
||||
FROM gv$asm_operation o
|
||||
, v$asm_diskgroup_stat g
|
||||
WHERE g.group_number = o.group_number
|
||||
AND o.state = 'RUN'
|
||||
ORDER BY o.inst_id
|
||||
, g.name
|
||||
|
||||
;
|
||||
|
||||
@@footer
|
||||
150
vg/asmm_info.sql
Normal file
150
vg/asmm_info.sql
Normal file
@@ -0,0 +1,150 @@
|
||||
@@header
|
||||
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Tablespace usage
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 26-Jan-15 Vishal Gupta Renamed oper_count heading to "Resize Oper Count"
|
||||
* 28-MAY-12 Vishal Gupta Fixed to differentiate between instance specific
|
||||
* and generic (*.param) parameter values in spfile
|
||||
* 14-MAR-12 Vishal Gupta Modified to make it RAC friendly
|
||||
* 15-SEP-08 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
|
||||
set term on
|
||||
|
||||
COLUMN inst_id HEADING "Inst#" FORMAT 99999
|
||||
COLUMN name HEADING "Name" FORMAT a21
|
||||
COLUMN current_value1 HEADING "Current" FORMAT a10
|
||||
COLUMN spfile_value1 HEADING "SPFile" FORMAT a10
|
||||
COLUMN current_value2 HEADING "Current" FORMAT a10
|
||||
COLUMN spfile_value2 HEADING "SPFile" FORMAT a10
|
||||
COLUMN current_value3 HEADING "Current" FORMAT a10
|
||||
COLUMN spfile_value3 HEADING "SPFile" FORMAT a10
|
||||
COLUMN current_value4 HEADING "Current" FORMAT a10
|
||||
COLUMN spfile_value4 HEADING "SPFile" FORMAT a10
|
||||
COLUMN current_value5 HEADING "Current" FORMAT a10
|
||||
COLUMN spfile_value5 HEADING "SPFile" FORMAT a10
|
||||
COLUMN current_value6 HEADING "Current" FORMAT a10
|
||||
COLUMN spfile_value6 HEADING "SPFile" FORMAT a10
|
||||
COLUMN current_value7 HEADING "Current" FORMAT a10
|
||||
COLUMN spfile_value7 HEADING "SPFile" FORMAT a10
|
||||
COLUMN current_value8 HEADING "Current" FORMAT a10
|
||||
COLUMN spfile_value8 HEADING "SPFile" FORMAT a10
|
||||
|
||||
|
||||
COLUMN component HEADING "Component" FORMAT a24
|
||||
COLUMN user_specified_size HEADING "User|Specified|(MB)" FORMAT 99,999,999
|
||||
COLUMN current_size HEADING "Current|(MB)" FORMAT 99,999,999
|
||||
COLUMN free_size HEADING "Free|(MB)" FORMAT 99,999,999
|
||||
COLUMN min_size HEADING "Min|(MB)" FORMAT 99,999,999
|
||||
COLUMN max_size HEADING "Max|(MB)" FORMAT 99,999,999
|
||||
COLUMN GRANULE_SIZE HEADING "Granule|(MB)" FORMAT 9,999
|
||||
COLUMN last_oper_type HEADING "Last|Operation|Type" FORMAT a12
|
||||
COLUMN oper_count HEADING "Resize|Oper|Count" FORMAT 99,999,999
|
||||
COLUMN last_oper_time HEADING "Last|Operation|Time" FORMAT a18
|
||||
|
||||
BREAK ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF current_size FORMAT 99,999,999 ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF free_size FORMAT 99,999,999 ON REPORT
|
||||
|
||||
PROMPT
|
||||
PROMPT ####################################################################
|
||||
PROMPT ####### #######
|
||||
PROMPT ####### Automatic Shared Memory Management Settings #######
|
||||
PROMPT ####### #######
|
||||
PROMPT ####################################################################
|
||||
PROMPT
|
||||
|
||||
|
||||
PROMPT - <---- Instance 1 ---> <---- Instance 2 ---> <---- Instance 3 ---> <---- Instance 4 ---> <---- Instance 5 ---> <---- Instance 6 ---> <---- Instance 7 ---> <---- Instance 8 --->
|
||||
select RPAD(pp.name,20) || '|' name
|
||||
, MAX(DECODE(pp.inst_id, 1, pp.display_value,NULL)) current_value1
|
||||
, MAX(DECODE(pp.inst_id, 1, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value1
|
||||
, MAX(DECODE(pp.inst_id, 2, pp.display_value,NULL)) current_value2
|
||||
, MAX(DECODE(pp.inst_id, 2, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value2
|
||||
, MAX(DECODE(pp.inst_id, 3, pp.display_value,NULL)) current_value3
|
||||
, MAX(DECODE(pp.inst_id, 3, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value3
|
||||
, MAX(DECODE(pp.inst_id, 4, pp.display_value,NULL)) current_value4
|
||||
, MAX(DECODE(pp.inst_id, 4, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value4
|
||||
, MAX(DECODE(pp.inst_id, 5, pp.display_value,NULL)) current_value5
|
||||
, MAX(DECODE(pp.inst_id, 5, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value5
|
||||
, MAX(DECODE(pp.inst_id, 6, pp.display_value,NULL)) current_value6
|
||||
, MAX(DECODE(pp.inst_id, 6, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value6
|
||||
, MAX(DECODE(pp.inst_id, 7, pp.display_value,NULL)) current_value7
|
||||
, MAX(DECODE(pp.inst_id, 7, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value7
|
||||
, MAX(DECODE(pp.inst_id, 8, pp.display_value,NULL)) current_value8
|
||||
, MAX(DECODE(pp.inst_id, 8, RPAD(NVL(NVL(sp.display_value,sp_generic.display_value),' '),9) || '|' ,NULL)) spfile_value8
|
||||
from gv$system_parameter pp
|
||||
JOIN gv$instance i ON pp.inst_id = i.inst_id
|
||||
LEFT OUTER JOIN gv$spparameter sp ON pp.inst_id = sp.inst_id AND sp.sid = i.instance_name and pp.name = sp.name
|
||||
LEFT OUTER JOIN gv$spparameter sp_generic ON sp_generic.inst_id = pp.inst_id AND sp_generic.sid = '*' and sp_generic.name = pp.name
|
||||
WHERE ( pp.name in ('memory_target'
|
||||
,'memory_max_target'
|
||||
,'sga_target'
|
||||
,'sga_max_size'
|
||||
,'lock_sga'
|
||||
,'pre_page_sga'
|
||||
,'pga_aggregate_target'
|
||||
,'large_pool_size'
|
||||
,'use_large_pages'
|
||||
)
|
||||
)
|
||||
GROUP BY pp.name
|
||||
UNION ALL
|
||||
-- Get Host physical memory
|
||||
select RPAD(os.stat_name,20) || '|' name
|
||||
, MAX(DECODE(os.inst_id, 1, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value1
|
||||
, MAX(DECODE(os.inst_id, 1, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value1
|
||||
, MAX(DECODE(os.inst_id, 2, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value2
|
||||
, MAX(DECODE(os.inst_id, 2, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value2
|
||||
, MAX(DECODE(os.inst_id, 3, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value3
|
||||
, MAX(DECODE(os.inst_id, 3, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value3
|
||||
, MAX(DECODE(os.inst_id, 4, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value4
|
||||
, MAX(DECODE(os.inst_id, 4, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value4
|
||||
, MAX(DECODE(os.inst_id, 5, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value5
|
||||
, MAX(DECODE(os.inst_id, 5, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value5
|
||||
, MAX(DECODE(os.inst_id, 6, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value6
|
||||
, MAX(DECODE(os.inst_id, 6, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value6
|
||||
, MAX(DECODE(os.inst_id, 7, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value7
|
||||
, MAX(DECODE(os.inst_id, 7, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value7
|
||||
, MAX(DECODE(os.inst_id, 8, ROUND(os.value/1024/1024/1024) || 'G',NULL)) current_value8
|
||||
, MAX(DECODE(os.inst_id, 8, RPAD(NVL(ROUND(os.value/1024/1024/1024) || 'G',' '),9) || '|' ,NULL)) spfile_value8
|
||||
from gv$osstat os
|
||||
where os.stat_name = 'PHYSICAL_MEMORY_BYTES'
|
||||
GROUP BY os.stat_name
|
||||
ORDER BY 1
|
||||
/
|
||||
|
||||
|
||||
BREAK ON inst_id SKIP 1
|
||||
|
||||
SELECT c.inst_id
|
||||
, c.component
|
||||
, ROUND(c.user_specified_size / 1024 / 1024) user_specified_size
|
||||
, ROUND(c.current_size / 1024 / 1024) current_size
|
||||
, ROUND(NVL(s.bytes,0) / 1024 / 1024) free_size
|
||||
, ROUND(c.min_size / 1024 / 1024) min_size
|
||||
, ROUND(c.max_size / 1024 / 1024) max_size
|
||||
, ROUND(c.GRANULE_SIZE / 1024 / 1024) GRANULE_SIZE
|
||||
, c.oper_count
|
||||
, c.last_oper_type
|
||||
, to_char(c.last_oper_time,'DD-MON-YY hh24:mi:Ss') last_oper_time
|
||||
FROM gv$sga_dynamic_components c
|
||||
, GV$SGASTAT s
|
||||
WHERE c.inst_id = s.inst_id (+)
|
||||
AND c.component = s.pool (+)
|
||||
AND s.name (+) = 'free memory'
|
||||
AND c.current_size <> 0
|
||||
ORDER BY c.inst_id , c.component
|
||||
/
|
||||
|
||||
|
||||
@@footer
|
||||
38
vg/assyst.sql
Normal file
38
vg/assyst.sql
Normal file
@@ -0,0 +1,38 @@
|
||||
SELECT DISTINCT(assyst_usr_b.assyst_usr_n) AS "DBA Name",
|
||||
COUNT(*) "Total Closed Calls"
|
||||
FROM incident ,
|
||||
product ,
|
||||
item item_a ,
|
||||
serv_dept serv_dept_b ,
|
||||
assyst_usr assyst_usr_b,
|
||||
usr usr_b ,
|
||||
bldng_room ,
|
||||
inc_cat inc_cat_a ,
|
||||
inc_serious ,
|
||||
supplier ,
|
||||
hplan_head hplan_head_a,
|
||||
inc_data
|
||||
WHERE incident.item_id = item_a.item_id
|
||||
AND item_a.product_id = product.product_id
|
||||
AND incident.ass_usr_id = assyst_usr_b.assyst_usr_id
|
||||
AND incident.ass_svd_id = serv_dept_b.serv_dept_id
|
||||
AND incident.aff_usr_id = usr_b.usr_id
|
||||
AND incident.inc_cat_id = inc_cat_a.inc_cat_id
|
||||
AND incident.inc_serious_id = inc_serious.inc_serious_id
|
||||
AND incident.ass_supp_id = supplier.supplier_id
|
||||
AND incident.bldng_room_id = bldng_room.bldng_room_id
|
||||
AND incident.hplan_head_id = hplan_head_a.hplan_head_id
|
||||
AND incident.incident_id = inc_data.incident_id
|
||||
AND (incident.incident_id >9999999
|
||||
AND inc_data.u_num2 =0
|
||||
OR incident.incident_id >0
|
||||
AND incident.incident_id <5000000
|
||||
OR incident.incident_id >4999999
|
||||
AND incident.incident_id <10000000
|
||||
OR (incident.incident_id >9999999
|
||||
AND inc_data.u_num2 >0))
|
||||
AND (incident.inc_status ='c' )
|
||||
AND incident.ass_svd_id IN(16)
|
||||
AND incident.inc_close_date > GETDATE()-29
|
||||
GROUP BY (assyst_usr_b.assyst_usr_n)
|
||||
ORDER BY "Total Closed Calls" DESC
|
||||
45
vg/autotask_windows.sql
Normal file
45
vg/autotask_windows.sql
Normal file
@@ -0,0 +1,45 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Auto Task Windows
|
||||
* Compatibility :
|
||||
* Parameters : NONE
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 14-Dec-16 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
PROMPT **************************************************
|
||||
PROMPT * DB Auto Task Windows
|
||||
PROMPT **************************************************
|
||||
|
||||
COLUMN window_name HEADING "Window Name" FORMAT a35
|
||||
COLUMN autotask_status HEADING "Status" FORMAT a8
|
||||
COLUMN window_active HEADING "Window|Active" FORMAT a6
|
||||
COLUMN optimizer_stats HEADING "Optimizer|Stats" FORMAT a8
|
||||
COLUMN segment_advisor HEADING "Segment|Advisor" FORMAT a8
|
||||
COLUMN sql_tune_advisor HEADING "SQL|Tune" FORMAT a8
|
||||
COLUMN health_monitor HEADING "Health|Monitor" FORMAT a8
|
||||
COLUMN window_next_time HEADING "Window|Next Time" FORMAT a40 TRUNC
|
||||
|
||||
SELECT a.window_name
|
||||
, a.autotask_status
|
||||
, a.window_active
|
||||
, a.optimizer_stats
|
||||
, a.segment_advisor
|
||||
, a.sql_tune_advisor
|
||||
, a.health_monitor
|
||||
, a.window_next_time
|
||||
FROM dba_autotask_window_clients a
|
||||
order by a.window_next_time
|
||||
;
|
||||
|
||||
@@footer
|
||||
|
||||
43
vg/autotasks.sql
Normal file
43
vg/autotasks.sql
Normal file
@@ -0,0 +1,43 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Auto Tasks
|
||||
* Compatibility :
|
||||
* Parameters : NONE
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 28-Jun-16 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
PROMPT **************************************************
|
||||
PROMPT * Database Auto Tasks
|
||||
PROMPT **************************************************
|
||||
|
||||
|
||||
COLUMN client_name HEADING "Client Name" FORMAT a35
|
||||
COLUMN client_tag HEADING "Client|Tag" FORMAT a6
|
||||
COLUMN window_group HEADING "Scheduler|Window|Group" FORMAT a15
|
||||
COLUMN resource_percentage HEADING "Res(%)" FORMAT 99999
|
||||
|
||||
|
||||
|
||||
SELECT a.client_name
|
||||
, a.status
|
||||
, a.consumer_group
|
||||
, a.client_tag
|
||||
, a.priority_override
|
||||
, a.window_group
|
||||
, a.resource_percentage
|
||||
, a.service_name
|
||||
, a.
|
||||
FROM dba_autotask_client a
|
||||
;
|
||||
|
||||
@@footer
|
||||
71
vg/aw_sessions.sql
Normal file
71
vg/aw_sessions.sql
Normal file
@@ -0,0 +1,71 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display OLAP Sessions
|
||||
* Parameters : NONE
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 30-Jul-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
PROMPT **********************************
|
||||
PROMPT * Analytic Workspace Sessions
|
||||
PROMPT **********************************
|
||||
|
||||
COLUMN owner HEADING "" FORMAT a20
|
||||
COLUMN aw_name HEADING "AW Name" FORMAT a27
|
||||
COLUMN aw_version HEADING "AW|Ver" FORMAT a5
|
||||
COLUMN attach_mode HEADING "Attach|Mode" FORMAT a6
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN session_handle HEADING "Session|Handle" FORMAT 99999999
|
||||
COLUMN session_state HEADING "Session|State" FORMAT a10
|
||||
COLUMN userid HEADING "User" FORMAT a10
|
||||
COLUMN total_transaction HEADING "Total|Tran" FORMAT 99999
|
||||
COLUMN total_transaction_cpu_time HEADING "Total|Tran|CPUTime" FORMAT 999999999
|
||||
COLUMN total_transaction_time HEADING "Total|Tran|Time" FORMAT 999999999
|
||||
|
||||
COLUMN logon_time HEADING "Logon Time" FORMAT a18
|
||||
COLUMN username HEADING "UserName" FORMAT a20
|
||||
COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED
|
||||
COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED
|
||||
COLUMN process HEADING "Process" FORMAT a11
|
||||
COLUMN program HEADING "Program" FORMAT a18 TRUNCATED
|
||||
COLUMN event HEADING "Event" FORMAT a30 TRUNCATED
|
||||
COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999
|
||||
--COLUMN last_call_et HEADING "LastCall" FORMAT a12
|
||||
COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99
|
||||
|
||||
select a.owner || '.' || a.aw_name aw_name
|
||||
, a.aw_version
|
||||
, DECODE(o.attach_mode,'READ WRITE','RW','MULTIWRITE','MW','READ ONLY','RO',o.attach_mode) attach_mode
|
||||
, o.session_id
|
||||
, o.inst_id
|
||||
, s.status
|
||||
, s.last_call_et
|
||||
, s.username
|
||||
, s.osuser
|
||||
, s.program
|
||||
, s.machine
|
||||
, s.sql_id
|
||||
, s.sql_child_number
|
||||
from gv$aw_olap o
|
||||
, dba_aws a
|
||||
, gv$aw_session_info aws
|
||||
, gv$session s
|
||||
WHERE a.aw_number = o.aw_number
|
||||
AND o.inst_id = aws.inst_id
|
||||
AND o.session_id = aws.session_id
|
||||
AND aws.inst_id = s.inst_id
|
||||
AND aws.session_id = s.sid
|
||||
ORDER BY aw_name, o.session_id
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
60
vg/aw_size.sql
Normal file
60
vg/aw_size.sql
Normal file
@@ -0,0 +1,60 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Analytic Workspace (AW) Size
|
||||
* Parameters : NONE
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 30-Jul-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
PROMPT **********************************
|
||||
PROMPT * Analytic Workspace Size
|
||||
PROMPT **********************************
|
||||
|
||||
COLUMN owner HEADING "" FORMAT a20
|
||||
COLUMN aw_name HEADING "AW Name" FORMAT a25
|
||||
COLUMN aw_version HEADING "AW|Ver" FORMAT a5
|
||||
COLUMN attach_mode HEADING "Attach|Mode" FORMAT a5
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN session_handle HEADING "Session|Handle" FORMAT 99999999
|
||||
COLUMN session_state HEADING "Session|State" FORMAT a10
|
||||
COLUMN userid HEADING "User" FORMAT a10
|
||||
COLUMN total_transaction HEADING "Total|Tran" FORMAT 99999
|
||||
COLUMN total_transaction_cpu_time HEADING "Total|Tran|CPUTime" FORMAT 999999999
|
||||
COLUMN total_transaction_time HEADING "Total|Tran|Time" FORMAT 999999999
|
||||
|
||||
COLUMN logon_time HEADING "Logon Time" FORMAT a18
|
||||
COLUMN username HEADING "UserName" FORMAT a20
|
||||
COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED
|
||||
COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED
|
||||
COLUMN process HEADING "Process" FORMAT a11
|
||||
COLUMN program HEADING "Program" FORMAT a18 TRUNCATED
|
||||
COLUMN event HEADING "Event" FORMAT a30 TRUNCATED
|
||||
COLUMN last_call_et HEADING "LastCall|(sec)" FORMAT 999,999
|
||||
--COLUMN last_call_et HEADING "LastCall" FORMAT a12
|
||||
COLUMN sql_child_number HEADING "SQL|Child|No" FORMAT 99
|
||||
|
||||
SELECT l.owner || '.' || substr(l.table_name,4) aw_name
|
||||
, s.tablespace_name
|
||||
, sum(s.bytes)/1024/1024 as mb
|
||||
FROM dba_lobs l
|
||||
, dba_segments s
|
||||
WHERE l.column_name = 'AWLOB'
|
||||
AND l.segment_name = s.segment_name
|
||||
GROUP BY l.owner
|
||||
, l.table_name
|
||||
, s.tablespace_name
|
||||
ORDER BY l.owner
|
||||
, l.table_name
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
42
vg/awr_buffer_hit_ratio_trend.sql
Normal file
42
vg/awr_buffer_hit_ratio_trend.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Buffer Hit Ratio from AWR data
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 05-Aug-06 Vishal Gupta First Draft
|
||||
* 15-May-07 Vishal Gupta Formatted the output
|
||||
*/
|
||||
|
||||
set pages 10000
|
||||
|
||||
COLUMN mydate HEADING 'YYYY-MM-DD HH24'
|
||||
COLUMN bhr HEADING 'Buffer Hit|Ratio (%)' FORMAT 999
|
||||
|
||||
select
|
||||
to_char(sn.END_INTERVAL_TIME,'yyyy-mm-dd HH24') mydate,
|
||||
new.name buffer_pool_name,
|
||||
(((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))-(new.physical_reads-old.physical_reads))
|
||||
/((new.consistent_gets-old.consistent_gets)+(new.db_block_gets-old.db_block_gets))*100 bhr
|
||||
from DBA_HIST_buffer_pool_stat old,
|
||||
DBA_HIST_buffer_pool_stat new,
|
||||
DBA_HIST_snapshot sn
|
||||
where sn.dbid = (select dbid from v$database)
|
||||
AND sn.dbid = new.dbid
|
||||
AND sn.instance_number = new.instance_number
|
||||
AND new.dbid = old.dbid
|
||||
AND new.instance_number = old.instance_number
|
||||
and new.name = old.name
|
||||
and new.snap_id = sn.snap_id
|
||||
AND old.snap_id = sn.snap_id-1
|
||||
and sn.END_INTERVAL_TIME > sysdate - &&1
|
||||
order by 1 asc
|
||||
/
|
||||
|
||||
|
||||
@@footer
|
||||
361
vg/awr_commands.sql
Normal file
361
vg/awr_commands.sql
Normal file
@@ -0,0 +1,361 @@
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Take Snapshot
|
||||
----------------------------------------------------------------
|
||||
exec dbms_workload_repository.create_snapshot('TYPICAL');
|
||||
exec dbms_workload_repository.create_snapshot('ALL');
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Modify AWR Configuration
|
||||
----------------------------------------------------------------
|
||||
BEGIN
|
||||
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 60*24*95 -- In Minutes (1 year = 525600)
|
||||
, interval => 15 -- In Minutes
|
||||
--, topnsql => NULL
|
||||
--, dbid => NULL
|
||||
);
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- AWR - Gather Stats
|
||||
----------------------------------------------------------------
|
||||
BEGIN
|
||||
-- AWR Table partitions with STALE/MISSING stats
|
||||
FOR i in (
|
||||
select STALE_STATS, last_analyzed,
|
||||
'BEGIN dbms_stats.gather_table_stats(''' || owner || ''',''' || table_name || ''',partname=>''' || partition_name|| ''',GRANULARITY=>''PARTITION'',DEGREE=>16,CASCADE =>TRUE); END;' sqltext
|
||||
from DBA_TAB_STATISTICS
|
||||
where owner = 'SYS'
|
||||
and table_name like 'WRH$%'
|
||||
and (STALE_STATS = 'YES' OR last_analyzed is null)
|
||||
and partition_name is not null
|
||||
ORDER BY owner, table_name, partition_name
|
||||
)
|
||||
LOOP
|
||||
execute immediate i.sqltext ;
|
||||
END LOOP;
|
||||
-- AWR Table with STALE/MISSING stats
|
||||
FOR i in (
|
||||
select STALE_STATS, last_analyzed,
|
||||
'exec dbms_stats.gather_table_stats(''' || owner || ''',''' || table_name || ''',DEGREE=>16,CASCADE =>TRUE);'
|
||||
from DBA_TAB_STATISTICS
|
||||
where owner = 'SYS'
|
||||
and table_name like 'WRH$%'
|
||||
and (STALE_STATS = 'YES' OR last_analyzed is null)
|
||||
and partition_name is null
|
||||
order by num_rows asc
|
||||
)
|
||||
LOOP
|
||||
execute immediate i.sqltext ;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Split AWR table partitions
|
||||
----------------------------------------------------------------
|
||||
alter session set "_swrf_test_action" = 72;
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Purge AWR Repository
|
||||
----------------------------------------------------------------
|
||||
Doc ID 1478615.1: How to Purge WRH$_SQL_PLAN Table in AWR Repository, Occupying Large Space in SYSAUX Tablespace.
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Purge AWR Snapshots ( 1 day at time)
|
||||
----------------------------------------------------------------
|
||||
SELECT 'exec dbms_workload_repository.drop_snapshot_range(low_snap_id=>' || min(snap_id)
|
||||
||' , high_snap_id=>'
|
||||
|| max(snap_id)
|
||||
|| ' , dbid=>' || min(dbid)
|
||||
||');'
|
||||
from dba_hist_snapshot s
|
||||
WHERE 1=1
|
||||
AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%' -- Exclude midnight snapshots
|
||||
and s.begin_interval_time < sysdate - 45
|
||||
group by trunc(begin_interval_time)
|
||||
order by trunc(begin_interval_time) asc
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Purge AWR Snapshots ( 1 snap at a time)
|
||||
----------------------------------------------------------------
|
||||
SELECT begin_interval_time
|
||||
, 'exec dbms_workload_repository.drop_snapshot_range(low_snap_id=>' || snap_id
|
||||
||' , high_snap_id=>'
|
||||
|| snap_id
|
||||
|| ' , dbid=>' || dbid
|
||||
||');'
|
||||
from dba_hist_snapshot s
|
||||
WHERE 1=1
|
||||
AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%' -- Exclude midnight snapshots
|
||||
order by begin_interval_time asc
|
||||
;
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Purge AWR Snapshots ( 1 snap at a time)
|
||||
----------------------------------------------------------------
|
||||
DECLARE
|
||||
lv_days_to_keep NUMBER := 90;
|
||||
lv_sqltext VARCHAR2(4000);
|
||||
BEGIN
|
||||
execute immediate 'alter session enable parallel DDL';
|
||||
execute immediate 'alter session enable parallel DML';
|
||||
|
||||
FOR snap in ( SELECT distinct s.snap_id
|
||||
, s.dbid
|
||||
, TRUNC(s.begin_interval_time,'MI') begin_interval_time
|
||||
from dba_hist_snapshot s
|
||||
WHERE 1=1
|
||||
-- Exclude midnight snapshots
|
||||
AND TO_CHAR(s.begin_interval_time,'HH24:MI') NOT LIKE '00:0%'
|
||||
-- Exclude Baseline snaphosts
|
||||
AND NOT EXISTS (select 1 from sys.WRM$_BASELINE b where s.dbid = b.dbid and s.snap_id BETWEEN b.start_snap_id AND b.end_snap_id )
|
||||
and s.begin_interval_time <= systimestamp - lv_days_to_keep
|
||||
order by TRUNC(s.begin_interval_time,'MI') asc
|
||||
)
|
||||
LOOP
|
||||
FOR t IN ( select t.owner, t.table_name
|
||||
from dba_tables t
|
||||
where 1=1
|
||||
and t.owner = 'SYS'
|
||||
and t.table_name like 'WRH%'
|
||||
and exists (select 1 from dba_tab_columns c where c.owner = t.owner and c.table_name = t.table_name and c.column_name = 'SNAP_ID')
|
||||
order by t.owner, t.table_name
|
||||
)
|
||||
LOOP
|
||||
lv_sqltext := 'delete /*+ parallel(8) */ from ' || t.owner || '.' || t.table_name || ' a where a.dbid = :DBID and a.snap_id = :SNAP_ID ';
|
||||
IF t.table_name = 'WRH$_SQLTEXT' THEN
|
||||
lv_sqltext := lv_sqltext || ' and not exists (select 1 from sys.wri$_sqltext_refcount r where r.dbid = a.dbid and r.sql_id = a.sql_id and r.ref_count > 0 ) ';
|
||||
END IF;
|
||||
execute immediate lv_sqltext USING snap.dbid , snap.snap_id;
|
||||
--commit;
|
||||
END LOOP;
|
||||
--execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_DATABASE_INSTANCE a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id;
|
||||
execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAP_ERROR a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id;
|
||||
execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAPSHOT_DETAILS a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id;
|
||||
execute immediate 'delete /*+ parallel(8) */ from SYS.WRM$_SNAPSHOT a where a.dbid = :DBID and a.snap_id = :SNAP_ID ' USING snap.dbid , snap.snap_id;
|
||||
commit;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- AWR - Purge Orphaned ASH rows
|
||||
--
|
||||
-- Doc ID 1478615.1: How to Purge WRH$_SQL_PLAN Table in AWR Repository, Occupying Large Space in SYSAUX Tablespace.
|
||||
----------------------------------------------------------------
|
||||
SELECT COUNT(1) Orphaned_ASH_Rows
|
||||
FROM sys.wrh$_active_session_history a
|
||||
WHERE NOT EXISTS
|
||||
(SELECT 1
|
||||
FROM sys.wrm$_snapshot
|
||||
WHERE snap_id = a.snap_id
|
||||
AND dbid = a.dbid
|
||||
AND instance_number = a.instance_number
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
DECLARE
|
||||
lv_batch_count NUMBER := 10000;
|
||||
BEGIN
|
||||
LOOP
|
||||
delete
|
||||
FROM sys.wrh$_active_session_history a
|
||||
WHERE NOT EXISTS
|
||||
(SELECT 1
|
||||
FROM sys.wrm$_snapshot
|
||||
WHERE snap_id = a.snap_id
|
||||
AND dbid = a.dbid
|
||||
AND instance_number = a.instance_number
|
||||
)
|
||||
AND ROWNUM <= lv_batch_count;
|
||||
EXIT WHEN SQL%ROWCOUNT = 0 ;
|
||||
commit;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- AWR - Purge Event Histogram
|
||||
--
|
||||
-- Doc ID 1912201.1: Excessive AWR Growth From Partitioned Objects Such as SYS.WRH$_EVENT_HISTOGRAM Causing Sysaux to Grow
|
||||
----------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- AWR - Purge Older Partitions
|
||||
----------------------------------------------------------------
|
||||
|
||||
exec dbms_workload_repository.create_snapshot;
|
||||
|
||||
-- Split partitions
|
||||
alter session set "_swrf_test_action" = 72;
|
||||
|
||||
-- Create snapshot
|
||||
exec dbms_workload_repository.create_snapshot;
|
||||
|
||||
-- Check Tablespace size
|
||||
@tbs SYSAUX
|
||||
|
||||
-- Find older partitions
|
||||
set lines 1000
|
||||
set numf 999,999,999,999
|
||||
SELECT bytes,segment_name, partition_name FROM dba_segments where owner = 'SYS' and segment_name like 'WR%' order by bytes asc;
|
||||
|
||||
|
||||
select min(snap_id), min(BEGIN_INTERVAL_TIME) , MAX(snap_id) , max(END_INTERVAL_TIME) from dba_hist_snapshot;
|
||||
|
||||
-- Drop partitions from another DBID
|
||||
BEGIN
|
||||
FOR i in (
|
||||
SELECT 'alter table sys.' || table_name || ' drop partition ' || partition_name sqltext
|
||||
FROM dba_tab_partitions where table_owner ='SYS' and table_name like 'WRH$%'
|
||||
and partition_name NOT like '%' || (select dbid from v$database) || '%'
|
||||
and partition_name not LIKE '%MXDB_MXSN%'
|
||||
)
|
||||
LOOP
|
||||
execute immediate i.sqltext;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
|
||||
-- Drop partitions
|
||||
BEGIN
|
||||
FOR I IN (
|
||||
select table_owner, table_name, partition_name, p.HIGH_VALUE
|
||||
, substr(partition_name,INSTR(p.partition_name,'_',-1)+1) snap_id
|
||||
, 'alter table ' || table_owner || '.' || table_name || ' drop partition ' || p.partition_name sqltext
|
||||
from v$database d
|
||||
JOIN dba_tab_partitions p ON 1=1
|
||||
where table_owner = 'SYS'
|
||||
and table_name like 'WRH$_%'
|
||||
and partition_name like '%' || d.dbid || '%'
|
||||
and substr(partition_name,INSTR(p.partition_name,'_',-1)+1)
|
||||
< (select max(snap_id) from dba_hist_snapshot s where s.dbid = d.dbid and s.END_INTERVAL_TIME < sysdate - 1)
|
||||
order by table_owner, table_name, partition_position
|
||||
)
|
||||
LOOP
|
||||
execute immediate i.sqltext;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
-- Check Tablespace size
|
||||
@tbs SYSAUX
|
||||
|
||||
-- Create snapshot
|
||||
exec dbms_workload_repository.create_snapshot;
|
||||
|
||||
-- Split partitions
|
||||
alter session set "_swrf_test_action" = 72;
|
||||
|
||||
|
||||
|
||||
-- Drop partitions
|
||||
BEGIN
|
||||
FOR i in (
|
||||
SELECT 'alter table sys.' || table_name || ' drop partition ' || partition_name sqltext
|
||||
FROM dba_tab_partitions where table_owner ='SYS' and table_name like 'WRH$%' and partition_name like '%218469294%'
|
||||
)
|
||||
LOOP
|
||||
execute immediate i.sqltext;
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- AWR Extract
|
||||
----------------------------------------------------------------
|
||||
sqlplus / as sysdba
|
||||
spool awr_extract.log
|
||||
DECLARE
|
||||
l_days NUMBER := 90;
|
||||
l_dbid SYS.DBA_HIST_SNAPSHOT.DBID%TYPE;
|
||||
l_bid SYS.DBA_HIST_SNAPSHOT.SNAP_ID%TYPE;
|
||||
l_eid SYS.DBA_HIST_SNAPSHOT.SNAP_ID%TYPE;
|
||||
begin
|
||||
SELECT s.dbid, min(s.snap_id) bid, max(s.snap_id) eid
|
||||
INTO l_dbid, l_bid, l_eid
|
||||
FROM dba_hist_snapshot s
|
||||
WHERE s.dbid = (select dbid from v$database)
|
||||
and begin_interval_time > sysdate - l_days
|
||||
group by s.dbid ;
|
||||
/* call PL/SQL routine to extract the data */
|
||||
sys.dbms_swrf_internal.awr_extract(dmpfile => 'AWR_exp'
|
||||
, dmpdir => 'BETA_REFRESH'
|
||||
, bid => l_bid
|
||||
, eid=> l_eid
|
||||
, dbid=> l_dbid
|
||||
);
|
||||
sys.dbms_swrf_internal.clear_awr_dbid;
|
||||
end;
|
||||
/
|
||||
spool off
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Drop AWR
|
||||
----------------------------------------------------------------
|
||||
sqlplus / as sysdba
|
||||
spool awr_drop.log
|
||||
alter system set "_awr_restrict_mode" = TRUE scope=spfile sid='*';
|
||||
shutdown immediate
|
||||
startup
|
||||
@?/rdbms/admin/catnoawr.sql
|
||||
alter system flush shared_pool;
|
||||
spool off
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Create AWR
|
||||
----------------------------------------------------------------
|
||||
sqlplus / as sysdba
|
||||
spool awr_create.log
|
||||
@?/rdbms/admin/catawr.sql
|
||||
@ ?/rdbms/admin/utlrp.sql
|
||||
@ ?/rdbms/admin/execsvrm.sql
|
||||
spool off
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Import AWR Data
|
||||
----------------------------------------------------------------
|
||||
TRUNCATE TABLE sys.wrm$_wr_control;
|
||||
TRUNCATE TABLE sys.wrm$_wr_usage;
|
||||
TRUNCATE TABLE sys.wrm$_snapshot_details;
|
||||
impdp "'/ as sysdba'" parallel=16 directory=BETA_REFRESH dumfile=AWR_exp.dmp logfile=AWR.imp.log
|
||||
|
||||
----------------------------------------------------------------
|
||||
-- Enable AWR Data
|
||||
----------------------------------------------------------------
|
||||
sqlplus / as sysdba
|
||||
spool awr_drop.log
|
||||
alter system reset "_awr_restrict_mode" = TRUE scope=spfile sid='*';
|
||||
shutdown immediate
|
||||
startup
|
||||
exec dbms_workload_repository.create_snapshot;
|
||||
exec dbms_workload_repository.create_snapshot;
|
||||
select max(snap_id), max(end_interval_time) max_time, min(snap_id), min(end_interval_time) min_time
|
||||
from dba_hist_snapshot;
|
||||
|
||||
43
vg/awr_config.sql
Normal file
43
vg/awr_config.sql
Normal file
@@ -0,0 +1,43 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display AWR Configuration
|
||||
* Parameter : None
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 10-Apr-12 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
|
||||
PROMPT
|
||||
PROMPT ##################################################################
|
||||
PROMPT A W R R E P O S I T O R Y C O N F I G U R A T I O N
|
||||
PROMPT ##################################################################
|
||||
|
||||
COLUMN snap_interval HEADING "Snapshot Interval" FORMAT a20
|
||||
COLUMN retention HEADING "Snapshot Retention" FORMAT a20
|
||||
COLUMN topnsql HEADING "Top N SQL" FORMAT a60
|
||||
|
||||
SELECT c.snap_interval
|
||||
, c.retention
|
||||
, DECODE(c.topnsql
|
||||
,'DEFAULT',DECODE(p.value
|
||||
,'TYPICAL','DEFAULT - 30 for current statistic_level=TYPICAL'
|
||||
,'ALL','DEFAULT - 100 for current statistic_level=ALL'
|
||||
,c.topnsql
|
||||
)
|
||||
,c.topnsql) topnsql
|
||||
FROM DBA_HIST_WR_CONTROL c
|
||||
JOIN v$database d ON c.dbid = d.dbid
|
||||
LEFT OUTER JOIN v$system_parameter p ON p.name = 'statistics_level'
|
||||
WHERE 1=1
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
73
vg/awr_index_usage_monitoring.sql
Normal file
73
vg/awr_index_usage_monitoring.sql
Normal file
@@ -0,0 +1,73 @@
|
||||
@@header
|
||||
|
||||
PROMPT *********************
|
||||
PROMPT SCRIPT INCOMPLETE
|
||||
PROMPT *********************
|
||||
|
||||
set term off
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display index usage from AWR data.
|
||||
* Parameters : NONE
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 26-May-12 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
set term on
|
||||
|
||||
COLUMN table_owner HEADING "Table Owner" FORMAT a20
|
||||
COLUMN table_name HEADING "Table Name" FORMAT a20
|
||||
COLUMN index_name HEADING "Index Name" FORMAT a20
|
||||
COLUMN Monitoring HEADING "Monitoring" FORMAT a10
|
||||
COLUMN Used HEADING "Used" FORMAT a4
|
||||
|
||||
|
||||
SELECT object_name
|
||||
, sql_id
|
||||
, ROUND(avg(daily_exections)) avg_daily_exections
|
||||
FROM
|
||||
(
|
||||
SELECT p.object_name
|
||||
, p.sql_id
|
||||
--, p.plan_hash_value
|
||||
, to_char(end_interval_time,'YYYY-MM-DD') Day
|
||||
, SUM(ss.executions_delta) daily_exections
|
||||
FROM dba_hist_sql_plan p
|
||||
, dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
WHERE s.dbid = ss.dbid
|
||||
AND s.instance_number = ss.instance_number
|
||||
AND s.snap_id = ss.snap_id
|
||||
AND ss.plan_hash_value = p.plan_hash_value
|
||||
AND ss.dbid = p.dbid
|
||||
AND ss.sql_id = p.sql_id
|
||||
AND (p.object_name LIKE 'TRN_IX%' OR p.object_name = 'TRN_UK1')
|
||||
AND p.object_name = 'TRN_IX13'
|
||||
--AND s.end_interval_time BETWEEN TO_DATE('01-Jun-12','DD-Mon-YY') and TO_DATE('30-Jun-12','DD-Mon-YY')
|
||||
GROUP BY p.object_name
|
||||
, p.sql_id
|
||||
--, p.plan_hash_value
|
||||
, to_char(end_interval_time,'YYYY-MM-DD')
|
||||
-- having sum(ss.executions_delta) > 1
|
||||
ORDER BY p.object_name
|
||||
, p.sql_id
|
||||
--, p.plan_hash_value
|
||||
, sum(ss.executions_delta) desc
|
||||
)
|
||||
GROUP BY object_name
|
||||
, sql_id
|
||||
--HAVING ROUND(avg(daily_exections)) > 10
|
||||
ORDER BY object_name
|
||||
, sql_id
|
||||
, avg_daily_exections desc
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
88
vg/awr_instance.sql
Normal file
88
vg/awr_instance.sql
Normal file
@@ -0,0 +1,88 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display instance startup details from AWR repository
|
||||
* Parameters : 1 - Instance Number ( Use % to query for all instances)
|
||||
* 2 - Number of days to query ( Default 30)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 04-Nov-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
VARIABLE INST_ID VARCHAR2(100)
|
||||
VARIABLE DAYS VARCHAR2(100)
|
||||
|
||||
BEGIN
|
||||
:INST_ID := '&&1';
|
||||
:DAYS := '&&2';
|
||||
:INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END;
|
||||
:DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '30' ELSE :DAYS END;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
set head off
|
||||
SELECT '**********************************************' || chr(10) ||
|
||||
'* Instance History' || chr(10) ||
|
||||
'* (From AWR Repository)' || chr(10) ||
|
||||
'*' || chr(10) ||
|
||||
'* Input Parameters' || chr(10) ||
|
||||
'* - Instance# = "' || :INST_ID || '"' || chr(10) ||
|
||||
'* - Days = "' || :DAYS || '"' || chr(10) ||
|
||||
'**********************************************' || chr(10) ||
|
||||
''
|
||||
FROM DUAL;
|
||||
set head on
|
||||
|
||||
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN db_name HEADING "DBName" FORMAT a10
|
||||
COLUMN instance_name HEADING "Instance|Name" FORMAT a10
|
||||
COLUMN startup_time HEADING "StartupTime" FORMAT a18
|
||||
COLUMN last_uptime HEADING "Last Uptime" FORMAT a16
|
||||
COLUMN version HEADING "Version" FORMAT a10
|
||||
COLUMN parallel HEADING "Parallel" FORMAT a10
|
||||
COLUMN host_name HEADING "Host Name" FORMAT a10 TRUNCATE
|
||||
COLUMN platform_name HEADING "Platform Name" FORMAT a18 TRUNCATE
|
||||
|
||||
SELECT i.db_name
|
||||
, i.instance_number
|
||||
, i.host_name
|
||||
, i.instance_name
|
||||
, to_char(i.startup_time,'DD-MON-YY HH24:MI:SS') startup_time
|
||||
, NVL2(i.last_uptime
|
||||
, LPAD( EXTRACT(DAY FROM i.last_uptime) || 'd '
|
||||
|| LPAD(EXTRACT(HOUR FROM i.last_uptime),2) || 'h '
|
||||
|| LPAD(EXTRACT(MINUTE FROM i.last_uptime),2) || 'm '
|
||||
|| LPAD(EXTRACT(SECOND FROM i.last_uptime),2) || 's'
|
||||
, 16)
|
||||
, '')
|
||||
last_uptime
|
||||
, i.version
|
||||
, i.parallel
|
||||
, i.platform_name
|
||||
FROM
|
||||
( select a.*
|
||||
, a.startup_time
|
||||
- LAG(a.startup_time) OVER (PARTITION BY a.dbid, a.instance_number ORDER BY a.dbid, a.instance_number, a.startup_time) last_uptime
|
||||
from dba_hist_database_instance a
|
||||
, v$database d
|
||||
WHERE a.dbid = d.dbid
|
||||
AND a.instance_number like :INST_ID
|
||||
) i
|
||||
WHERE i.startup_time > systimestamp - :DAYS
|
||||
ORDER BY i.startup_time
|
||||
;
|
||||
|
||||
@@footer
|
||||
174
vg/awr_loadprofile.sql
Normal file
174
vg/awr_loadprofile.sql
Normal file
@@ -0,0 +1,174 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display load profile from AWR
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 04-Apr-12 Vishal Gupta Intial version
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE TO_TIMESTAMP
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
|
||||
COLUMN _FROM_TIMESTAMP NEW_VALUE FROM_TIMESTAMP NOPRINT
|
||||
COLUMN _TO_TIMESTAMP NEW_VALUE TO_TIMESTAMP NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
, DECODE('&&FROM_TIMESTAMP','',to_char(sysdate - 1,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
|
||||
, DECODE('&&TO_TIMESTAMP','',to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE SNAP_TIME_FORMAT="YYYY-MM-DD HH24:MI:SS"
|
||||
|
||||
DEFINE COUNT_FORMAT="9,999,999"
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="'000s"
|
||||
--DEFINE COUNT_DIVIDER="1000000"
|
||||
--DEFINE COUNT_HEADING="'000,000s"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
--DEFINE TIME_DIVIDER="1"
|
||||
--DEFINE TIME_HEADING="sec"
|
||||
DEFINE TIME_DIVIDER="60"
|
||||
DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ####################################################################################
|
||||
PROMPT # L O A D P R O F I L E T R E N D
|
||||
PROMPT #
|
||||
PROMPT # From AWR Repository
|
||||
PROMPT # - For Instance ID - &INST_ID
|
||||
PROMPT # - From Time - &&FROM_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT # - To Time - &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT ####################################################################################
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "Snap Time|(&&SNAP_TIME_FORMAT)" FORMAT a22
|
||||
COLUMN cpu_time HEADING "CPU|Time|(&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN redo_size HEADING "RedoSize|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN logical_reads HEADING "Logical|Reads|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN block_changes HEADING "Block|Changes|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN phy_read_bytes HEADING "Physical|Read|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN phy_write_bytes HEADING "Physical|Write|(&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN phy_reads HEADING "Physical|Reads|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN phy_writes HEADING "Physical|Writes|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN user_calls HEADING "User|Calls|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN parses HEADING "Parses|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN hard_parses_reads HEADING "Hard|Parses|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_mem HEADING "Sorts|Memory|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_disk HEADING "Sorts|Disk|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN logons HEADING "Logons|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN commits HEADING "Commits|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN rollbacks HEADING "Rollbacks|(&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
|
||||
WITH snap
|
||||
AS
|
||||
(SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
SELECT /*+ USE_NL(s ss ss_prev) */
|
||||
TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') end_interval_time
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'CPU used by this session', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/100/&TIME_DIVIDER)))) cpu_time
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'redo size' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) redo_size
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'session logical reads', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) logical_reads
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'db block changes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) block_changes
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'physical read total bytes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) phy_read_bytes
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'physical write total bytes', ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&BYTES_DIVIDER)))) phy_write_bytes
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'physical reads' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) phy_reads
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'physical writes' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) phy_writes
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'user calls' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) user_calls
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'parse count (total)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) parses
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'parse count (hard)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) hard_parses_reads
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'sorts (memory)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) sorts_mem
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'sorts (disk)' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) sorts_disk
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'logons cumulative' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) logons
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'user commits' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) commits
|
||||
, ROUND(SUM(DECODE(ss.stat_name, 'user rollbacks' , ROUND ((ss.value - LEAST(ss_prev.value,ss.value))/&COUNT_DIVIDER)))) rollbacks
|
||||
FROM snap s
|
||||
, dba_hist_sysstat ss
|
||||
, dba_hist_sysstat ss_prev
|
||||
where s.prev_snap_id IS NOT NULL
|
||||
and s.dbid = ss_prev.dbid
|
||||
and s.instance_number = ss_prev.instance_number
|
||||
and s.prev_snap_id = ss_prev.snap_id
|
||||
and s.dbid = ss.dbid
|
||||
and s.instance_number = ss.instance_number
|
||||
and s.snap_id = ss.snap_id
|
||||
and ss_prev.stat_name = ss.stat_name
|
||||
and ss.stat_name in (
|
||||
'redo size'
|
||||
,'session logical reads'
|
||||
,'db block changes'
|
||||
,'physical reads'
|
||||
,'physical read total bytes'
|
||||
,'physical read bytes'
|
||||
,'physical writes'
|
||||
,'physical write total bytes'
|
||||
,'physical write bytes'
|
||||
,'user calls'
|
||||
,'parse count (total)'
|
||||
,'parse count (hard)'
|
||||
,'sorts (memory)'
|
||||
,'sorts (disk)'
|
||||
,'logons cumulative'
|
||||
,'execute count'
|
||||
,'user commits'
|
||||
,'user rollbacks'
|
||||
,'CPU used by this session'
|
||||
)
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT')
|
||||
ORDER BY TO_CHAR(s.end_interval_time,'&&SNAP_TIME_FORMAT') asc
|
||||
/
|
||||
|
||||
|
||||
@@footer
|
||||
116
vg/awr_loadprofile_by_statname.sql
Normal file
116
vg/awr_loadprofile_by_statname.sql
Normal file
@@ -0,0 +1,116 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display hourly load profile from AWR for statistics passed as input
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - Statistics Name (Exact Name, use @statname script to find exact name)
|
||||
*
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 25-May-12 Vishal Gupta Intial version
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE STAT_NAME
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
DEFINE STAT_NAME="&4"
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
set pages 50000
|
||||
|
||||
DEFINE FORMAT="999,999,999,999"
|
||||
DEFINE TOTAL_FORMAT="999,999,999,999"
|
||||
|
||||
DEFINE HEADING="#"
|
||||
DEFINE DIVIDER="1"
|
||||
--DEFINE HEADING="'1000s"
|
||||
--DEFINE DIVIDER="1000"
|
||||
|
||||
--DEFINE HEADING="min"
|
||||
--DEFINE DIVIDER="60/100"
|
||||
--DEFINE HEADING="hr"
|
||||
--DEFINE DIVIDER="60/60/100"
|
||||
|
||||
--DEFINE HEADING="'KB"
|
||||
--DEFINE DIVIDER="1024"
|
||||
--DEFINE HEADING="'MB"
|
||||
--DEFINE DIVIDER="1024/1024"
|
||||
--DEFINE HEADING="'GB"
|
||||
--DEFINE DIVIDER="1024/1024/1024"
|
||||
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ####################################################################################
|
||||
PROMPT #
|
||||
PROMPT # S Y S T E M S T A T I S T I C S T R E N D
|
||||
PROMPT #
|
||||
PROMPT # From AWR Repository (Absolute figures , not delta)
|
||||
PROMPT # - For Instance ID - &INST_ID
|
||||
PROMPT # - Snap Between - &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT # - Statistic Name - "&&STAT_NAME"
|
||||
PROMPT #
|
||||
PROMPT # (All Figures are in &&HEADING)
|
||||
PROMPT #
|
||||
PROMPT ####################################################################################
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT A15
|
||||
COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT
|
||||
COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT
|
||||
COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT
|
||||
COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT
|
||||
COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT
|
||||
COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT
|
||||
COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT
|
||||
COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT
|
||||
COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT
|
||||
|
||||
SELECT /*+ USE_NL(s ss) */
|
||||
TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, ROUND(SUM(ss.value) / &&DIVIDER ) all_inst_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,1,ss.value,0)) / &&DIVIDER ) inst1_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,2,ss.value,0)) / &&DIVIDER ) inst2_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,3,ss.value,0)) / &&DIVIDER ) inst3_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,4,ss.value,0)) / &&DIVIDER ) inst4_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,5,ss.value,0)) / &&DIVIDER ) inst5_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,6,ss.value,0)) / &&DIVIDER ) inst6_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,7,ss.value,0)) / &&DIVIDER ) inst7_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,8,ss.value,0)) / &&DIVIDER ) inst8_value
|
||||
FROM dba_hist_snapshot s
|
||||
, dba_hist_sysstat ss
|
||||
where s.dbid = ss.dbid
|
||||
and s.instance_number = ss.instance_number
|
||||
and s.snap_id = ss.snap_id
|
||||
and ss.stat_name = '&&STAT_NAME'
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc
|
||||
/
|
||||
|
||||
@@footer
|
||||
135
vg/awr_loadprofile_by_statname_delta.sql
Normal file
135
vg/awr_loadprofile_by_statname_delta.sql
Normal file
@@ -0,0 +1,135 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display hourly load profile from AWR for statistics passed as input
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - Statistics Name (Exact Name, use @statname script to find exact name)
|
||||
*
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 25-May-12 Vishal Gupta Intial version
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE STAT_NAME
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
DEFINE STAT_NAME="&4"
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
set pages 50000
|
||||
|
||||
|
||||
DEFINE FORMAT="999,999,999,999"
|
||||
DEFINE TOTAL_FORMAT="999,999,999,999"
|
||||
|
||||
DEFINE HEADING="#"
|
||||
DEFINE DIVIDER="1"
|
||||
--DEFINE HEADING="'1000s"
|
||||
--DEFINE DIVIDER="1000"
|
||||
|
||||
--DEFINE HEADING="min"
|
||||
--DEFINE DIVIDER="60/100"
|
||||
--DEFINE HEADING="hr"
|
||||
--DEFINE DIVIDER="60/60/100"
|
||||
|
||||
--DEFINE HEADING="'KB"
|
||||
--DEFINE DIVIDER="1024"
|
||||
--DEFINE HEADING="'MB"
|
||||
--DEFINE DIVIDER="1024/1024"
|
||||
--DEFINE HEADING="'GB"
|
||||
--DEFINE DIVIDER="1024/1024/1024"
|
||||
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ************************************************************************************
|
||||
PROMPT *
|
||||
PROMPT * S Y S T E M S T A T I S T I C S T R E N D
|
||||
PROMPT *
|
||||
PROMPT * From AWR Repository (Delta Figures)
|
||||
PROMPT * - For Instance ID - &INST_ID
|
||||
PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT * - Statistic Name - "&&STAT_NAME"
|
||||
PROMPT *
|
||||
PROMPT * (All Figures are in &&HEADING)
|
||||
PROMPT *
|
||||
PROMPT ************************************************************************************
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT A15
|
||||
COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT
|
||||
COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT
|
||||
COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT
|
||||
COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT
|
||||
COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT
|
||||
COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT
|
||||
COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT
|
||||
COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT
|
||||
COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT
|
||||
|
||||
WITH snap
|
||||
AS
|
||||
(SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
SELECT /*+ USE_NL(s1 ss1 ss_prev) */
|
||||
TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, ROUND(SUM(ss.value - LEAST(ss_prev.value,ss.value)) / &&DIVIDER ) all_inst_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,1,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst1_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,2,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst2_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,3,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst3_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,4,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst4_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,5,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst5_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,6,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst6_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,7,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst7_value
|
||||
, ROUND(SUM(DECODE(ss.instance_number,8,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst8_value
|
||||
FROM snap s
|
||||
, dba_hist_sysstat ss
|
||||
, dba_hist_sysstat ss_prev
|
||||
where s.next_snap_id IS NOT NULL
|
||||
and s.dbid = ss_prev.dbid
|
||||
and s.instance_number = ss_prev.instance_number
|
||||
and s.snap_id = ss_prev.snap_id
|
||||
and s.dbid = ss.dbid
|
||||
and s.instance_number = ss.instance_number
|
||||
and s.next_snap_id = ss.snap_id
|
||||
and ss_prev.stat_name = ss.stat_name
|
||||
and ss.stat_name = '&&STAT_NAME'
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc
|
||||
/
|
||||
|
||||
|
||||
@@footer
|
||||
152
vg/awr_loadprofile_by_statname_hourlybreakdown.sql
Normal file
152
vg/awr_loadprofile_by_statname_hourlybreakdown.sql
Normal file
@@ -0,0 +1,152 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display hourly load profile from AWR for statistics passed as input
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - Statistics Name (Exact Name, use @statname script to find exact name)
|
||||
*
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 25-May-12 Vishal Gupta Intial version
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE STAT_NAME
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
DEFINE STAT_NAME="&4"
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
|
||||
|
||||
DEFINE FORMAT="9999"
|
||||
DEFINE TOTAL_FORMAT="999,999"
|
||||
|
||||
--DEFINE HEADING="#"
|
||||
--DEFINE DIVIDER="1"
|
||||
--DEFINE HEADING="'1000s"
|
||||
--DEFINE DIVIDER="1000"
|
||||
|
||||
--DEFINE HEADING="min"
|
||||
--DEFINE DIVIDER="60/100"
|
||||
--DEFINE HEADING="hr"
|
||||
--DEFINE DIVIDER="60/60/100"
|
||||
|
||||
--DEFINE HEADING="KB"
|
||||
--DEFINE DIVIDER="1024"
|
||||
--DEFINE HEADING="MB"
|
||||
--DEFINE DIVIDER="1024/1024"
|
||||
DEFINE HEADING="GB"
|
||||
DEFINE DIVIDER="1024/1024/1024"
|
||||
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ####################################################################################
|
||||
PROMPT #
|
||||
PROMPT # S Y S T E M S T A T I S T I C S T R E N D
|
||||
PROMPT #
|
||||
PROMPT # From AWR Repository (Absolute figures , not delta)
|
||||
PROMPT # - Statistic Name - "&&STAT_NAME"
|
||||
PROMPT # - For Instance ID - &INST_ID
|
||||
PROMPT # - Snap Between - &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT #
|
||||
PROMPT # (All Figures are in &&HEADING)
|
||||
PROMPT #
|
||||
PROMPT ####################################################################################
|
||||
|
||||
|
||||
COLUMN "Date" HEADING "Date" FORMAT A9
|
||||
COLUMN "Day" HEADING "Day" FORMAT A3
|
||||
COLUMN Day_Max HEADING "Day|Max" FORMAT &&TOTAL_FORMAT
|
||||
COLUMN h0 HEADING "h0" FORMAT &&FORMAT
|
||||
COLUMN h1 HEADING "h1" FORMAT &&FORMAT
|
||||
COLUMN h2 HEADING "h2" FORMAT &&FORMAT
|
||||
COLUMN h3 HEADING "h3" FORMAT &&FORMAT
|
||||
COLUMN h4 HEADING "h4" FORMAT &&FORMAT
|
||||
COLUMN h5 HEADING "h5" FORMAT &&FORMAT
|
||||
COLUMN h6 HEADING "h6" FORMAT &&FORMAT
|
||||
COLUMN h7 HEADING "h7" FORMAT &&FORMAT
|
||||
COLUMN h8 HEADING "h8" FORMAT &&FORMAT
|
||||
COLUMN h9 HEADING "h9" FORMAT &&FORMAT
|
||||
COLUMN h10 HEADING "h10" FORMAT &&FORMAT
|
||||
COLUMN h11 HEADING "h11" FORMAT &&FORMAT
|
||||
COLUMN h12 HEADING "h12" FORMAT &&FORMAT
|
||||
COLUMN h13 HEADING "h13" FORMAT &&FORMAT
|
||||
COLUMN h14 HEADING "h14" FORMAT &&FORMAT
|
||||
COLUMN h15 HEADING "h15" FORMAT &&FORMAT
|
||||
COLUMN h16 HEADING "h16" FORMAT &&FORMAT
|
||||
COLUMN h17 HEADING "h17" FORMAT &&FORMAT
|
||||
COLUMN h18 HEADING "h18" FORMAT &&FORMAT
|
||||
COLUMN h19 HEADING "h19" FORMAT &&FORMAT
|
||||
COLUMN h20 HEADING "h20" FORMAT &&FORMAT
|
||||
COLUMN h21 HEADING "h21" FORMAT &&FORMAT
|
||||
COLUMN h22 HEADING "h22" FORMAT &&FORMAT
|
||||
COLUMN h23 HEADING "h23" FORMAT &&FORMAT
|
||||
|
||||
SELECT /*+ USE_NL(s ss) */
|
||||
TO_CHAR(trunc(s.end_interval_time),'DD-Mon-YY') "Date"
|
||||
, TO_CHAR(trunc(s.end_interval_time), 'Dy') "Day"
|
||||
, ROUND(MAX(ss.value) / &&DIVIDER ) Day_Max
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'00',(ss.value),0)) / &&DIVIDER ) "h0"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'01',(ss.value),0)) / &&DIVIDER ) "h1"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'02',(ss.value),0)) / &&DIVIDER ) "h2"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'03',(ss.value),0)) / &&DIVIDER ) "h3"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'04',(ss.value),0)) / &&DIVIDER ) "h4"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'05',(ss.value),0)) / &&DIVIDER ) "h5"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'06',(ss.value),0)) / &&DIVIDER ) "h6"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'07',(ss.value),0)) / &&DIVIDER ) "h7"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'08',(ss.value),0)) / &&DIVIDER ) "h8"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'09',(ss.value),0)) / &&DIVIDER ) "h9"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'10',(ss.value),0)) / &&DIVIDER ) "h10"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'11',(ss.value),0)) / &&DIVIDER ) "h11"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'12',(ss.value),0)) / &&DIVIDER ) "h12"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'13',(ss.value),0)) / &&DIVIDER ) "h13"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'14',(ss.value),0)) / &&DIVIDER ) "h14"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'15',(ss.value),0)) / &&DIVIDER ) "h15"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'16',(ss.value),0)) / &&DIVIDER ) "h16"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'17',(ss.value),0)) / &&DIVIDER ) "h17"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'18',(ss.value),0)) / &&DIVIDER ) "h18"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'19',(ss.value),0)) / &&DIVIDER ) "h19"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'20',(ss.value),0)) / &&DIVIDER ) "h20"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'21',(ss.value),0)) / &&DIVIDER ) "h21"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'22',(ss.value),0)) / &&DIVIDER ) "h22"
|
||||
, ROUND(MAX(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'23',(ss.value),0)) / &&DIVIDER ) "h23"
|
||||
FROM dba_hist_snapshot s
|
||||
, dba_hist_sysstat ss
|
||||
where s.dbid = ss.dbid
|
||||
and s.instance_number = ss.instance_number
|
||||
and s.snap_id = ss.snap_id
|
||||
and ss.stat_name = '&&STAT_NAME'
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
|
||||
GROUP BY trunc(s.end_interval_time)
|
||||
-- , to_char(COMPLETION_TIME, 'Dy')
|
||||
ORDER BY trunc(s.end_interval_time) asc
|
||||
/
|
||||
|
||||
|
||||
@@footer
|
||||
211
vg/awr_loadprofile_by_statname_hourlybreakdown_delta.sql
Normal file
211
vg/awr_loadprofile_by_statname_hourlybreakdown_delta.sql
Normal file
@@ -0,0 +1,211 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display hourly load profile from AWR for statistics passed as input
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - Statistics Name (Exact Name, use @statname script to find exact name)
|
||||
*
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 25-May-12 Vishal Gupta Intial version
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE STAT_NAME
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
DEFINE STAT_NAME="&4"
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE FORMAT="99999"
|
||||
DEFINE TOTAL_FORMAT="999,999"
|
||||
|
||||
DEFINE HEADING=""
|
||||
DEFINE DIVIDER=""
|
||||
|
||||
|
||||
COLUMN _HEADING NEW_VALUE HEADING NOPRINT
|
||||
COLUMN _DIVIDER NEW_VALUE DIVIDER NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT CASE
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '#'
|
||||
WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN 'thousands'
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN 'millions'
|
||||
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'sec'
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'min'
|
||||
WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN 'hour'
|
||||
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'KB'
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'MB'
|
||||
WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN 'GB'
|
||||
|
||||
ELSE '#'
|
||||
END "_HEADING"
|
||||
, CASE
|
||||
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1'
|
||||
WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1000'
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%CPU%' THEN '1000000'
|
||||
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '100'
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '60/100'
|
||||
WHEN UPPER('&&STAT_NAME') LIKE '%TIME%' THEN '60/60/100'
|
||||
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024'
|
||||
--WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024/1024'
|
||||
WHEN UPPER('&&STAT_NAME') LIKE '%BYTES%' THEN '1024/1024/1024'
|
||||
|
||||
ELSE '1'
|
||||
END "_DIVIDER"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
|
||||
--DEFINE HEADING="#"
|
||||
--DEFINE DIVIDER="1"
|
||||
--&&_IF_COUNT_METRIC DEFINE HEADING="'1000s"
|
||||
--&&_IF_COUNT_METRIC DEFINE DIVIDER="1000"
|
||||
|
||||
--&&_IF_TIME_METRIC DEFINE HEADING="minutes"
|
||||
--&&_IF_TIME_METRIC DEFINE DIVIDER="60/100"
|
||||
--&&_IF_TIME_METRIC DEFINE HEADING="hour"
|
||||
--&&_IF_TIME_METRIC DEFINE DIVIDER="60/60/100"
|
||||
|
||||
--DEFINE HEADING="KB"
|
||||
--DEFINE DIVIDER="1024"
|
||||
--DEFINE HEADING="MB"
|
||||
--DEFINE DIVIDER="1024/1024"
|
||||
--&&_IF_BYTES_METRIC DEFINE HEADING="GB"
|
||||
--&&_IF_BYTES_METRIC DEFINE DIVIDER="1024/1024/1024"
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ####################################################################################
|
||||
PROMPT #
|
||||
PROMPT # S Y S T E M S T A T I S T I C S T R E N D
|
||||
PROMPT #
|
||||
PROMPT # From AWR Repository (Delta Figures)
|
||||
PROMPT # - Statistic Name - "&&STAT_NAME"
|
||||
PROMPT # - For Instance ID - &INST_ID
|
||||
PROMPT # - Snap Between - &&FROM_TIMESTAMP AND &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT #
|
||||
PROMPT # (All Figures are in &&HEADING)
|
||||
PROMPT #
|
||||
PROMPT ####################################################################################
|
||||
|
||||
|
||||
COLUMN "Date" HEADING "Date" FORMAT A9
|
||||
COLUMN "Day" HEADING "Day" FORMAT A3
|
||||
COLUMN "Total" HEADING "Day|Total" FORMAT &&TOTAL_FORMAT
|
||||
COLUMN h0 HEADING "h0" FORMAT &&FORMAT
|
||||
COLUMN h1 HEADING "h1" FORMAT &&FORMAT
|
||||
COLUMN h2 HEADING "h2" FORMAT &&FORMAT
|
||||
COLUMN h3 HEADING "h3" FORMAT &&FORMAT
|
||||
COLUMN h4 HEADING "h4" FORMAT &&FORMAT
|
||||
COLUMN h5 HEADING "h5" FORMAT &&FORMAT
|
||||
COLUMN h6 HEADING "h6" FORMAT &&FORMAT
|
||||
COLUMN h7 HEADING "h7" FORMAT &&FORMAT
|
||||
COLUMN h8 HEADING "h8" FORMAT &&FORMAT
|
||||
COLUMN h9 HEADING "h9" FORMAT &&FORMAT
|
||||
COLUMN h10 HEADING "h10" FORMAT &&FORMAT
|
||||
COLUMN h11 HEADING "h11" FORMAT &&FORMAT
|
||||
COLUMN h12 HEADING "h12" FORMAT &&FORMAT
|
||||
COLUMN h13 HEADING "h13" FORMAT &&FORMAT
|
||||
COLUMN h14 HEADING "h14" FORMAT &&FORMAT
|
||||
COLUMN h15 HEADING "h15" FORMAT &&FORMAT
|
||||
COLUMN h16 HEADING "h16" FORMAT &&FORMAT
|
||||
COLUMN h17 HEADING "h17" FORMAT &&FORMAT
|
||||
COLUMN h18 HEADING "h18" FORMAT &&FORMAT
|
||||
COLUMN h19 HEADING "h19" FORMAT &&FORMAT
|
||||
COLUMN h20 HEADING "h20" FORMAT &&FORMAT
|
||||
COLUMN h21 HEADING "h21" FORMAT &&FORMAT
|
||||
COLUMN h22 HEADING "h22" FORMAT &&FORMAT
|
||||
COLUMN h23 HEADING "h23" FORMAT &&FORMAT
|
||||
|
||||
WITH snap
|
||||
AS
|
||||
(SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS') - 1/24
|
||||
AND TO_TIMESTAMP('&&TO_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
SELECT /*+ LEADING(s sn) USE_NL(s sn ss ss_prev) */
|
||||
TO_CHAR(trunc(s.end_interval_time),'DD-Mon-YY') "Date"
|
||||
, TO_CHAR(trunc(s.end_interval_time), 'Dy') "Day"
|
||||
, ROUND(SUM(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)) / &&DIVIDER ) Total
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'00',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h0"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'01',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h1"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'02',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h2"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'03',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h3"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'04',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h4"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'05',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h5"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'06',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h6"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'07',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h7"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'08',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h8"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'09',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h9"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'10',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h10"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'11',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h11"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'12',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h12"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'13',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h13"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'14',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h14"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'15',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h15"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'16',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h16"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'17',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h17"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'18',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h18"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'19',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h19"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'20',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h20"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'21',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h21"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'22',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h22"
|
||||
, ROUND(SUM(DECODE(TO_CHAR(s.end_interval_time, 'hh24'),'23',(ss.value - LEAST(NVL(ss_prev.value,ss.value),ss.value)),0)) / &&DIVIDER ) "h23"
|
||||
FROM snap s
|
||||
, dba_hist_stat_name sn
|
||||
, dba_hist_sysstat ss
|
||||
, dba_hist_sysstat ss_prev
|
||||
WHERE ss.dbid = s.dbid
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss_prev.dbid = s.dbid
|
||||
AND ss_prev.instance_number = s.instance_number
|
||||
AND ss_prev.snap_id = s.prev_snap_id
|
||||
AND ss_prev.stat_id = ss.stat_id
|
||||
AND sn.dbid = s.dbid
|
||||
AND sn.stat_id = ss.stat_id
|
||||
AND UPPER(sn.stat_name) = UPPER('&&STAT_NAME')
|
||||
GROUP BY trunc(s.end_interval_time)
|
||||
ORDER BY trunc(s.end_interval_time) asc
|
||||
/
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
221
vg/awr_loadprofile_logicalreads.sql
Normal file
221
vg/awr_loadprofile_logicalreads.sql
Normal file
@@ -0,0 +1,221 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display load profile from AWR
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - No of days
|
||||
*
|
||||
* dbid and instancenumber are optional.
|
||||
* If not passes then it takes current instance's dbid and instancenumber
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 04-Apr-12 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE days
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE days="&&2"
|
||||
|
||||
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
set pages 2000
|
||||
|
||||
DEFINE COUNT_FORMAT="999,999"
|
||||
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="'000s"
|
||||
|
||||
DEFINE BYTES_FORMAT="9999"
|
||||
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT #################################################################
|
||||
PROMPT L O G I C A L ( C A C H E D ) R E A D S T R E N D
|
||||
PROMPT #################################################################
|
||||
|
||||
|
||||
COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14
|
||||
COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 999,999
|
||||
COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
|
||||
BREAK ON REPORT
|
||||
|
||||
COMPUTE MIN MAX AVG OF DayTotal ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h00 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h01 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h02 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h03 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h04 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h05 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h06 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h07 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h08 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h09 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h10 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h11 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h12 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h13 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h14 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h15 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h16 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h17 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h18 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h19 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h20 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h21 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h22 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h23 ON REPORT
|
||||
|
||||
|
||||
WITH snap
|
||||
AS
|
||||
(SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&inst_id'
|
||||
AND s.end_interval_time > TRUNC(systimestamp) - &days
|
||||
)
|
||||
, awr_stats as
|
||||
(
|
||||
SELECT TRUNC(s1.end_interval_time) end_interval_day
|
||||
, TO_CHAR(s1.end_interval_time,'hh24') end_interval_hour
|
||||
, ROUND((ss2.value - NVL(ss1.value,ss2.value))*p.value/&BYTES_DIVIDER) value
|
||||
FROM snap s1
|
||||
, dba_hist_sysstat ss1
|
||||
, dba_hist_sysstat ss2
|
||||
, dba_hist_stat_name sn
|
||||
, v$system_parameter p
|
||||
where p.name = 'db_block_size'
|
||||
and s1.dbid = ss1.dbid
|
||||
and s1.instance_number = ss1.instance_number
|
||||
and s1.prev_snap_id = ss1.snap_id
|
||||
and s1.dbid = ss2.dbid
|
||||
and s1.instance_number = ss2.instance_number
|
||||
and s1.snap_id = ss2.snap_id
|
||||
and ss1.stat_id = ss2.stat_id
|
||||
and ss1.dbid = sn.dbid
|
||||
and ss1.stat_id = sn.stat_id
|
||||
and sn.stat_name in (
|
||||
'consistent gets'
|
||||
/*
|
||||
'redo size'
|
||||
,'session logical reads'
|
||||
,'db block changes'
|
||||
,'physical reads'
|
||||
,'physical writes'
|
||||
,'user calls'
|
||||
,'parse count (total)'
|
||||
,'parse count (hard)'
|
||||
,'sorts (memory)'
|
||||
,'sorts (disk)'
|
||||
,'logons cumulative'
|
||||
,'execute count'
|
||||
,'user commits'
|
||||
,'user rollbacks'
|
||||
*/
|
||||
)
|
||||
)
|
||||
SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day
|
||||
, SUM(s.value) DayTotal
|
||||
, SUM(DECODE(s.end_interval_hour,'00',s.value,0)) h00
|
||||
, SUM(DECODE(s.end_interval_hour,'01',s.value,0)) h01
|
||||
, SUM(DECODE(s.end_interval_hour,'02',s.value,0)) h02
|
||||
, SUM(DECODE(s.end_interval_hour,'03',s.value,0)) h03
|
||||
, SUM(DECODE(s.end_interval_hour,'04',s.value,0)) h04
|
||||
, SUM(DECODE(s.end_interval_hour,'05',s.value,0)) h05
|
||||
, SUM(DECODE(s.end_interval_hour,'06',s.value,0)) h06
|
||||
, SUM(DECODE(s.end_interval_hour,'07',s.value,0)) h07
|
||||
, SUM(DECODE(s.end_interval_hour,'08',s.value,0)) h08
|
||||
, SUM(DECODE(s.end_interval_hour,'09',s.value,0)) h09
|
||||
, SUM(DECODE(s.end_interval_hour,'10',s.value,0)) h10
|
||||
, SUM(DECODE(s.end_interval_hour,'11',s.value,0)) h11
|
||||
, SUM(DECODE(s.end_interval_hour,'12',s.value,0)) h12
|
||||
, SUM(DECODE(s.end_interval_hour,'13',s.value,0)) h13
|
||||
, SUM(DECODE(s.end_interval_hour,'14',s.value,0)) h14
|
||||
, SUM(DECODE(s.end_interval_hour,'15',s.value,0)) h15
|
||||
, SUM(DECODE(s.end_interval_hour,'16',s.value,0)) h16
|
||||
, SUM(DECODE(s.end_interval_hour,'17',s.value,0)) h17
|
||||
, SUM(DECODE(s.end_interval_hour,'18',s.value,0)) h18
|
||||
, SUM(DECODE(s.end_interval_hour,'19',s.value,0)) h19
|
||||
, SUM(DECODE(s.end_interval_hour,'20',s.value,0)) h20
|
||||
, SUM(DECODE(s.end_interval_hour,'21',s.value,0)) h21
|
||||
, SUM(DECODE(s.end_interval_hour,'22',s.value,0)) h22
|
||||
, SUM(DECODE(s.end_interval_hour,'23',s.value,0)) h23
|
||||
FROM awr_stats s
|
||||
GROUP BY s.end_interval_day
|
||||
ORDER BY s.end_interval_day
|
||||
/
|
||||
|
||||
UNDEFINE days
|
||||
UNDEFINE INST_ID
|
||||
|
||||
|
||||
@@footer
|
||||
207
vg/awr_loadprofile_physicalreads.sql
Normal file
207
vg/awr_loadprofile_physicalreads.sql
Normal file
@@ -0,0 +1,207 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display load profile from AWR
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - No of days
|
||||
*
|
||||
* dbid and instancenumber are optional.
|
||||
* If not passes then it takes current instance's dbid and instancenumber
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 04-Apr-12 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE days
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE days="&&2"
|
||||
|
||||
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
set pages 2000
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT="999,999"
|
||||
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="'000s"
|
||||
|
||||
DEFINE BYTES_FORMAT="99999"
|
||||
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT *****************************************************
|
||||
PROMPT *** P H Y S I C A L R E A D S T R E N D ***
|
||||
PROMPT *****************************************************
|
||||
|
||||
COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14
|
||||
COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 9,999,999
|
||||
COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
|
||||
BREAK ON REPORT
|
||||
|
||||
COMPUTE MIN MAX AVG OF DayTotal ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h00 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h01 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h02 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h03 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h04 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h05 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h06 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h07 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h08 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h09 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h10 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h11 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h12 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h13 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h14 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h15 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h16 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h17 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h18 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h19 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h20 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h21 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h22 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h23 ON REPORT
|
||||
|
||||
|
||||
WITH snap
|
||||
AS
|
||||
(SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&inst_id'
|
||||
AND s.end_interval_time > TRUNC(systimestamp) - &days
|
||||
)
|
||||
, awr_stats as
|
||||
(
|
||||
SELECT TRUNC(snap.end_interval_time) end_interval_day
|
||||
, TO_CHAR(snap.end_interval_time,'hh24') end_interval_hour
|
||||
, ROUND(( GREATEST(ss2.value,NVL(ss1.value,0)) -- In case of instance bounce ss2.value will be lower than ss1.value
|
||||
- NVL(ss1.value,ss2.value) -- In cases where there is no previous snapshot, ss1.value will be null.
|
||||
) * p.value / &BYTES_DIVIDER) value_delta
|
||||
FROM snap
|
||||
, dba_hist_sysstat ss1
|
||||
, dba_hist_sysstat ss2
|
||||
, dba_hist_stat_name sn
|
||||
, v$system_parameter p
|
||||
where p.name = 'db_block_size'
|
||||
and ss1.dbid = snap.dbid
|
||||
and ss1.instance_number = snap.instance_number
|
||||
and ss1.snap_id = snap.prev_snap_id
|
||||
and ss2.dbid = snap.dbid
|
||||
and ss2.instance_number = snap.instance_number
|
||||
and ss2.snap_id = snap.snap_id
|
||||
and ss1.stat_id = ss2.stat_id
|
||||
and ss1.dbid = sn.dbid
|
||||
and ss1.stat_id = sn.stat_id
|
||||
and sn.stat_name in (
|
||||
'physical reads'
|
||||
)
|
||||
)
|
||||
SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day
|
||||
, SUM(s.value_delta) DayTotal
|
||||
, SUM(DECODE(s.end_interval_hour,'00',s.value_delta,0)) h00
|
||||
, SUM(DECODE(s.end_interval_hour,'01',s.value_delta,0)) h01
|
||||
, SUM(DECODE(s.end_interval_hour,'02',s.value_delta,0)) h02
|
||||
, SUM(DECODE(s.end_interval_hour,'03',s.value_delta,0)) h03
|
||||
, SUM(DECODE(s.end_interval_hour,'04',s.value_delta,0)) h04
|
||||
, SUM(DECODE(s.end_interval_hour,'05',s.value_delta,0)) h05
|
||||
, SUM(DECODE(s.end_interval_hour,'06',s.value_delta,0)) h06
|
||||
, SUM(DECODE(s.end_interval_hour,'07',s.value_delta,0)) h07
|
||||
, SUM(DECODE(s.end_interval_hour,'08',s.value_delta,0)) h08
|
||||
, SUM(DECODE(s.end_interval_hour,'09',s.value_delta,0)) h09
|
||||
, SUM(DECODE(s.end_interval_hour,'10',s.value_delta,0)) h10
|
||||
, SUM(DECODE(s.end_interval_hour,'11',s.value_delta,0)) h11
|
||||
, SUM(DECODE(s.end_interval_hour,'12',s.value_delta,0)) h12
|
||||
, SUM(DECODE(s.end_interval_hour,'13',s.value_delta,0)) h13
|
||||
, SUM(DECODE(s.end_interval_hour,'14',s.value_delta,0)) h14
|
||||
, SUM(DECODE(s.end_interval_hour,'15',s.value_delta,0)) h15
|
||||
, SUM(DECODE(s.end_interval_hour,'16',s.value_delta,0)) h16
|
||||
, SUM(DECODE(s.end_interval_hour,'17',s.value_delta,0)) h17
|
||||
, SUM(DECODE(s.end_interval_hour,'18',s.value_delta,0)) h18
|
||||
, SUM(DECODE(s.end_interval_hour,'19',s.value_delta,0)) h19
|
||||
, SUM(DECODE(s.end_interval_hour,'20',s.value_delta,0)) h20
|
||||
, SUM(DECODE(s.end_interval_hour,'21',s.value_delta,0)) h21
|
||||
, SUM(DECODE(s.end_interval_hour,'22',s.value_delta,0)) h22
|
||||
, SUM(DECODE(s.end_interval_hour,'23',s.value_delta,0)) h23
|
||||
FROM awr_stats s
|
||||
GROUP BY s.end_interval_day
|
||||
ORDER BY s.end_interval_day
|
||||
/
|
||||
|
||||
UNDEFINE days
|
||||
UNDEFINE INST_ID
|
||||
|
||||
|
||||
@@footer
|
||||
219
vg/awr_loadprofile_physicalwrites.sql
Normal file
219
vg/awr_loadprofile_physicalwrites.sql
Normal file
@@ -0,0 +1,219 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display load profile from AWR
|
||||
* All figures delta between two consecutive snapshots
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - No of days
|
||||
*
|
||||
* dbid and instancenumber are optional.
|
||||
* If not passes then it takes current instance's dbid and instancenumber
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 04-Apr-12 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE days
|
||||
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE days="&&2"
|
||||
|
||||
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
set pages 2000
|
||||
|
||||
DEFINE COUNT_FORMAT="999,999"
|
||||
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="'000s"
|
||||
|
||||
DEFINE BYTES_FORMAT="9999"
|
||||
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT #################################################################
|
||||
PROMPT P H Y S I C A L W R I T E S T R E N D
|
||||
PROMPT #################################################################
|
||||
|
||||
|
||||
COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14
|
||||
COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)" FORMAT 999,999
|
||||
COLUMN h00 HEADING "h00|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h01 HEADING "h01|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h02 HEADING "h02|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h03 HEADING "h03|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h04 HEADING "h04|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h05 HEADING "h05|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h06 HEADING "h06|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h07 HEADING "h07|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h08 HEADING "h08|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h09 HEADING "h09|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h10 HEADING "h10|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h11 HEADING "h11|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h12 HEADING "h12|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h13 HEADING "h13|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h14 HEADING "h14|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h15 HEADING "h15|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h16 HEADING "h16|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h17 HEADING "h17|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h18 HEADING "h18|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h19 HEADING "h19|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h20 HEADING "h20|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h21 HEADING "h21|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h22 HEADING "h22|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN h23 HEADING "h23|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
|
||||
BREAK ON REPORT
|
||||
|
||||
COMPUTE MIN MAX AVG OF DayTotal ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h00 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h01 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h02 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h03 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h04 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h05 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h06 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h07 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h08 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h09 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h10 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h11 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h12 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h13 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h14 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h15 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h16 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h17 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h18 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h19 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h20 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h21 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h22 ON REPORT
|
||||
COMPUTE MIN MAX AVG OF h23 ON REPORT
|
||||
|
||||
WITH snap
|
||||
AS
|
||||
(SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&inst_id'
|
||||
AND s.end_interval_time > TRUNC(systimestamp) - &days
|
||||
)
|
||||
, awr_stats as
|
||||
(
|
||||
SELECT TRUNC(s1.end_interval_time) end_interval_day
|
||||
, TO_CHAR(s1.end_interval_time,'hh24') end_interval_hour
|
||||
, ROUND((ss2.value - NVL(ss1.value,ss2.value))*p.value/&BYTES_DIVIDER) value
|
||||
FROM snap s1
|
||||
, dba_hist_sysstat ss1
|
||||
, dba_hist_sysstat ss2
|
||||
, dba_hist_stat_name sn
|
||||
, v$system_parameter p
|
||||
where p.name = 'db_block_size'
|
||||
and s1.dbid = ss1.dbid
|
||||
and s1.instance_number = ss1.instance_number
|
||||
and s1.prev_snap_id = ss1.snap_id
|
||||
and s1.dbid = ss2.dbid
|
||||
and s1.instance_number = ss2.instance_number
|
||||
and s1.snap_id = ss2.snap_id
|
||||
and ss1.stat_id = ss2.stat_id
|
||||
and ss1.dbid = sn.dbid
|
||||
and ss1.stat_id = sn.stat_id
|
||||
and sn.stat_name in (
|
||||
'physical writes'
|
||||
/*
|
||||
'redo size'
|
||||
,'session logical reads'
|
||||
,'db block changes'
|
||||
,'physical reads'
|
||||
,'physical writes'
|
||||
,'user calls'
|
||||
,'parse count (total)'
|
||||
,'parse count (hard)'
|
||||
,'sorts (memory)'
|
||||
,'sorts (disk)'
|
||||
,'logons cumulative'
|
||||
,'execute count'
|
||||
,'user commits'
|
||||
,'user rollbacks'
|
||||
*/
|
||||
)
|
||||
)
|
||||
SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day
|
||||
, SUM(s.value) DayTotal
|
||||
, SUM(DECODE(s.end_interval_hour,'00',s.value,0)) h00
|
||||
, SUM(DECODE(s.end_interval_hour,'01',s.value,0)) h01
|
||||
, SUM(DECODE(s.end_interval_hour,'02',s.value,0)) h02
|
||||
, SUM(DECODE(s.end_interval_hour,'03',s.value,0)) h03
|
||||
, SUM(DECODE(s.end_interval_hour,'04',s.value,0)) h04
|
||||
, SUM(DECODE(s.end_interval_hour,'05',s.value,0)) h05
|
||||
, SUM(DECODE(s.end_interval_hour,'06',s.value,0)) h06
|
||||
, SUM(DECODE(s.end_interval_hour,'07',s.value,0)) h07
|
||||
, SUM(DECODE(s.end_interval_hour,'08',s.value,0)) h08
|
||||
, SUM(DECODE(s.end_interval_hour,'09',s.value,0)) h09
|
||||
, SUM(DECODE(s.end_interval_hour,'10',s.value,0)) h10
|
||||
, SUM(DECODE(s.end_interval_hour,'11',s.value,0)) h11
|
||||
, SUM(DECODE(s.end_interval_hour,'12',s.value,0)) h12
|
||||
, SUM(DECODE(s.end_interval_hour,'13',s.value,0)) h13
|
||||
, SUM(DECODE(s.end_interval_hour,'14',s.value,0)) h14
|
||||
, SUM(DECODE(s.end_interval_hour,'15',s.value,0)) h15
|
||||
, SUM(DECODE(s.end_interval_hour,'16',s.value,0)) h16
|
||||
, SUM(DECODE(s.end_interval_hour,'17',s.value,0)) h17
|
||||
, SUM(DECODE(s.end_interval_hour,'18',s.value,0)) h18
|
||||
, SUM(DECODE(s.end_interval_hour,'19',s.value,0)) h19
|
||||
, SUM(DECODE(s.end_interval_hour,'20',s.value,0)) h20
|
||||
, SUM(DECODE(s.end_interval_hour,'21',s.value,0)) h21
|
||||
, SUM(DECODE(s.end_interval_hour,'22',s.value,0)) h22
|
||||
, SUM(DECODE(s.end_interval_hour,'23',s.value,0)) h23
|
||||
FROM awr_stats s
|
||||
GROUP BY s.end_interval_day
|
||||
ORDER BY s.end_interval_day
|
||||
/
|
||||
|
||||
UNDEFINE days
|
||||
UNDEFINE INST_ID
|
||||
|
||||
|
||||
@@footer
|
||||
212
vg/awr_osstat.sql
Normal file
212
vg/awr_osstat.sql
Normal file
@@ -0,0 +1,212 @@
|
||||
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display hourly OS Statistics from AWR
|
||||
*
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - Statistics Name (Exact Name, use @osstatname script to find exact name)
|
||||
*
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 20-Feb-15 Vishal Gupta Change input parameter order
|
||||
* 25-May-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE STAT_NAME="&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
DEFINE INST_ID="&&4"
|
||||
|
||||
|
||||
DEFINE IF_NON_CUMULATIVE_VALUE="--"
|
||||
DEFINE IF_CUMULATIVE_VALUE="--"
|
||||
|
||||
set term off
|
||||
|
||||
COLUMN "_STAT_NAME" new_value STAT_NAME NOPRINT
|
||||
COLUMN "_FROM_TIMESTAMP" new_value FROM_TIMESTAMP NOPRINT
|
||||
COLUMN "_TO_TIMESTAMP" new_value TO_TIMESTAMP NOPRINT
|
||||
COLUMN "_INST_ID" new_value INST_ID NOPRINT
|
||||
|
||||
SELECT DECODE('&&STAT_NAME','','BUSY_TIME','&&STAT_NAME') "_STAT_NAME"
|
||||
, DECODE('&&FROM_TIMESTAMP','',TO_CHAR(sysdate - 1,'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIMESTAMP') "_FROM_TIMESTAMP"
|
||||
, DECODE('&&TO_TIMESTAMP','',TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIMESTAMP') "_TO_TIMESTAMP"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
FROM DUAL
|
||||
;
|
||||
|
||||
COLUMN "_IF_CUMULATIVE_VALUE" new_value IF_CUMULATIVE_VALUE NOPRINT
|
||||
COLUMN "_IF_NON_CUMULATIVE_VALUE" new_value IF_NON_CUMULATIVE_VALUE NOPRINT
|
||||
|
||||
SELECT DECODE(cumulative,'YES','','--') "_IF_CUMULATIVE_VALUE"
|
||||
, DECODE(cumulative,'NO','','--') "_IF_NON_CUMULATIVE_VALUE"
|
||||
FROM v$osstat
|
||||
WHERE stat_name = '&&STAT_NAME'
|
||||
;
|
||||
|
||||
COLUMN "_HEADING" new_value "HEADING" NOPRINT
|
||||
COLUMN "_DIVIDER" new_value "DIVIDER" NOPRINT
|
||||
COLUMN "_STAT_DESCRIPTION" new_value "STAT_DESCRIPTION" NOPRINT
|
||||
|
||||
SELECT DECODE('&&STAT_NAME'
|
||||
,'BUSY_TIME','(s)'
|
||||
,'USER_TIME','(s)'
|
||||
,'IOWAIT_TIME','(s)'
|
||||
,'SYS_TIME','(s)'
|
||||
,'IDLE_TIME','(s)'
|
||||
,'NICE_TIME','(s)'
|
||||
,'RSRC_MGR_CPU_WAIT_TIME','(s)'
|
||||
,'VM_IN_BYTES','MB'
|
||||
,'VM_OUT_BYTES','MB'
|
||||
,''
|
||||
) "_HEADING"
|
||||
, DECODE('&&STAT_NAME'
|
||||
,'BUSY_TIME','100'
|
||||
,'USER_TIME','100'
|
||||
,'IOWAIT_TIME','100'
|
||||
,'SYS_TIME','100'
|
||||
,'IDLE_TIME','100'
|
||||
,'NICE_TIME','100'
|
||||
,'RSRC_MGR_CPU_WAIT_TIME','100'
|
||||
,'VM_IN_BYTES','power(1024,2)'
|
||||
,'VM_OUT_BYTES','power(1024,2)'
|
||||
,1
|
||||
) "_DIVIDER"
|
||||
, DECODE('&&STAT_NAME'
|
||||
,'BUSY_TIME','Time stat CPUs have been in busy state'
|
||||
,'USER_TIME','Time spent in user code'
|
||||
,'IOWAIT_TIME','Time spent waiting for IO'
|
||||
,'SYS_TIME','Time spent in the kernel'
|
||||
,'IDLE_TIME','Time that CPUs have been in idle state'
|
||||
,'NICE_TIME','100'
|
||||
,'RSRC_MGR_CPU_WAIT_TIME','100'
|
||||
,'VM_IN_BYTES','power(1024,2)'
|
||||
,'VM_OUT_BYTES','power(1024,2)'
|
||||
,''
|
||||
) "_STAT_DESCRIPTION"
|
||||
FROM v$osstat
|
||||
WHERE stat_name = '&&STAT_NAME'
|
||||
;
|
||||
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
set pages 50000
|
||||
|
||||
DEFINE FORMAT="999,999,999,999"
|
||||
DEFINE TOTAL_FORMAT="999,999,999,999"
|
||||
|
||||
DEFINE HEADING="#"
|
||||
DEFINE DIVIDER="1"
|
||||
--DEFINE HEADING="'1000s"
|
||||
--DEFINE DIVIDER="1000"
|
||||
|
||||
--DEFINE HEADING="min"
|
||||
--DEFINE DIVIDER="60/100"
|
||||
--DEFINE HEADING="hr"
|
||||
--DEFINE DIVIDER="60/60/100"
|
||||
|
||||
--DEFINE HEADING="'KB"
|
||||
--DEFINE DIVIDER="1024"
|
||||
--DEFINE HEADING="'MB"
|
||||
--DEFINE DIVIDER="1024/1024"
|
||||
--DEFINE HEADING="'GB"
|
||||
--DEFINE DIVIDER="1024/1024/1024"
|
||||
|
||||
PROMPT
|
||||
PROMPT #############################################################################
|
||||
PROMPT # AWR Operation System Statistics
|
||||
PROMPT #
|
||||
PROMPT # From AWR Repository
|
||||
PROMPT # - Statistic Name - "&&STAT_NAME" - &&STAT_DESCRIPTION
|
||||
PROMPT # - From Timestamp - "&&FROM_TIMESTAMP" (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT # - To Timestamp - "&&TO_TIMESTAMP" (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT # - For Instance ID - "&&INST_ID"
|
||||
PROMPT #############################################################################
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT A15
|
||||
COLUMN all_inst_value HEADING "All Inst|Value" FORMAT &&TOTAL_FORMAT
|
||||
COLUMN inst1_value HEADING "Inst 1|Value" FORMAT &&FORMAT
|
||||
COLUMN inst2_value HEADING "Inst 2|Value" FORMAT &&FORMAT
|
||||
COLUMN inst3_value HEADING "Inst 3|Value" FORMAT &&FORMAT
|
||||
COLUMN inst4_value HEADING "Inst 4|Value" FORMAT &&FORMAT
|
||||
COLUMN inst5_value HEADING "Inst 5|Value" FORMAT &&FORMAT
|
||||
COLUMN inst6_value HEADING "Inst 6|Value" FORMAT &&FORMAT
|
||||
COLUMN inst7_value HEADING "Inst 7|Value" FORMAT &&FORMAT
|
||||
COLUMN inst8_value HEADING "Inst 8|Value" FORMAT &&FORMAT
|
||||
|
||||
WITH snap
|
||||
AS
|
||||
(SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
SELECT /*+ USE_NL(s1 ss1 ss_prev) */
|
||||
TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(ss.value - LEAST(ss_prev.value,ss.value)) / &&DIVIDER ) all_inst_value
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,1,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst1_value
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,2,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst2_value
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,3,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst3_value
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,4,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst4_value
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,5,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst5_value
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,6,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst6_value
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,7,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst7_value
|
||||
&&IF_CUMULATIVE_VALUE , ROUND(SUM(DECODE(ss.instance_number,8,(ss.value - LEAST(ss_prev.value,ss.value)),0)) / &&DIVIDER ) inst8_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(ss.value) / &&DIVIDER ) all_inst_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,1,ss.value,0)) / &&DIVIDER ) inst1_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,2,ss.value,0)) / &&DIVIDER ) inst2_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,3,ss.value,0)) / &&DIVIDER ) inst3_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,4,ss.value,0)) / &&DIVIDER ) inst4_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,5,ss.value,0)) / &&DIVIDER ) inst5_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,6,ss.value,0)) / &&DIVIDER ) inst6_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,7,ss.value,0)) / &&DIVIDER ) inst7_value
|
||||
&&IF_NON_CUMULATIVE_VALUE , ROUND(MAX(DECODE(ss.instance_number,8,ss.value,0)) / &&DIVIDER ) inst8_value
|
||||
FROM snap s
|
||||
, dba_hist_osstat ss
|
||||
, dba_hist_osstat ss_prev
|
||||
where s.next_snap_id IS NOT NULL
|
||||
and s.dbid = ss_prev.dbid
|
||||
and s.instance_number = ss_prev.instance_number
|
||||
and s.snap_id = ss_prev.snap_id
|
||||
and s.dbid = ss.dbid
|
||||
and s.instance_number = ss.instance_number
|
||||
and s.next_snap_id = ss.snap_id
|
||||
and ss_prev.stat_name = ss.stat_name
|
||||
and ss.stat_name = '&&STAT_NAME'
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI') asc
|
||||
;
|
||||
|
||||
|
||||
UNDEFINE IF_NON_CUMULATIVE_VALUE
|
||||
UNDEFINE IF_CUMULATIVE_VALUE
|
||||
|
||||
|
||||
@@footer
|
||||
97
vg/awr_parameter.sql
Normal file
97
vg/awr_parameter.sql
Normal file
@@ -0,0 +1,97 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display database parameter changes from AWR Repository
|
||||
* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character)
|
||||
* 2 - Instance Number ( Use % to query for all instances)
|
||||
* 3 - Number of days to query ( Default 30)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 05-Jul-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
VARIABLE PARAM_NAME VARCHAR2(100)
|
||||
VARIABLE INST_ID VARCHAR2(100)
|
||||
VARIABLE DAYS VARCHAR2(100)
|
||||
VARIABLE WHERECLAUSE VARCHAR2(4000)
|
||||
|
||||
BEGIN
|
||||
:PARAM_NAME:= '&&1';
|
||||
:INST_ID := '&&2';
|
||||
:DAYS := '&&3';
|
||||
:WHERECLAUSE := '&&4';
|
||||
:PARAM_NAME := CASE WHEN NVL(:PARAM_NAME,'x') = 'x' THEN '%' ELSE :PARAM_NAME END;
|
||||
:INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END;
|
||||
:DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '7' ELSE :DAYS END;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
set head off
|
||||
SELECT '**********************************************' || chr(10) ||
|
||||
'* init.ora Parameter Change History' || chr(10) ||
|
||||
'* (From AWR Repository)' || chr(10) ||
|
||||
'*' || chr(10) ||
|
||||
'* Input Parameters' || chr(10) ||
|
||||
'* - Parameter Name = "' || :PARAM_NAME || '"' || chr(10) ||
|
||||
'* - Instance# = "' || :INST_ID || '"' || chr(10) ||
|
||||
'* - Days = "' || :DAYS || '"' || chr(10) ||
|
||||
'**********************************************' || chr(10) ||
|
||||
''
|
||||
FROM DUAL;
|
||||
set head on
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "Snapshot Time" FORMAT a18
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN parameter_name HEADING "ParameterName" FORMAT a31
|
||||
COLUMN value HEADING "Current Value" FORMAT a50
|
||||
COLUMN prev_value HEADING "Previous Value" FORMAT a50
|
||||
|
||||
|
||||
select TO_CHAR(a.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time
|
||||
, a.instance_number
|
||||
, a.parameter_name
|
||||
--, a.ordinal
|
||||
, a.value
|
||||
, a.prev_value
|
||||
FROM
|
||||
(SELECT /*+ LEADING(s pn) parallel(s,4) parallel(pn,4) */
|
||||
s.end_interval_time
|
||||
, p.instance_number
|
||||
, p.parameter_name
|
||||
, p.VALUE
|
||||
, lag(p.VALUE) OVER (PARTITION BY p.dbid, p.instance_number, p.parameter_hash
|
||||
ORDER BY p.dbid, p.snap_id, p.instance_number, p.parameter_hash) prev_value
|
||||
FROM v$database d
|
||||
JOIN dba_hist_snapshot s ON s.dbid = d.dbid
|
||||
JOIN dba_hist_parameter p ON p.dbid = s.dbid AND p.snap_id = s.snap_id AND p.instance_number = s.instance_number
|
||||
WHERE 1=1
|
||||
AND s.instance_number LIKE :INST_ID
|
||||
AND s.end_interval_time > SYSDATE - :DAYS - (5/24) -- Check for 5 extra hours in past
|
||||
AND p.parameter_name LIKE :PARAM_NAME
|
||||
--AND REPLACE(p.parameter_name,'_','!') NOT LIKE '!!%' -- Filter AMM or ASMM modified parameters if in AWR.
|
||||
AND p.parameter_name NOT LIKE '\_\_%' ESCAPE '\' -- Filter AMM or ASMM modified parameters if in AWR.
|
||||
AND p.parameter_name NOT IN ('service_names')
|
||||
AND NVL(p.VALUE,'x') NOT LIKE '%SYS.KUPC$%' -- Ignore DataPump export/import service name change
|
||||
) a
|
||||
WHERE 1=1
|
||||
AND LOWER(NVL(a.value,'x')) <> LOWER(NVL(a.prev_value,'x'))
|
||||
AND a.end_interval_time > sysdate - :DAYS
|
||||
ORDER BY TO_DATE(TO_CHAR(a.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
|
||||
, a.parameter_name
|
||||
, a.instance_number
|
||||
;
|
||||
|
||||
@@footer
|
||||
105
vg/awr_parameter2.sql
Normal file
105
vg/awr_parameter2.sql
Normal file
@@ -0,0 +1,105 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display database parameter changes from AWR Repository
|
||||
* Parameters : 1 - Parameter Name (Use % as wild card and \ as escape character)
|
||||
* 2 - Instance Number ( Use % to query for all instances)
|
||||
* 3 - Number of days to query ( Default 30)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-Nov-13 Vishal Gupta Modified to use multiple value view
|
||||
* (DBA_HIST_PARAMETER -> DBA_HIST_MVPARAMETER)
|
||||
* 05-Jul-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
VARIABLE PARAM_NAME VARCHAR2(100)
|
||||
VARIABLE INST_ID VARCHAR2(100)
|
||||
VARIABLE DAYS VARCHAR2(100)
|
||||
|
||||
BEGIN
|
||||
:PARAM_NAME:= '&&1';
|
||||
:INST_ID := '&&2';
|
||||
:DAYS := '&&3';
|
||||
:PARAM_NAME := CASE WHEN NVL(:PARAM_NAME,'x') = 'x' THEN '%' ELSE :PARAM_NAME END;
|
||||
:INST_ID := CASE WHEN NVL(:INST_ID,'x') = 'x' THEN '%' ELSE :INST_ID END;
|
||||
:DAYS := CASE WHEN NVL(:DAYS,'x') = 'x' THEN '7' ELSE :DAYS END;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
set head off
|
||||
SELECT '**********************************************' || chr(10) ||
|
||||
'* init.ora Parameter Change History' || chr(10) ||
|
||||
'* (From AWR Repository)' || chr(10) ||
|
||||
'*' || chr(10) ||
|
||||
'* Input Parameters' || chr(10) ||
|
||||
'* - Parameter Name = "' || :PARAM_NAME || '"' || chr(10) ||
|
||||
'* - Instance# = "' || :INST_ID || '"' || chr(10) ||
|
||||
'* - Days = "' || :DAYS || '"' || chr(10) ||
|
||||
'**********************************************' || chr(10) ||
|
||||
''
|
||||
FROM DUAL;
|
||||
set head on
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "Snapshot Time" FORMAT a18
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN parameter_name HEADING "ParameterName" FORMAT a30
|
||||
COLUMN value HEADING "Current Value" FORMAT a50
|
||||
COLUMN prev_value HEADING "Previous Value" FORMAT a50
|
||||
|
||||
|
||||
WITH snapshots
|
||||
AS
|
||||
(
|
||||
SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, s.end_interval_time
|
||||
, lag(s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number
|
||||
ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
FROM v$database d
|
||||
JOIN dba_hist_snapshot s ON s.dbid = d.dbid
|
||||
WHERE s.end_interval_time > SYSDATE - :DAYS - 5/24 -- Check for 5 extra hours in past
|
||||
AND s.instance_number LIKE :INST_ID
|
||||
)
|
||||
select TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time
|
||||
, p.instance_number
|
||||
, pn.parameter_name
|
||||
--, p.ordinal
|
||||
, p.VALUE
|
||||
, prev.value prev_value
|
||||
FROM snapshots s
|
||||
JOIN dba_hist_parameter_name pn ON s.dbid = pn.dbid
|
||||
-- multi value parameter view
|
||||
LEFT OUTER JOIN dba_hist_mvparameter prev ON prev.dbid = s.dbid
|
||||
AND prev.instance_number = s.instance_number
|
||||
AND prev.snap_id = s.prev_snap_id
|
||||
AND prev.parameter_hash = pn.parameter_hash
|
||||
OUTER JOIN dba_hist_mvparameter p ON p.dbid = s.dbid
|
||||
AND p.instance_number = s.instance_number
|
||||
AND p.snap_id = s.snap_id
|
||||
AND p.parameter_hash = pn.parameter_hash
|
||||
AND NVL(p.value,'x') = NVL(prev.value,'x')
|
||||
WHERE NVL(pn.parameter_name,'x') LIKE :PARAM_NAME
|
||||
--AND REPLACE(pn.parameter_name,'_','!') NOT LIKE '!!%' -- Filter AMM or ASMM modified parameters if in AWR.
|
||||
AND pn.parameter_name NOT LIKE '\_\_%' ESCAPE '\' -- Filter AMM or ASMM modified parameters if in AWR.
|
||||
AND NVL(p.VALUE,'x') NOT LIKE '%SYS.KUPC$%' -- Ignore DataPump export/import service name change
|
||||
AND NVL(p.value,'x') <> NVL(prev.value,'x')
|
||||
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
|
||||
, pn.parameter_name
|
||||
, s.instance_number
|
||||
;
|
||||
|
||||
@@footer
|
||||
121
vg/awr_pga_stats_by_statname.sql
Normal file
121
vg/awr_pga_stats_by_statname.sql
Normal file
@@ -0,0 +1,121 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display PGA statistics
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - PGA Statistics Name (For exact name, use @pga_stats script to find exact name)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 27-Jun-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
DEFINE STAT_NAME="&4"
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
set pages 50000
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ***************************************************
|
||||
PROMPT * PGA Statistics from AWR
|
||||
PROMPT *
|
||||
PROMPT * From AWR Repository
|
||||
PROMPT * - For Instance ID - &INST_ID
|
||||
PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT * - Statistic Name - "&&STAT_NAME"
|
||||
PROMPT ***************************************************
|
||||
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT a18
|
||||
COLUMN name HEADING "Name" FORMAT a40
|
||||
COLUMN unit HEADING "Unit" FORMAT a10
|
||||
COLUMN all_inst_value HEADING "AllInst" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst1_value HEADING "Inst1" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst2_value HEADING "Inst2" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst3_value HEADING "Inst3" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst4_value HEADING "Inst4" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst5_value HEADING "Inst5" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst6_value HEADING "Inst6" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst7_value HEADING "Inst7" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst8_value HEADING "Inst8" FORMAT &&COUNT_FORMAT
|
||||
|
||||
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, p.name
|
||||
, DECODE(pn.unit
|
||||
, 'bytes','&&BYTES_HEADING'
|
||||
, pn.unit) unit
|
||||
, SUM(DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value)) all_inst_value
|
||||
, SUM(DECODE(p.instance_number, 1, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst1_value
|
||||
, SUM(DECODE(p.instance_number, 2, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst2_value
|
||||
, SUM(DECODE(p.instance_number, 3, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst3_value
|
||||
, SUM(DECODE(p.instance_number, 4, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst4_value
|
||||
, SUM(DECODE(p.instance_number, 5, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst5_value
|
||||
, SUM(DECODE(p.instance_number, 6, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst6_value
|
||||
, SUM(DECODE(p.instance_number, 7, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst7_value
|
||||
, SUM(DECODE(p.instance_number, 8, DECODE(pn.unit,'bytes',p.value/&&BYTES_DIVIDER,p.value))) inst8_value
|
||||
FROM dba_hist_pgastat p
|
||||
, dba_hist_snapshot s
|
||||
, v$pgastat pn
|
||||
WHERE p.dbid = s.dbid
|
||||
AND p.instance_number = s.instance_number
|
||||
AND p.snap_id = s.snap_id
|
||||
AND p.name = pn.name
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
|
||||
AND p.name = '&&STAT_NAME'
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
, p.name
|
||||
, pn.unit
|
||||
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
|
||||
, p.name
|
||||
, pn.unit
|
||||
;
|
||||
|
||||
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE TO_TIMESTAMP
|
||||
UNDEFINE STAT_NAME
|
||||
|
||||
|
||||
@@footer
|
||||
136
vg/awr_pga_stats_delta_by_statname.sql
Normal file
136
vg/awr_pga_stats_delta_by_statname.sql
Normal file
@@ -0,0 +1,136 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display PGA statistics
|
||||
* Parameter : 1 - InstanceNumber (Use % for all instances)
|
||||
* 2 - From Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 3 - To Timestamp (In YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - PGA Statistics Name (For exact name, use @pga_stats script to find exact name)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 27-Jun-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE INST_ID="&&1"
|
||||
DEFINE FROM_TIMESTAMP="&2"
|
||||
DEFINE TO_TIMESTAMP="&3"
|
||||
DEFINE STAT_NAME="&4"
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
set pages 50000
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ***************************************************
|
||||
PROMPT * P G A S T A T I S T I C S
|
||||
PROMPT *
|
||||
PROMPT * From AWR Repository (Delta Figures)
|
||||
PROMPT * - For Instance ID - &INST_ID
|
||||
PROMPT * - Between &&FROM_TIMESTAMP and &&TO_TIMESTAMP (YYYY-MM-DD HH24:MI:SS)
|
||||
PROMPT * - Statistic Name - "&&STAT_NAME"
|
||||
PROMPT ***************************************************
|
||||
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT a18
|
||||
COLUMN name HEADING "Name" FORMAT a40
|
||||
COLUMN unit HEADING "Unit" FORMAT a10
|
||||
COLUMN all_inst_value HEADING "AllInst" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst1_value HEADING "Inst1" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst2_value HEADING "Inst2" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst3_value HEADING "Inst3" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst4_value HEADING "Inst4" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst5_value HEADING "Inst5" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst6_value HEADING "Inst6" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst7_value HEADING "Inst7" FORMAT &&COUNT_FORMAT
|
||||
COLUMN inst8_value HEADING "Inst8" FORMAT &&COUNT_FORMAT
|
||||
|
||||
WITH snap
|
||||
AS
|
||||
(SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LEAD (s.snap_id) OVER (ORDER BY s.dbid, s.instance_number, s.snap_id) next_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE s.dbid = d.dbid
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIMESTAMP','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&TO_TIMESTAMP' ,'YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, p.name
|
||||
, DECODE(pn.unit
|
||||
, 'bytes','&&BYTES_HEADING'
|
||||
, pn.unit) unit
|
||||
, SUM(DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value)))) all_inst_value
|
||||
, SUM(DECODE(p.instance_number, 1, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst1_value
|
||||
, SUM(DECODE(p.instance_number, 2, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst2_value
|
||||
, SUM(DECODE(p.instance_number, 3, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst3_value
|
||||
, SUM(DECODE(p.instance_number, 4, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst4_value
|
||||
, SUM(DECODE(p.instance_number, 5, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst5_value
|
||||
, SUM(DECODE(p.instance_number, 6, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst6_value
|
||||
, SUM(DECODE(p.instance_number, 7, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst7_value
|
||||
, SUM(DECODE(p.instance_number, 8, DECODE(pn.unit,'bytes',(p.value - LEAST(p_prev.value,p.value))/&&BYTES_DIVIDER,(p.value - LEAST(p_prev.value,p.value))))) inst8_value
|
||||
FROM snap s
|
||||
, dba_hist_pgastat p
|
||||
, dba_hist_pgastat p_prev
|
||||
, v$pgastat pn
|
||||
WHERE p.dbid = s.dbid
|
||||
AND p.instance_number = s.instance_number
|
||||
AND p.snap_id = s.next_snap_id
|
||||
AND p.name = pn.name
|
||||
AND p_prev.dbid = s.dbid
|
||||
AND p_prev.instance_number = s.instance_number
|
||||
AND p_prev.snap_id = s.snap_id
|
||||
AND p_prev.name = pn.name
|
||||
AND p_prev.name = p.name
|
||||
AND p.name = '&&STAT_NAME'
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
, p.name
|
||||
, pn.unit
|
||||
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
|
||||
, p.name
|
||||
, pn.unit
|
||||
;
|
||||
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE FROM_TIMESTAMP
|
||||
UNDEFINE TO_TIMESTAMP
|
||||
UNDEFINE STAT_NAME
|
||||
|
||||
@@footer
|
||||
112
vg/awr_pgausage.sql
Normal file
112
vg/awr_pgausage.sql
Normal file
@@ -0,0 +1,112 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display instance level PGA usage from AWR Repository
|
||||
* Compability: 10.x, 11.x
|
||||
* Parameters : 1 - DAYS - Default Value - 7
|
||||
* 2 - INST_ID - Default Value - %, (Use % as wildcard)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 30-Sep-13 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DAYS
|
||||
UNDEFINE INST_ID
|
||||
|
||||
DEFINE DAYS="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
|
||||
|
||||
set term off
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _DAYS NEW_VALUE DAYS NOPRINT
|
||||
SELECT TRIM(DECODE('&&DAYS','',7,'&&DAYS')) "_DAYS"
|
||||
, DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE BYTES_LARGE_FORMAT="9,999,999"
|
||||
DEFINE BYTES_FORMAT="99,999"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
|
||||
|
||||
|
||||
PROMPT *-------------------------------------------------------------------*
|
||||
PROMPT * I N S T A N C E L E V E L P G A U S A G E S U M M A R Y *
|
||||
PROMPT * (From AWR Repository) *
|
||||
PROMPT * *
|
||||
PROMPT * Input Parameters *
|
||||
PROMPT * - Days = '&&DAYS'
|
||||
PROMPT * - INST_ID = '&&INST_ID'
|
||||
PROMPT *-------------------------------------------------------------------*
|
||||
|
||||
|
||||
COLUMN seperator HEADING "!|!|!" FORMAT a1
|
||||
|
||||
COLUMN total_allocated HEADING "Total|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT
|
||||
COLUMN freeable_allocated HEADING "Freeable|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_allocated HEADING "SQL|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN plsql_allocated HEADING "PL/SQL|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN olap_allocated HEADING "OLAP|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN java_allocated HEADING "Java|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN other_allocated HEADING "Other|Alloc|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
|
||||
COLUMN total_used HEADING "Total|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_LARGE_FORMAT
|
||||
COLUMN freeable_used HEADING "Freeable|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_used HEADING "SQL|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN plsql_used HEADING "PL/SQL|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN olap_used HEADING "OLAP|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN java_used HEADING "Java|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN other_used HEADING "Other|Used|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
|
||||
COLUMN instance_number HEADING "Instance" FORMAT 9999999
|
||||
|
||||
SELECT /*+ USE_NL(d s p) */
|
||||
TO_CHAR(TRUNC(s.end_interval_time,'MI'),'DD-MON-YY HH24:MI') end_interval_time
|
||||
, s.instance_number
|
||||
, ROUND(SUM(p.allocated_total)/ &&BYTES_DIVIDER) total_allocated
|
||||
, ROUND(SUM(p.used_total)/ &&BYTES_DIVIDER) total_used
|
||||
, ROUND(MAX(DECODE(p.category,'Freeable',p.allocated_total,0))/ &&BYTES_DIVIDER) freeable_allocated
|
||||
, ROUND(MAX(DECODE(p.category,'Freeable',p.used_total,0))/ &&BYTES_DIVIDER) freeable_used
|
||||
, ROUND(MAX(DECODE(p.category,'SQL',p.allocated_total,0))/ &&BYTES_DIVIDER) sql_allocated
|
||||
, ROUND(MAX(DECODE(p.category,'SQL',p.used_total,0))/ &&BYTES_DIVIDER) sql_used
|
||||
, ROUND(MAX(DECODE(p.category,'PL/SQL',p.allocated_total,0))/ &&BYTES_DIVIDER) plsql_allocated
|
||||
, ROUND(MAX(DECODE(p.category,'PL/SQL',p.used_total,0))/ &&BYTES_DIVIDER) plsql_used
|
||||
, ROUND(MAX(DECODE(p.category,'OLAP',p.allocated_total,0))/ &&BYTES_DIVIDER) olap_allocated
|
||||
, ROUND(MAX(DECODE(p.category,'OLAP',p.used_total,0))/ &&BYTES_DIVIDER) olap_used
|
||||
, ROUND(MAX(DECODE(p.category,'Other',p.allocated_total,0))/ &&BYTES_DIVIDER) other_allocated
|
||||
, ROUND(MAX(DECODE(p.category,'Other',p.used_total,0))/ &&BYTES_DIVIDER) other_used
|
||||
FROM dba_hist_snapshot s
|
||||
JOIN v$database d ON s.dbid = d.dbid
|
||||
JOIN dba_hist_process_mem_summary p ON p.dbid = s.dbid
|
||||
AND p.instance_number = s.instance_number
|
||||
AND p.snap_id = s.snap_id
|
||||
WHERE s.end_interval_time > sysdate - &&DAYS
|
||||
AND s.instance_number LIKE '&&INST_ID'
|
||||
GROUP BY TRUNC(s.end_interval_time,'MI')
|
||||
, s.instance_number
|
||||
ORDER BY TRUNC(s.end_interval_time,'MI')
|
||||
, s.instance_number
|
||||
;
|
||||
|
||||
@@footer
|
||||
488
vg/awr_queries.sql
Normal file
488
vg/awr_queries.sql
Normal file
@@ -0,0 +1,488 @@
|
||||
/*
|
||||
**********************************************
|
||||
AWR Queries
|
||||
**********************************************
|
||||
Contents
|
||||
- AWR SQL Stats Query
|
||||
- AWR SQL Statistics (Daily/Weekly/Monthly Totals)
|
||||
- AWR Segment Statistics Query
|
||||
- AWR Active Session History (ASH) queries
|
||||
- AWR ASH Largest TEMP and PGA Users
|
||||
|
||||
*/
|
||||
|
||||
--**************************************************
|
||||
-- AWR SQL Stats Query
|
||||
--**************************************************
|
||||
SELECT s.end_interval_time
|
||||
, ss.instance_number
|
||||
, ss.sql_id
|
||||
, (ss.elapsed_time_total/1000000) "ElapsedTime (Total)"
|
||||
, (ss.elapsed_time_total/1000000) / ss.executions_total "ElapsedTime/Exec"
|
||||
, ss.executions_total
|
||||
, ss.parsing_schema_name
|
||||
, ss.*
|
||||
FROM dba_hist_sqlstat ss
|
||||
JOIN dba_hist_snapshot s ON s.dbid = ss.dbid AND s.instance_number = ss.instance_number AND s.snap_id = ss.snap_id
|
||||
JOIN v$database d ON d.dbid = s.dbid
|
||||
WHERE 1=1
|
||||
-- AND s.end_interval_time BETWEEN TO_TIMESTAMP('2012-04-10 00:00:00','YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2012-10-18 00:00:00','YYYY-MM-DD HH24:MI:SS')
|
||||
-- AND ss.sql_id = ''
|
||||
-- AND upper(ss.module) like upper('bum%')
|
||||
-- AND upper(ss.action) like upper('%%')
|
||||
-- AND ss.sql_profile IS NOT NULL
|
||||
-- AND ss.parsing_schema_name LIKE '%%'
|
||||
-- AND (ss.elapsed_time_total/1000000) / ss.executions_total > 10 -- ElapsedTime/Exec > 10s
|
||||
-- AND ss.executions_delta > 0
|
||||
-- AND (ss.elapsed_time_total/1000000) > 100
|
||||
--ORDER BY (ss.elapsed_time_total/1000000) / ss.executions_total DESC
|
||||
ORDER BY (ss.elapsed_time_total/1000000) DESC
|
||||
;
|
||||
|
||||
|
||||
-- **********************************************
|
||||
-- AWR SQL Statistics (Daily/Weekly/Monthly Totals)
|
||||
-- **********************************************
|
||||
|
||||
SELECT TO_CHAR(s.end_interval_time,'YYYY-MM-DD') "Day" /* Daily */
|
||||
--SELECT TO_CHAR(s.end_interval_time,'IYYY-IW') "Week" /* Weekly */
|
||||
--SELECT TO_CHAR(s.end_interval_time,'YYYY-MM') "Month" /* Monthly */
|
||||
, ss.sql_id "SQLId"
|
||||
, MIN(s.end_interval_time) "StartTimestamp"
|
||||
, MAX(s.end_interval_time) "EndTimeStamp"
|
||||
, ROUND(SUM(ss.executions_delta)) "Executions"
|
||||
, ROUND(SUM(ss.iowait_delta/1000000)) "IO Wait (Sec)"
|
||||
, ROUND(SUM(ss.apwait_delta/1000000)) "App Wait (Sec)"
|
||||
, ROUND(SUM(ss.ccwait_delta/1000000)) "Concurrency Wait (Sec)"
|
||||
, ROUND(SUM(ss.clwait_delta/1000000)) "Cluster Wait (Sec)"
|
||||
, ROUND(SUM(ss.plsexec_time_delta/1000000)) "PL/SQL Exec (Sec)"
|
||||
, ROUND(SUM(ss.cpu_time_delta/1000000)) "CPU Time (Sec)"
|
||||
, ROUND(SUM(ss.elapsed_time_delta/1000000)) "Elapsed Time (Sec)"
|
||||
, ROUND(SUM(ss.rows_processed_delta)) "RowsProcessed (#)"
|
||||
, ROUND(SUM(ss.sorts_delta)) "Sorts"
|
||||
, ROUND(SUM(ss.buffer_gets_delta)) "Buffer Gets"
|
||||
, ROUND(SUM(ss.direct_writes_delta)/1024/1024/1024) "DirectWrite (GB)"
|
||||
, ROUND(SUM(ss.physical_read_bytes_delta)/1024/1024/1024) "PhyReads (GB)"
|
||||
, ROUND(SUM(ss.physical_write_bytes_delta)/1024/1024/1024) "PhyWrites (GB)"
|
||||
, ROUND(SUM(ss.optimized_physical_reads_delta)/1024/1024/1024) "PhyReads Optimized (GB)"
|
||||
, ROUND(SUM(ss.io_offload_elig_bytes_delta)/1024/1024/1024) "PhyReads IO Offload Elig (GB)"
|
||||
, ROUND(SUM(ss.io_offload_return_bytes_delta)/1024/1024/1024) "PhyReads Offload Return (GB)"
|
||||
, ROUND(SUM(ss.io_interconnect_bytes_delta)/1024/1024/1024) "IO Interconnect (GB)"
|
||||
FROM dba_hist_sqlstat ss
|
||||
JOIN dba_hist_snapshot s ON s.dbid = ss.dbid AND s.instance_number = ss.instance_number AND s.snap_id = ss.snap_id
|
||||
WHERE 1=1
|
||||
-- AND ss.sql_id = '1awt7p3ua5tnz'
|
||||
-- AND TO_CHAR(s.end_interval_time,'Dy') NOT IN ('Sat','Sun')
|
||||
-- AND s.end_interval_time > sysdate - 30
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'YYYY-MM-DD') /* Daily */
|
||||
--- GROUP BY TO_CHAR(s.end_interval_time,'IYYY-IW') /* Weekly */
|
||||
--GROUP BY TO_CHAR(s.end_interval_time,'YYYY-MM') /* Monthly */
|
||||
, ss.sql_id
|
||||
ORDER BY 1 DESC
|
||||
;
|
||||
|
||||
|
||||
--**************************************************
|
||||
-- AWR Segment Statistics Query
|
||||
-- - Captures only top segment's statistics.
|
||||
--**************************************************
|
||||
SELECT s.end_interval_time
|
||||
, ss.instance_number
|
||||
, o.owner
|
||||
, o.object_name
|
||||
, o.subobject_name
|
||||
, o.object_type
|
||||
, o.tablespace_name
|
||||
, o.partition_type
|
||||
, ss.space_allocated_delta
|
||||
, ss.space_used_delta
|
||||
, ss.physical_reads_delta
|
||||
, ss.physical_reads_direct_delta
|
||||
, ss.physical_read_requests_delta
|
||||
, ss.optimized_physical_reads_delta
|
||||
, ss.physical_writes_delta
|
||||
, ss.physical_writes_direct_delta
|
||||
, ss.physical_write_requests_delta
|
||||
, ss.itl_waits_delta
|
||||
, ss.row_lock_waits_delta
|
||||
, ss.gc_buffer_busy_delta
|
||||
, ss.gc_cr_blocks_served_delta
|
||||
, ss.gc_cu_blocks_served_delta
|
||||
, ss.gc_cr_blocks_received_delta
|
||||
, ss.gc_cu_blocks_received_delta
|
||||
, ss.buffer_busy_waits_delta
|
||||
, ss.db_block_changes_delta
|
||||
, ss.table_scans_delta
|
||||
, ss.chain_row_excess_delta
|
||||
FROM v$database d
|
||||
JOIN dba_hist_snapshot s USING (dbid)
|
||||
JOIN dba_hist_seg_stat ss USING (dbid, instance_number,
|
||||
, dba_hist_snapshot s
|
||||
, dba_hist_seg_stat_obj o
|
||||
WHERE d.dbid = s.dbid
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND o.dbid = o.dbid
|
||||
AND o.obj# = o.obj#
|
||||
AND o.dataobj# = o.dataobj#
|
||||
AND o.owner like 'PM_OWN'
|
||||
AND o.object_name LIKE 'PMA_A'
|
||||
AND o.subobject_name LIKE '%%'
|
||||
AND s.end_interval_time > systimestamp - 30
|
||||
ORDER BY s.end_interval_time desc
|
||||
, ss.instance_number
|
||||
;
|
||||
|
||||
|
||||
SELECT MAX(s.end_interval_time) end_interval_time
|
||||
, o.owner
|
||||
, o.object_name
|
||||
, o.subobject_name
|
||||
, o.object_type
|
||||
, o.tablespace_name
|
||||
, o.partition_type
|
||||
, SUM(ss.space_allocated_delta)
|
||||
, SUM(ss.space_used_delta)
|
||||
, SUM(ss.physical_reads_delta)
|
||||
, SUM(ss.physical_reads_direct_delta)
|
||||
, SUM(ss.physical_read_requests_delta)
|
||||
, SUM(ss.optimized_physical_reads_delta)
|
||||
, SUM(ss.physical_writes_delta)
|
||||
, SUM(ss.physical_writes_direct_delta)
|
||||
, SUM(ss.physical_write_requests_delta)
|
||||
, SUM(ss.itl_waits_delta)
|
||||
, SUM(ss.row_lock_waits_delta)
|
||||
, SUM(ss.gc_buffer_busy_delta)
|
||||
, SUM(ss.gc_cr_blocks_served_delta)
|
||||
, SUM(ss.gc_cu_blocks_served_delta)
|
||||
, SUM(ss.gc_cr_blocks_received_delta)
|
||||
, SUM(ss.gc_cu_blocks_received_delta)
|
||||
, SUM(ss.buffer_busy_waits_delta)
|
||||
, SUM(ss.db_block_changes_delta)
|
||||
, SUM(ss.table_scans_delta)
|
||||
, SUM(ss.chain_row_excess_delta)
|
||||
FROM v$database d
|
||||
, dba_hist_seg_stat ss
|
||||
, dba_hist_snapshot s
|
||||
, dba_hist_seg_stat_obj o
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.dbid = ss.dbid
|
||||
AND s.instance_number = ss.instance_number
|
||||
AND s.snap_id = ss.snap_id
|
||||
AND ss.dbid = o.dbid
|
||||
AND ss.obj# = o.obj#
|
||||
AND ss.dataobj# = o.dataobj#
|
||||
AND o.owner like 'PM_OWN'
|
||||
AND o.object_name LIKE 'PMA_A'
|
||||
AND o.subobject_name LIKE '%%'
|
||||
AND s.end_interval_time > systimestamp - 30
|
||||
GROUP BY o.owner
|
||||
, o.object_name
|
||||
, o.subobject_name
|
||||
, o.object_type
|
||||
, o.tablespace_name
|
||||
, o.partition_type
|
||||
ORDER BY end_interval_time desc
|
||||
--ORDER BY SUM(ss.space_allocated_delta) desc
|
||||
--ORDER BY SUM(ss.space_used_delta) desc
|
||||
--ORDER BY SUM(ss.physical_reads_delta) desc
|
||||
--ORDER BY SUM(ss.physical_reads_direct_delta) desc
|
||||
--ORDER BY SUM(ss.physical_read_requests_delta) desc
|
||||
--ORDER BY SUM(ss.optimized_physical_reads_delta) desc
|
||||
--ORDER BY SUM(ss.physical_writes_delta) desc
|
||||
--ORDER BY SUM(ss.physical_writes_direct_delta) desc
|
||||
--ORDER BY SUM(ss.physical_write_requests_delta) desc
|
||||
--ORDER BY SUM(ss.itl_waits_delta) desc
|
||||
--ORDER BY SUM(ss.row_lock_waits_delta) desc
|
||||
--ORDER BY SUM(ss.gc_buffer_busy_delta) desc
|
||||
--ORDER BY SUM(ss.gc_cr_blocks_served_delta) desc
|
||||
--ORDER BY SUM(ss.gc_cu_blocks_served_delta) desc
|
||||
--ORDER BY SUM(ss.gc_cr_blocks_received_delta) desc
|
||||
--ORDER BY SUM(ss.gc_cu_blocks_received_delta) desc
|
||||
--ORDER BY SUM(ss.buffer_busy_waits_delta) desc
|
||||
--ORDER BY SUM(ss.db_block_changes_delta) desc
|
||||
--ORDER BY SUM(ss.table_scans_delta) desc
|
||||
--ORDER BY SUM(ss.chain_row_excess_delta) desc
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
--**************************************************
|
||||
-- AWR Active Session History (ASH) queries
|
||||
--**************************************************
|
||||
|
||||
SELECT ash.sample_time
|
||||
, ash.instance_number I#
|
||||
, ash.session_id
|
||||
, ash.session_serial#
|
||||
, ash.session_type
|
||||
, sn.service_name
|
||||
, u.username
|
||||
, ash.machine
|
||||
, ash.PROGRAM
|
||||
, ash.client_id
|
||||
, ash.sql_exec_start
|
||||
, ash.force_matching_signature
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.top_level_sql_id
|
||||
-- , ash.plsql_entry_object_id
|
||||
-- , ash.plsql_entry_subprogram_id
|
||||
-- , ash.plsql_object_id
|
||||
-- , ash.plsql_subprogram_id
|
||||
, NVL2(p2.owner,p2.owner || '.' || p2.object_name || nvl2(p2.procedure_name,'.' || p2.procedure_name, ''),'') plsql_program
|
||||
, NVL2(p1.owner, p1.owner || '.' || p1.object_name || nvl2(p1.procedure_name,'.' || p1.procedure_name, ''),'') plsql_entry_program
|
||||
, ash.module
|
||||
, ash.action
|
||||
, ash.event
|
||||
, ash.blocking_session_status
|
||||
, ash.blocking_session
|
||||
, ash.blocking_session_serial#
|
||||
, ash.blocking_inst_id
|
||||
, ash.blocking_hangchain_info
|
||||
, ash.tm_delta_time
|
||||
, ash.tm_delta_cpu_time
|
||||
, ash.tm_delta_db_time
|
||||
, ash.delta_time
|
||||
, ash.delta_read_io_requests
|
||||
, ash.delta_read_io_bytes
|
||||
, ash.delta_write_io_requests
|
||||
, ash.delta_write_io_bytes
|
||||
, ash.delta_interconnect_io_bytes
|
||||
, ash.pga_allocated
|
||||
, ash.temp_space_allocated
|
||||
FROM dba_hist_snapshot s
|
||||
, dba_hist_active_sess_history ash
|
||||
, dba_users u
|
||||
, dba_hist_service_name sn
|
||||
, v$database d
|
||||
, dba_procedures p1
|
||||
, dba_procedures p2
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.dbid = ash.dbid
|
||||
AND s.instance_number = ash.instance_number
|
||||
and s.snap_id = ash.snap_id
|
||||
AND ash.dbid = sn.dbid
|
||||
and ash.service_hash = sn.service_name_hash
|
||||
AND ash.user_id = u.user_id
|
||||
AND ash.plsql_entry_object_id = p1.object_id (+)
|
||||
AND ash.plsql_entry_subprogram_id = p1.subprogram_id (+)
|
||||
AND ash.plsql_object_id = p2.object_id (+)
|
||||
AND ash.plsql_subprogram_id = p2.subprogram_id (+)
|
||||
-- and s.end_interval_time between TO_TIMESTAMP('2012-06-09 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-06-09 23:00:07','YYYY-MM-DD HH24:MI:SS')
|
||||
--and ash.sample_time between TO_TIMESTAMP('2013-02-19 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2013-02-19 17:51:00','YYYY-MM-DD HH24:MI:SS')
|
||||
AND ash.sample_time > SYSTIMESTAMP - 2/24
|
||||
-- AND ash.instance_number = '7'
|
||||
-- AND ash.session_id = '1923'
|
||||
-- AND ash.session_serial# = '12265'
|
||||
-- and ash.service_hash = '1859414386'
|
||||
-- and ash.sql_id like '1u585mt959ub3'
|
||||
-- AND ash.top_level_sql_id LIKE '%'
|
||||
-- and u.username like 'KQIU'
|
||||
-- and upper(ash.machine) like upper('%beta%')
|
||||
-- AND upper(sn.service_name) like upper('SYS$USERS')
|
||||
-- and upper(ash.program) like upper('%SQL%')
|
||||
-- and upper(ash.module) like upper('%PiNT%')
|
||||
-- ORDER BY s.end_interval_time
|
||||
ORDER BY ash.sample_time
|
||||
;
|
||||
|
||||
|
||||
|
||||
SELECT ash.sql_id
|
||||
, ROUND(SUM(ash.tm_delta_time)/1000000) "Total Time (sec)"
|
||||
, ROUND(SUM(ash.tm_delta_cpu_time)/1000000) "CPU Time (sec)"
|
||||
, ROUND(SUM(ash.tm_delta_db_time)/1000000) "DB Time (sec)"
|
||||
, ROUND(SUM(ash.delta_time)/1000000) "Time (sec)"
|
||||
, SUM(ash.delta_read_io_requests) "PhyRead Requests"
|
||||
, ROUND(SUM(ash.delta_read_io_bytes)/1024/1024/1024) "PhyRead (GB)"
|
||||
, SUM(ash.delta_write_io_requests) "PhyWrite Requests"
|
||||
, ROUND(SUM(ash.delta_write_io_bytes)/1024/1024/1024) "PhyWrite (GB)"
|
||||
, ROUND(SUM(ash.delta_interconnect_io_bytes)/1024/1024/1024) "InterConnectIO (GB)"
|
||||
, ROUND(SUM(ash.pga_allocated)/1024/1024) "PGA (MB)"
|
||||
, ROUND(SUM(ash.temp_space_allocated)/1024/1024) "TempSpace (MB)"
|
||||
FROM dba_hist_snapshot s
|
||||
, dba_hist_active_sess_history ash
|
||||
, dba_users u
|
||||
, dba_hist_service_name sn
|
||||
, v$database d
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.dbid = ash.dbid
|
||||
AND s.instance_number = ash.instance_number
|
||||
and s.snap_id = ash.snap_id
|
||||
AND ash.dbid = sn.dbid
|
||||
and ash.service_hash = sn.service_name_hash
|
||||
AND ash.user_id = u.user_id
|
||||
-- and s.end_interval_time between TO_TIMESTAMP('2012-06-09 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-06-09 23:00:07','YYYY-MM-DD HH24:MI:SS')
|
||||
--and ash.sample_time between TO_TIMESTAMP('2013-02-19 17:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2013-02-19 17:51:00','YYYY-MM-DD HH24:MI:SS')
|
||||
and ash.sample_time > systimestamp - 10
|
||||
-- AND ash.instance_number = '5'
|
||||
-- AND ash.session_id = '2471'
|
||||
-- AND ash.session_serial# = '38281'
|
||||
-- and ash.service_hash = '1859414386'
|
||||
-- and ash.sql_id like '9m4qqj5uzzn3k'
|
||||
-- AND ash.top_level_sql_id LIKE '%'
|
||||
and u.username like 'username'
|
||||
-- and upper(ash.machine) like upper('%beta%')
|
||||
-- AND upper(sn.service_name) like upper('SYS$USERS')
|
||||
-- and upper(ash.program) like upper('%SQL%')
|
||||
-- and upper(ash.module) like upper('%PiNT%')
|
||||
GROUP BY ash.sql_id
|
||||
-- ORDER BY SUM(ash.tm_delta_time) nulls last
|
||||
-- ORDER BY SUM(ash.tm_delta_cpu_time) nulls last
|
||||
-- ORDER BY SUM(ash.tm_delta_db_time) nulls last
|
||||
-- ORDER BY SUM(ash.delta_time) nulls last
|
||||
-- ORDER BY SUM(ash.delta_read_io_requests) nulls last
|
||||
-- ORDER BY SUM(ash.delta_read_io_bytes) nulls last
|
||||
-- ORDER BY SUM(ash.delta_write_io_requests) nulls last
|
||||
-- ORDER BY SUM(ash.delta_write_io_bytes) nulls last
|
||||
-- ORDER BY SUM(ash.delta_interconnect_io_bytes) nulls last
|
||||
-- ORDER BY SUM(ash.pga_allocated) nulls last
|
||||
ORDER BY SUM(ash.temp_space_allocated) desc nulls last
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
SELECT ash.sample_time
|
||||
, ash.inst_id I#
|
||||
, ash.session_id
|
||||
, ash.session_serial#
|
||||
, ash.session_type
|
||||
, sn.name service_name
|
||||
, u.username
|
||||
, ash.machine
|
||||
, ash.program
|
||||
, ash.sql_opname
|
||||
, ash.force_matching_signature
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.top_level_sql_id
|
||||
, ash.sql_exec_start
|
||||
-- , ash.plsql_entry_object_id
|
||||
-- , ash.plsql_entry_subprogram_id
|
||||
-- , ash.plsql_object_id
|
||||
-- , ash.plsql_subprogram_id
|
||||
, NVL2(p2.owner,p2.owner || '.' || p2.object_name || nvl2(p2.procedure_name,'.' || p2.procedure_name, ''),'') plsql_program
|
||||
, NVL2(p1.owner, p1.owner || '.' || p1.object_name || nvl2(p1.procedure_name,'.' || p1.procedure_name, ''),'') plsql_entry_program
|
||||
, ash.module
|
||||
, ash.action
|
||||
, ash.event
|
||||
, ash.blocking_session_status
|
||||
, ash.blocking_session
|
||||
, ash.blocking_session_serial#
|
||||
, ash.blocking_inst_id
|
||||
, ash.blocking_hangchain_info
|
||||
, ash.TM_DELTA_TIME
|
||||
, ash.TM_DELTA_CPU_TIME
|
||||
, ash.TM_DELTA_DB_TIME
|
||||
, ash.DELTA_TIME
|
||||
, ash.DELTA_READ_IO_REQUESTS
|
||||
, ash.DELTA_WRITE_IO_REQUESTS
|
||||
, ash.DELTA_READ_IO_BYTES
|
||||
, ash.DELTA_WRITE_IO_BYTES
|
||||
, ash.DELTA_INTERCONNECT_IO_BYTES
|
||||
, ash.PGA_ALLOCATED
|
||||
, ash.TEMP_SPACE_ALLOCATED
|
||||
FROM gv$active_session_history ash
|
||||
, dba_users u
|
||||
, dba_services sn
|
||||
, dba_procedures p1
|
||||
, dba_procedures p2
|
||||
WHERE ash.service_hash = sn.name_hash
|
||||
AND ash.user_id = u.user_id
|
||||
AND ash.plsql_entry_object_id = p1.object_id (+)
|
||||
AND ash.plsql_entry_subprogram_id = p1.subprogram_id (+)
|
||||
AND ash.plsql_object_id = p2.object_id (+)
|
||||
AND ash.plsql_subprogram_id = p2.subprogram_id (+)
|
||||
--and ash.sample_time between TO_TIMESTAMP('2012-09-18 23:00:00','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-09-19 15:00:00','YYYY-MM-DD HH24:MI:SS')
|
||||
and ash.sample_time > systimestamp - 5/24
|
||||
-- AND ash.inst_id = '2'
|
||||
-- AND ash.session_id = '1781'
|
||||
-- AND ash.session_serial# = '12265'
|
||||
-- and ash.service_hash = '1859414386'
|
||||
-- and ash.sql_id like '9m4qqj5uzzn3k'
|
||||
-- and ash.sql_id IS NOT NULL
|
||||
-- AND ash.top_level_sql_id LIKE '0bxc9a7r0vczs'
|
||||
-- and u.username like '%ATTRIB%'
|
||||
-- and upper(ash.machine) like upper('%beta%')
|
||||
-- AND upper(sn.name) like upper('SYS$USERS') -- service_name
|
||||
-- and upper(ash.program) like upper('%SQL%')
|
||||
-- and upper(ash.module) like upper('%PiNT%')
|
||||
-- AND ash.inst_id = 3
|
||||
-- AND ash.SESSION_ID = 1057
|
||||
-- AND ash.SESSION_SERIAL# = 10989
|
||||
-- ORDER BY s.end_interval_time
|
||||
ORDER BY ash.sample_time
|
||||
;
|
||||
|
||||
|
||||
------------------------------------------
|
||||
-- AWR ASH Largest TEMP and PGA Users
|
||||
------------------------------------------
|
||||
SELECT service_name, username, max(temp_space_allocated), max(PGA_ALLOCATED)
|
||||
FROM
|
||||
(
|
||||
SELECT ash.instance_number, ash.session_id, session_serial#, sn.service_name, u.username, max(NVL(temp_space_allocated,0)) temp_space_allocated, max(NVL(PGA_ALLOCATED,0)) PGA_ALLOCATED
|
||||
FROM dba_hist_snapshot s
|
||||
, dba_hist_active_sess_history ash
|
||||
, dba_users u
|
||||
, dba_hist_service_name sn
|
||||
, v$database d
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.dbid = ash.dbid
|
||||
AND s.instance_number = ash.instance_number
|
||||
and s.snap_id = ash.snap_id
|
||||
and s.end_interval_time between TO_TIMESTAMP('2012-04-01 00:04:25','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-05-03 00:49:30','YYYY-MM-DD HH24:MI:SS')
|
||||
AND ash.dbid = sn.dbid
|
||||
and ash.service_hash = sn.service_name_hash
|
||||
AND ash.user_id = u.user_id
|
||||
-- AND sn.service_name LIKE '%%'
|
||||
-- and ash.sql_id = '7c3kd9m29awf8'
|
||||
-- and ash.program = 'BumPlusCacheJob.exe'
|
||||
group by ash.instance_number, ash.session_id,session_serial#, sn.service_name, u.username
|
||||
)
|
||||
GROUP BY service_name, username
|
||||
order by max(temp_space_allocated) desc nulls last
|
||||
--order by max(PGA_ALLOCATED) desc nulls last
|
||||
;
|
||||
|
||||
|
||||
select ash.instance_number
|
||||
, ash.session_id
|
||||
, ash.sql_id
|
||||
, ash.SQL_PLAN_HASH_VALUE
|
||||
, ash.SQL_EXEC_ID
|
||||
, ash.sql_exec_start
|
||||
, max(ash.sample_time) end_time
|
||||
--, ROUNd(max(ash.wait_time)/100/60) "dur(min)"
|
||||
, ( max(ash.sample_time) - ash.sql_exec_start) "Duration (D hh:mm:ss.fff)"
|
||||
FROM dba_hist_snapshot s
|
||||
, dba_hist_active_sess_history ash
|
||||
, dba_users u
|
||||
, dba_services sn
|
||||
WHERE s.dbid = ash.dbid
|
||||
AND s.instance_number = ash.instance_number
|
||||
and s.snap_id = ash.snap_id
|
||||
and s.end_interval_time between TO_TIMESTAMP('2012-04-01 00:04:25','YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2012-05-03 00:49:30','YYYY-MM-DD HH24:MI:SS')
|
||||
and ash.service_hash = '1859414386'
|
||||
and ash.sql_id = '7c3kd9m29awf8'
|
||||
and ash.program = 'BumPlusCacheJob.exe'
|
||||
--ORDER BY ash.WAIT_TIME desc
|
||||
group by ash.instance_number, ash.session_id
|
||||
,ash.sql_id,ash.SQL_PLAN_HASH_VALUE, ash.SQL_EXEC_ID, ash.sql_exec_start
|
||||
order by ( max(ash.sample_time) - ash.sql_exec_start) desc nulls last
|
||||
, ash.sql_exec_start desc nulls last
|
||||
;
|
||||
|
||||
|
||||
105
vg/awr_report.sql
Normal file
105
vg/awr_report.sql
Normal file
@@ -0,0 +1,105 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Generate AWR Report for RAC
|
||||
* Parameters : 1 - From Time ( YYYY-MM-DD HH24:MI:SS format) (Default = sysdate-1)
|
||||
* 2 - To Time ( YYYY-MM-DD HH24:MI:SS format) (Default = sysdate)
|
||||
* 3 - Instance ID List separated by comma( default value - All instances)
|
||||
* 4 - Report Type ( text/html, default value - html)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 17-Feb-14 Vishal Gupta Changed order of input parameters
|
||||
* 18-Oct-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE FROM_TIME
|
||||
UNDEFINE TO_TIME
|
||||
UNDEFINE REPORT_TYPE
|
||||
UNDEFINE INST_ID_LIST
|
||||
UNDEFINE begin_snap_id
|
||||
UNDEFINE end_snap_id
|
||||
--UNDEFINE DBID
|
||||
|
||||
DEFINE FROM_TIME="&&1"
|
||||
DEFINE TO_TIME="&&2"
|
||||
DEFINE INST_ID_LIST="&&3"
|
||||
DEFINE REPORT_TYPE="&&4"
|
||||
DEFINE begin_snap_id=""
|
||||
DEFINE end_snap_id=""
|
||||
--DEFINE DBID=""
|
||||
|
||||
COLUMN _FROM_TIME NEW_VALUE FROM_TIME NOPRINT
|
||||
COLUMN _TO_TIME NEW_VALUE TO_TIME NOPRINT
|
||||
COLUMN _INST_ID_LIST NEW_VALUE INST_ID_LIST NOPRINT
|
||||
COLUMN _REPORT_TYPE NEW_VALUE REPORT_TYPE NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&FROM_TIME','',to_char(sysdate - 1 - (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&FROM_TIME') "_FROM_TIME"
|
||||
, DECODE('&&TO_TIME','',to_char(sysdate + (1/1440),'YYYY-MM-DD HH24:MI:SS'),'&&TO_TIME') "_TO_TIME"
|
||||
, DECODE('&&INST_ID_LIST','',NULL,'&&INST_ID_LIST') "_INST_ID_LIST"
|
||||
, DECODE('&&REPORT_TYPE','','html','&&REPORT_TYPE') "_REPORT_TYPE"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ***********************************************************************
|
||||
PROMPT * A W R R E P O R T ( R A C )
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - From Timestamp = '&&FROM_TIME' ( YYYY-MM-DD HH24:MI:SS format)
|
||||
PROMPT * - To Timestamp = '&&TO_TIME' ( YYYY-MM-DD HH24:MI:SS format)
|
||||
PROMPT * - INST_ID_LIST = '&&INST_ID_LIST'
|
||||
PROMPT * - Report Type = '&&REPORT_TYPE'
|
||||
PROMPT ***********************************************************************
|
||||
|
||||
|
||||
COLUMN _begin_snap_id NEW_VALUE begin_snap_id NOPRINT
|
||||
COLUMN _end_snap_id NEW_VALUE end_snap_id NOPRINT
|
||||
COLUMN _dbid NEW_VALUE dbid NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT min(s.snap_id) "_begin_snap_id"
|
||||
, max(s.snap_id) "_end_snap_id"
|
||||
, d.dbid "_dbid"
|
||||
FROM dba_hist_snapshot s, v$database d
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&FROM_TIME','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&to_time','YYYY-MM-DD HH24:MI:SS')
|
||||
GROUP BY d.dbid
|
||||
;
|
||||
set term on
|
||||
|
||||
|
||||
set pages 0
|
||||
set lines 1500
|
||||
PROMPT spooling to file &&_CONNECT_IDENTIFIER._awr_report.html
|
||||
set term off
|
||||
spool &&_CONNECT_IDENTIFIER._awr_report.html
|
||||
SELECT * from table(dbms_workload_repository.awr_global_report_html
|
||||
( l_dbid => &&DBID
|
||||
, l_inst_num => '&&INST_ID_LIST'
|
||||
, l_bid => &&begin_snap_id
|
||||
, l_eid => &&end_snap_id
|
||||
, l_options => 1 -- Currently not used used (as of v11.2.0.3)
|
||||
)
|
||||
);
|
||||
spool off
|
||||
set term on
|
||||
PROMPT report generated as &&_CONNECT_IDENTIFIER._awr_report.html file.
|
||||
host &&_CONNECT_IDENTIFIER._awr_report.html
|
||||
|
||||
set pages 5000
|
||||
|
||||
@@footer
|
||||
147
vg/awr_segstat.sql
Normal file
147
vg/awr_segstat.sql
Normal file
@@ -0,0 +1,147 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display segment statistics from AWR
|
||||
* Parameters : 1 - Number of Days
|
||||
* 2 - Owner
|
||||
* 3 - Object Name
|
||||
* 4 - SubObject Name
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 14-Sep-12 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE no_of_days="&&1"
|
||||
DEFINE owner="&&2"
|
||||
DEFINE object_name="&&3"
|
||||
DEFINE subobject_name="&&4"
|
||||
|
||||
COLUMN _no_of_days NEW_VALUE no_of_days NOPRINT
|
||||
COLUMN _owner NEW_VALUE owner NOPRINT
|
||||
COLUMN _object_name NEW_VALUE object_name NOPRINT
|
||||
COLUMN _subobject_name NEW_VALUE subobject_name NOPRINT
|
||||
COLUMN _object_type NEW_VALUE object_type NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&no_of_days','','30','&&no_of_days') "_no_of_days"
|
||||
, DECODE('&&owner','','%',UPPER('&&owner')) "_owner"
|
||||
, DECODE('&&object_name','','%',UPPER('&&object_name')) "_object_name"
|
||||
, DECODE('&&subobject_name','','%',UPPER('&&subobject_name')) "_subobject_name"
|
||||
FROM DUAL
|
||||
;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT ************************************************************************
|
||||
PROMPT * AWR Segment Statistics
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - NoOfDays - "&&no_of_days"
|
||||
PROMPT * - Owner - "&&owner"
|
||||
PROMPT * - ObjectName - "&&object_name"
|
||||
PROMPT * - SubObjectName - "&&subobject_name"
|
||||
PROMPT ************************************************************************
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT a15
|
||||
COLUMN object HEADING "Object" FORMAT a40
|
||||
COLUMN subobject_name HEADING "SubObject" FORMAT a25
|
||||
COLUMN object_type HEADING "ObjectType" FORMAT a20
|
||||
COLUMN tablespace_name HEADING "Tablespace|Name" FORMAT a15
|
||||
COLUMN partition_type HEADING "Partition|Type" FORMAT a10
|
||||
|
||||
COLUMN changes_delta HEADING "Changes|Delta|(MB)" FORMAT 999,999,999
|
||||
COLUMN used_delta HEADING "Used|Delta|(MB)" FORMAT 999,999,999
|
||||
COLUMN allocated_delta HEADING "Alloc|Delta|(MB)" FORMAT 999,999,999
|
||||
COLUMN itl_waits_delta HEADING "ITL|Waits|Delta" FORMAT 999,999,999
|
||||
COLUMN row_lock_waits_delta HEADING "Row|Lock|Waits|Delta" FORMAT 999,999,999
|
||||
COLUMN physical_reads_delta HEADING "Phy|Reads|Delta" FORMAT 999,999,999
|
||||
COLUMN physical_writes_delta HEADING "Phy|Write|Delta" FORMAT 999,999,999
|
||||
COLUMN physical_reads_direct_delta HEADING "Phy|Reads|Direct|Delta" FORMAT 999,999,999
|
||||
COLUMN physical_writes_direct_delta HEADING "Phy|Writes|Direct|Delta" FORMAT 999,999,999
|
||||
COLUMN gc_cr_blocks_served_delta HEADING "GC CR|Blocks|Served|Delta" FORMAT 999,999,999
|
||||
COLUMN gc_cu_blocks_served_delta HEADING "GC CU|Blocks|Served|Delta" FORMAT 999,999,999
|
||||
COLUMN gc_buffer_busy_delta HEADING "GC|Buffer|Busy|Delta" FORMAT 999,999,999
|
||||
COLUMN gc_cr_blocks_received_delta HEADING "GC CR|Blocks|Recvd|Delta" FORMAT 999,999,999
|
||||
COLUMN gc_cu_blocks_received_delta HEADING "GC CU|Blocks|Recvd|Delta" FORMAT 999,999,999
|
||||
COLUMN table_scans_delta HEADING "Table|Scans|Delta" FORMAT 999,999,999
|
||||
COLUMN chain_row_excess_delta HEADING "Chain|Row|Excess|Delta" FORMAT 999,999,999
|
||||
COLUMN physical_read_requests_delta HEADING "Phy|Read|Reqs|Delta" FORMAT 999,999,999
|
||||
COLUMN physical_write_requests_delta HEADING "Phy|Write|Reqs|Delta" FORMAT 999,999,999
|
||||
COLUMN optimized_physical_reads_delta HEADING "Opt'z|Phy|Reads||Delta" FORMAT 999,999,999
|
||||
|
||||
COLUMN changes_total HEADING "Changes|Total|(MB)" FORMAT 999,999,999
|
||||
COLUMN used_total HEADING "Used|Total|(MB)" FORMAT 999,999,999
|
||||
COLUMN allocated_total HEADING "Alloc|Total|(MB)" FORMAT 999,999,999
|
||||
COLUMN itl_waits_total HEADING "ITL|Waits|Total" FORMAT 999,999,999,999
|
||||
|
||||
set lines 4000
|
||||
|
||||
SELECT /*+ parallel(8) */
|
||||
to_char(TRUNC(s.end_interval_time,'MI'),'DD-MON-YY HH24:MI') end_interval_time
|
||||
--, o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name,'') object
|
||||
, o.owner || '.' || o.object_name object
|
||||
--, o.subobject_name
|
||||
--, o.object_type
|
||||
--, o.tablespace_name
|
||||
--, o.partition_type
|
||||
, ROUND(SUM(ss.db_block_changes_delta * p.value)/1024/1024) changes_delta
|
||||
, ROUND(SUM(ss.space_used_delta )/1024/1024) used_delta
|
||||
, ROUND(SUM(ss.space_allocated_delta )/1024/1024) allocated_delta
|
||||
, ROUND(SUM(ss.itl_waits_delta )) itl_waits_delta
|
||||
, ROUND(SUM(ss.row_lock_waits_delta )) row_lock_waits_delta
|
||||
, ROUND(SUM(ss.physical_reads_delta )) physical_reads_delta
|
||||
, ROUND(SUM(ss.physical_writes_delta )) physical_writes_delta
|
||||
, ROUND(SUM(ss.physical_reads_direct_delta )) physical_reads_direct_delta
|
||||
, ROUND(SUM(ss.physical_writes_direct_delta )) physical_writes_direct_delta
|
||||
-- , ROUND(SUM(ss.gc_cr_blocks_served_delta )) gc_cr_blocks_served_delta
|
||||
-- , ROUND(SUM(ss.gc_cu_blocks_served_delta )) gc_cu_blocks_served_delta
|
||||
, ROUND(SUM(ss.gc_buffer_busy_delta )) gc_buffer_busy_delta
|
||||
, ROUND(SUM(ss.gc_cr_blocks_received_delta )) gc_cr_blocks_received_delta
|
||||
, ROUND(SUM(ss.gc_cu_blocks_received_delta )) gc_cu_blocks_received_delta
|
||||
, ROUND(SUM(ss.table_scans_delta )) table_scans_delta
|
||||
, ROUND(SUM(ss.chain_row_excess_delta )) chain_row_excess_delta
|
||||
, ROUND(SUM(ss.physical_read_requests_delta )) physical_read_requests_delta
|
||||
, ROUND(SUM(ss.physical_write_requests_delta )) physical_write_requests_delta
|
||||
, ROUND(SUM(ss.optimized_physical_reads_delta )) optimized_physical_reads_delta
|
||||
|
||||
-- , ROUND(MAX(ss.db_block_changes_total * p.value)/1024/1024) changes_total
|
||||
-- , ROUND(MAX(ss.space_used_total )/1024/1024) used_total
|
||||
-- , ROUND(MAX(ss.space_allocated_total )/1024/1024) allocated_total
|
||||
-- , ROUND(SUM(ss.itl_waits_total )) itl_waits_total
|
||||
FROM v$database d
|
||||
JOIN dba_hist_snapshot s ON d.dbid = s.dbid
|
||||
JOIN sys.WRH$_SEG_STAT ss ON s.dbid = ss.dbid
|
||||
AND s.instance_number = ss.instance_number
|
||||
AND s.snap_id = ss.snap_id
|
||||
JOIN v$system_parameter p ON p.name = 'db_block_size'
|
||||
JOIN dba_hist_seg_stat_obj o ON o.dbid = ss.dbid
|
||||
AND o.ts# = ss.ts#
|
||||
AND o.obj# = ss.obj#
|
||||
AND o.dataobj# = ss.dataobj#
|
||||
WHERE s.end_interval_time > systimestamp - INTERVAL '&&no_of_days' DAY
|
||||
AND o.owner LIKE '&&owner' ESCAPE '\'
|
||||
AND o.object_name LIKE '&&object_name' ESCAPE '\'
|
||||
AND NVL(o.subobject_name,'x') LIKE '&&subobject_name' ESCAPE '\'
|
||||
GROUP BY ss.dbid
|
||||
, TRUNC(s.end_interval_time,'MI')
|
||||
--, o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name,'')
|
||||
, o.owner || '.' || o.object_name
|
||||
--, o.subobject_name
|
||||
--, o.object_type
|
||||
--, o.tablespace_name
|
||||
--, o.partition_type
|
||||
ORDER BY TRUNC(s.end_interval_time,'MI')
|
||||
;
|
||||
|
||||
@@footer
|
||||
152
vg/awr_service_stats.sql
Normal file
152
vg/awr_service_stats.sql
Normal file
@@ -0,0 +1,152 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Service statistics from AWR
|
||||
* Parameters : 1 - Statistic Name (Use % as wildcard, escape with \)
|
||||
* 2 - SERVICE_NAME (Use % as wildcard, escape with \)
|
||||
* 3 - From timestamp (YYYY-MM-DD HH24:MI:SS format, Default value sysdate - 2 hours)
|
||||
* 4 - To timstamp (YYYY-MM-DD HH24:MI:SS format, Default value sysdate)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 19-Mar-12 Vishal Gupta Intial version
|
||||
* 15-May-12 Vishal Gupta Change from/to relative hours to absolute timestamp
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE service_name
|
||||
UNDEFINE stat_name
|
||||
UNDEFINE from_timestamp
|
||||
UNDEFINE to_timestamp
|
||||
|
||||
DEFINE stat_name="&&1"
|
||||
DEFINE service_name="&&2"
|
||||
DEFINE from_timestamp="&&3"
|
||||
DEFINE to_timestamp="&&4"
|
||||
|
||||
set term off
|
||||
COLUMN _stat_name NEW_VALUE stat_name NOPRINT
|
||||
COLUMN _service_name NEW_VALUE service_name NOPRINT
|
||||
COLUMN _from_timestamp NEW_VALUE from_timestamp NOPRINT
|
||||
COLUMN _to_timestamp NEW_VALUE to_timestamp NOPRINT
|
||||
|
||||
SELECT UPPER(DECODE('&&stat_name','','physical reads','&&stat_name')) "_stat_name"
|
||||
, UPPER(DECODE('&&service_name','','%','&&service_name')) "_service_name"
|
||||
, UPPER(DECODE('&&from_timestamp','',TO_CHAR(sysdate - 120/(24*60),'YYYY-MM-DD HH24:MI:SS'),'&&from_timestamp')) "_from_timestamp"
|
||||
, UPPER(DECODE('&&to_timestamp','',TO_CHAR(sysdate ,'YYYY-MM-DD HH24:MI:SS'),'&&to_timestamp')) "_to_timestamp"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
DEFINE FORMAT=999,999,999
|
||||
DEFINE DIVIDER="1"
|
||||
DEFINE HEADING="#s"
|
||||
--DEFINE DIVIDER="1000"
|
||||
--DEFINE HEADING="#1000s"
|
||||
--DEFINE DIVIDER="1000000"
|
||||
--DEFINE HEADING="#1000000s"
|
||||
|
||||
DEFINE TOTAL_FORMAT=999,999,999,999
|
||||
DEFINE TOTAL_HEADING="#1000s"
|
||||
|
||||
|
||||
PROMPT ***************************************************************************************************
|
||||
PROMPT * AWR Service Statistics (Delta)
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Service Name = '&&service_name'
|
||||
PROMPT * - Statistic Name = '&&stat_name'
|
||||
PROMPT * - From Timestamp = '&&from_timestamp'
|
||||
PROMPT * - To Timestamp = '&&to_timestamp'
|
||||
PROMPT ***************************************************************************************************
|
||||
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT a15
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a25
|
||||
COLUMN stat_name HEADING "StatisticName" FORMAT a25
|
||||
COLUMN value_clusterwide HEADING "RAC Wide|Value|(&&TOTAL_HEADING)" FORMAT &&TOTAL_FORMAT
|
||||
COLUMN value_inst1 HEADING "Inst 1|Value|(&&HEADING)" FORMAT &&FORMAT
|
||||
COLUMN value_inst2 HEADING "Inst 2|Value|(&&HEADING)" FORMAT &&FORMAT
|
||||
COLUMN value_inst3 HEADING "Inst 3|Value|(&&HEADING)" FORMAT &&FORMAT
|
||||
COLUMN value_inst4 HEADING "Inst 4|Value|(&&HEADING)" FORMAT &&FORMAT
|
||||
COLUMN value_inst5 HEADING "Inst 5|Value|(&&HEADING)" FORMAT &&FORMAT
|
||||
COLUMN value_inst6 HEADING "Inst 6|Value|(&&HEADING)" FORMAT &&FORMAT
|
||||
COLUMN value_inst7 HEADING "Inst 7|Value|(&&HEADING)" FORMAT &&FORMAT
|
||||
COLUMN value_inst8 HEADING "Inst 8|Value|(&&HEADING)" FORMAT &&FORMAT
|
||||
|
||||
BREAK ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_clusterwide FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_inst1 FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_inst2 FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_inst3 FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_inst4 FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_inst5 FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_inst6 FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_inst7 FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
COMPUTE SUM LABEL 'Total' OF value_inst8 FORMAT &&TOTAL_FORMAT ON REPORT
|
||||
|
||||
WITH snap as
|
||||
(
|
||||
SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LAG (s.snap_id) OVER(PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
, v$database d
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, ss.service_name
|
||||
, ss.stat_name
|
||||
, SUM( ss.value-LEAST(ss_prev.value,ss.value))/&&DIVIDER value_clusterwide
|
||||
, SUM(DECODE(ss.instance_number, 1, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst1
|
||||
, SUM(DECODE(ss.instance_number, 2, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst2
|
||||
, SUM(DECODE(ss.instance_number, 3, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst3
|
||||
, SUM(DECODE(ss.instance_number, 4, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst4
|
||||
, SUM(DECODE(ss.instance_number, 5, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst5
|
||||
, SUM(DECODE(ss.instance_number, 6, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst6
|
||||
, SUM(DECODE(ss.instance_number, 7, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst7
|
||||
, SUM(DECODE(ss.instance_number, 8, ss.value-LEAST(ss_prev.value,ss.value), 0))/&&DIVIDER value_inst8
|
||||
FROM snap s
|
||||
, dba_hist_service_stat ss
|
||||
, dba_hist_service_stat ss_prev
|
||||
WHERE s.dbid = ss.dbid
|
||||
AND s.instance_number = ss.instance_number
|
||||
AND s.snap_id = ss.snap_id
|
||||
AND s.dbid = ss_prev.dbid
|
||||
AND s.instance_number = ss_prev.instance_number
|
||||
AND s.prev_snap_id = ss_prev.snap_id
|
||||
AND ss.service_name = ss_prev.service_name
|
||||
AND ss.stat_name = ss_prev.stat_name
|
||||
AND UPPER(ss.service_name) LIKE UPPER('&&service_name') ESCAPE '\'
|
||||
AND UPPER(ss.stat_name) LIKE UPPER('&&stat_name') ESCAPE '\'
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
, ss.service_name
|
||||
, ss.stat_name
|
||||
ORDER BY TO_DATE(TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI'),'DD-MON-YY HH24:MI')
|
||||
, ss.service_name
|
||||
, ss.stat_name
|
||||
;
|
||||
|
||||
UNDEFINE service_name
|
||||
UNDEFINE stat_name
|
||||
UNDEFINE from_timestamp
|
||||
UNDEFINE to_timestamp
|
||||
|
||||
|
||||
@@footer
|
||||
143
vg/awr_service_waits.sql
Normal file
143
vg/awr_service_waits.sql
Normal file
@@ -0,0 +1,143 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Service Waits from AWR
|
||||
* Parameters : 1 - SERVICE_NAME (Use % as wildcard, escape with \)
|
||||
* 2 - Instance (Use % for all instances in the RAC database)
|
||||
* 3 - From timestamp (YYYY-MM-DD HH24:MI:SS format)
|
||||
* 4 - To timstamp (YYYY-MM-DD HH24:MI:SS format)
|
||||
*
|
||||
* Wait Classes are as follows:-
|
||||
* Concurrency
|
||||
* User I/O
|
||||
* System I/O
|
||||
* Administrative
|
||||
* Other
|
||||
* Configuration
|
||||
* Scheduler
|
||||
* Cluster
|
||||
* Application
|
||||
* Queueing
|
||||
* Idle
|
||||
* Network
|
||||
* Commit
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 17-May-12 Vishal Gupta Intial version
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
DEFINE service_name="&&1"
|
||||
DEFINE instance_number="&2"
|
||||
DEFINE from_timestamp="&3"
|
||||
DEFINE to_timestamp="&4"
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="(#)"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE TIME_FORMAT=999,999
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="1000"
|
||||
--DEFINE TIME_HEADING="1000s"
|
||||
|
||||
|
||||
DEFINE TOTAL_FORMAT=999,999,999,999
|
||||
DEFINE TOTAL_DIVIDER="1000"
|
||||
DEFINE TOTAL_HEADING="'1000"
|
||||
|
||||
COLUMN end_interval_time HEADING "SnapTime" FORMAT a15
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a25
|
||||
|
||||
COLUMN Concurrency_total_waits HEADING "Concurr|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN user_io_total_waits HEADING "UserIO|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN system_io_total_waits HEADING "SystemIO|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN application_total_waits HEADING "App|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN network_total_waits HEADING "Network|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN commit_total_waits HEADING "Commit|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN idle_total_waits HEADING "Idle|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN cluster_total_waits HEADING "Cluster|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN scheduler_total_waits HEADING "Scheduler|Total|Waits|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN Concurrency_time_waited HEADING "Concurr|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN user_io_time_waited HEADING "UserIO|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN system_io_time_waited HEADING "SystemIO|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN application_time_waited HEADING "App|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN network_time_waited HEADING "Network|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN commit_time_waited HEADING "Commit|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN idle_time_waited HEADING "Idle|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN cluster_time_waited HEADING "Cluster|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN scheduler_time_waited HEADING "Scheduler|Timel|Waited|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
|
||||
|
||||
|
||||
WITH snap as
|
||||
(
|
||||
SELECT s.dbid
|
||||
, s.instance_number
|
||||
, s.snap_id
|
||||
, LAG (s.snap_id) OVER(PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
|
||||
, s.end_interval_time
|
||||
FROM dba_hist_snapshot s
|
||||
WHERE s.end_interval_time BETWEEN TO_TIMESTAMP('&&from_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
AND TO_TIMESTAMP('&&to_timestamp','YYYY-MM-DD HH24:MI:SS')
|
||||
)
|
||||
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, swc.service_name
|
||||
-- Total Waits in centisecs
|
||||
, SUM(DECODE(swc.wait_class, 'Concurrency', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER Concurrency_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'User I/O', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER user_io_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'System I/O', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER system_io_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Application', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER application_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Network', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER network_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Commit', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER commit_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Idle', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER idle_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Cluster', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER cluster_total_waits
|
||||
, SUM(DECODE(swc.wait_class, 'Scheduler', (swc.total_waits-LEAST(swc_prev.total_waits,swc.total_waits)), 0))/&&COUNT_DIVIDER scheduler_total_waits
|
||||
-- Time Waited in centisecs
|
||||
, SUM(DECODE(swc.wait_class, 'Concurrency', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER Concurrency_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'User I/O', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER user_io_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'System I/O', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER system_io_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Application', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER application_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Network', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER network_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Commit', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER commit_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Idle', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER idle_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Cluster', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER cluster_time_waited
|
||||
, SUM(DECODE(swc.wait_class, 'Scheduler', (swc.time_waited-LEAST(swc_prev.time_waited,swc.time_waited)), 0))/100/&&TIME_DIVIDER scheduler_time_waited
|
||||
FROM snap s
|
||||
, dba_hist_service_wait_class swc
|
||||
, dba_hist_service_wait_class swc_prev
|
||||
WHERE s.dbid = swc.dbid
|
||||
AND s.instance_number = swc.instance_number
|
||||
AND s.snap_id = swc.snap_id
|
||||
AND s.dbid = swc_prev.dbid
|
||||
AND s.instance_number = swc_prev.instance_number
|
||||
AND s.prev_snap_id = swc_prev.snap_id
|
||||
AND swc.service_name = swc_prev.service_name
|
||||
AND swc.wait_class = swc_prev.wait_class
|
||||
AND UPPER(swc.service_name) LIKE UPPER('&&service_name') ESCAPE '\'
|
||||
AND swc.instance_number LIKE '&&instance_number'
|
||||
GROUP BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
, swc.service_name
|
||||
ORDER BY TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI')
|
||||
, swc.service_name
|
||||
;
|
||||
|
||||
PROMPT '&&from_timestamp'
|
||||
|
||||
UNDEFINE service_name
|
||||
UNDEFINE instance_number
|
||||
UNDEFINE from_timestamp
|
||||
UNDEFINE to_timestamp
|
||||
|
||||
|
||||
@@footer
|
||||
21
vg/awr_sga_sizedetails.sql
Normal file
21
vg/awr_sga_sizedetails.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
@@header
|
||||
|
||||
SELECT TO_CHAR(A.END_INTERVAL_TIME,'DD-Mon-YY HH24:MI:SS') "Time"
|
||||
, ROUND(sum(b.bytes)/1024/1024) total
|
||||
, ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'buffer_cache',b.bytes,0),0))/1024/1024) buffercache
|
||||
, ROUND(sum(DECODE(b.pool,'shared pool', b.bytes,0))/1024/1024) sharedpooltotal
|
||||
, ROUND(sum(DECODE(b.name,'free memory',b.bytes,0))/1024/1024) sharedpoolfree
|
||||
, ROUND(sum(DECODE(b.pool,'java pool', b.bytes,0))/1024/1024) javapool
|
||||
, ROUND(sum(DECODE(b.pool,'large pool', b.bytes,0))/1024/1024) largepool
|
||||
, ROUND(sum(DECODE(b.pool,'streams pool', b.bytes,0))/1024/1024) streamspool
|
||||
, ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'fixed_sga',b.bytes,0),0))/1024/1024) fixedsga
|
||||
, ROUND(sum(DECODE(b.pool,null, DECODE(b.name,'log_buffer',b.bytes,0),0))/1024/1024) logbuffer
|
||||
FROM v$database d
|
||||
JOIN DBA_HIST_SNAPSHOT A ON A.DBID = d.DBID
|
||||
JOIN DBA_HIST_SGAstat B ON A.DBID = B.DBID AND A.INSTANCE_NUMBER = B.INSTANCE_NUMBER AND A.SNAP_ID = B.SNAP_ID
|
||||
WHERE 1=1
|
||||
and a.END_INTERVAL_TIME > sysdate - 3
|
||||
group by a.end_interval_time
|
||||
ORDER BY a.end_interval_time ASC;
|
||||
|
||||
@@footer
|
||||
116
vg/awr_sid_details.sql
Normal file
116
vg/awr_sid_details.sql
Normal file
@@ -0,0 +1,116 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session details from AWR ASH data
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
* 3 - Serial# (Default %)
|
||||
* 4 - Number of hours (Default 24)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 31-Dec-15 Vishal Gupta Added duration in the output
|
||||
* 03-FEB-14 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE SID
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE SERIAL
|
||||
UNDEFINE HOURS
|
||||
|
||||
DEFINE SID="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
DEFINE SERIAL="&&3"
|
||||
DEFINE HOURS="&&4"
|
||||
DEFINE WHERECLAUSE="&&5"
|
||||
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
|
||||
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
|
||||
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
|
||||
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * AWR ASH Session Details
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * SID = "&&SID"
|
||||
PROMPT * Instance ID = "&&INST_ID"
|
||||
PROMPT * Serial# = "&&SERIAL"
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * WhereClause = "&&WHERECLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN sample_time_min FORMAT a18
|
||||
COLUMN sample_time_max FORMAT a18
|
||||
COLUMN duration FORMAT a12
|
||||
COLUMN username HEADING "DBUser" FORMAT a18
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a21
|
||||
COLUMN program HEADING "Program" FORMAT a25 TRUNCATE
|
||||
COLUMN machine HEADING "Machine" FORMAT a25
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT /*+ parallel(ash, 10) */
|
||||
--ash.sql_exec_id,
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.instance_number) instance_number
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(MIN(ash.sample_time),'DD-MON-YY HH24:MI:SS') sample_time_min
|
||||
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sample_time_max
|
||||
, SUBSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+')
|
||||
,1,INSTR(REPLACE(max(ash.sample_time) - MIN(ash.sample_time),'+00000000','+'),'.')-1
|
||||
) duration
|
||||
, u.username
|
||||
, s.name service_name
|
||||
, NVL(ash_parent.program,ash.program) program
|
||||
, ash.machine
|
||||
FROM dba_hist_active_sess_history ash
|
||||
JOIN dba_users u ON u.user_id = ash.user_id
|
||||
JOIN dba_services s ON s.name_hash = ash.service_hash
|
||||
LEFT OUTER JOIN dba_hist_active_sess_history ash_parent
|
||||
ON ash_parent.instance_number = ash.qc_instance_id
|
||||
AND ash_parent.session_id = ash.qc_session_id
|
||||
AND ash_parent.session_serial# = ash.qc_session_serial#
|
||||
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
|
||||
WHERE NVL(ash.qc_instance_id,ash.instance_number) LIKE '&&INST_ID'
|
||||
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
|
||||
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND (ash_parent.sample_time IS NULL or ash_parent.sample_time > sysdate - (&&HOURS/24))
|
||||
&&WHERECLAUSE
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.instance_number)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
, u.username
|
||||
, s.name
|
||||
, NVL(ash_parent.program,ash.program)
|
||||
, ash.machine
|
||||
ORDER BY MIN(ash.sample_time) ASC
|
||||
, max(ash.sample_time) asc
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
122
vg/awr_sid_events.sql
Normal file
122
vg/awr_sid_events.sql
Normal file
@@ -0,0 +1,122 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session's events from ASH
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
* 3 - Serial# (Default %)
|
||||
* 4 - Number of hours (Default 24)
|
||||
* 5 - WhereClause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 15-MAY-14 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE SID
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE SERIAL
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE SQL_ID
|
||||
UNDEFINE WHERECLAUSE
|
||||
|
||||
DEFINE SID="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
DEFINE SERIAL="&&3"
|
||||
DEFINE HOURS="&&4"
|
||||
DEFINE WHERECLAUSE="&&5"
|
||||
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
|
||||
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
|
||||
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
|
||||
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * AWR ASH Session Events
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * SID = "&&SID"
|
||||
PROMPT * Instance ID = "&&INST_ID"
|
||||
PROMPT * Serial# = "&&SERIAL"
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * Where Clause = "&&WHERECLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999
|
||||
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
|
||||
COLUMN sql_exec_start FORMAT a20
|
||||
COLUMN sql_exec_end FORMAT a20
|
||||
COLUMN duration FORMAT a15
|
||||
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE
|
||||
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
|
||||
COLUMN current_dop HEADING "DOP" FORMAT 999
|
||||
COLUMN event HEADING "Event" FORMAT a40 TRUNCATE
|
||||
COLUMN event_count HEADING "EventCount" FORMAT 99999999999
|
||||
|
||||
BREAK ON session_id ON inst_id ON session_serial# ON sql_exec_start ON sql_opname ON sql_id ON sql_child_number ON sql_plan_hash_value
|
||||
|
||||
-- Get the session events from ASH
|
||||
SELECT /*+ parallel(ash, 10) */
|
||||
--ash.sql_exec_id,
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.instance_number) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
, ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, count(1) event_count
|
||||
, ash.event
|
||||
FROM dba_hist_active_sess_history ash
|
||||
WHERE ash.sql_id IS NOT NULL
|
||||
AND NVL(ash.qc_instance_id,ash.instance_number) LIKE '&&INST_ID'
|
||||
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
|
||||
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND ash.sql_exec_id IS NOT NULL
|
||||
&&WHERECLAUSE
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.instance_number)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
, ash.event
|
||||
ORDER BY --max(ash.sample_time) asc
|
||||
--,
|
||||
NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
|
||||
, ash.sql_id
|
||||
, count(1) desc
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
170
vg/awr_sid_sqlids.sql
Normal file
170
vg/awr_sid_sqlids.sql
Normal file
@@ -0,0 +1,170 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session's SQL IDs from AWR
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
* 3 - Serial# (Default %)
|
||||
* 4 - Number of hours (Default 24)
|
||||
* 5 - SQL_ID (Default %)
|
||||
* 6 - WhereClause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 31-DEC-15 Vishal Gupta Change logic of query to start with parent session to optimize performance
|
||||
* 28-JAN-14 Vishal Gupta Added grand parent logic
|
||||
* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parameter
|
||||
* 28-Jun-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE SID
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE SERIAL
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE SQL_ID
|
||||
UNDEFINE WHERECLAUSE
|
||||
UNDEFINE WHERECLAUSE2
|
||||
UNDEFINE HAVINGCLAUSE
|
||||
|
||||
DEFINE SID="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
DEFINE SERIAL="&&3"
|
||||
DEFINE HOURS="&&4"
|
||||
DEFINE SQL_ID="&&5"
|
||||
DEFINE WHERECLAUSE="&&6"
|
||||
DEFINE WHERECLAUSE2="&&7"
|
||||
DEFINE HAVINGCLAUSE="&&8"
|
||||
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
|
||||
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
|
||||
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
|
||||
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
|
||||
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * AWR - ASH SQL Ids
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * SID = "&&SID"
|
||||
PROMPT * Instance ID = "&&INST_ID"
|
||||
PROMPT * Serial# = "&&SERIAL"
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * SQL Id = "&&SQL_ID"
|
||||
PROMPT * Where Clause = "&&WHERECLAUSE"
|
||||
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
|
||||
PROMPT * Having Clause = "&&HAVINGCLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
|
||||
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
|
||||
COLUMN sql_exec_start FORMAT a18
|
||||
COLUMN sql_exec_end FORMAT a18
|
||||
COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12
|
||||
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
|
||||
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
|
||||
COLUMN current_dop HEADING "DOP" FORMAT 999
|
||||
COLUMN phyread_requests HEADING "Phy|Read|Reqs|(#1000)" FORMAT 999999
|
||||
COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(#1000)" FORMAT 999999
|
||||
COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999
|
||||
COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999
|
||||
COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999
|
||||
COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 999.00
|
||||
COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 9999.00
|
||||
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT /*+ parallel(ash,8) parallel(ash_child,8) */
|
||||
decode(ash_child.qc_session_id, 0, ash_child.session_id, ash.session_id) session_id
|
||||
, decode(ash_child.qc_session_id, 0, ash_child.instance_number, ash.instance_number) instance_number
|
||||
, decode(ash_child.qc_session_id, 0, ash_child.session_serial#, ash.session_serial#) session_serial#
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , TO_CHAR(NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
, TO_CHAR(max(NVL(ash_child.sample_time,ash.sample_time)) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
|
||||
, SUBSTR(REPLACE( max(NVL(ash_child.sample_time,ash.sample_time)) - NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))) ,'+00000000','+')
|
||||
,1,INSTR(REPLACE( max(NVL(ash_child.sample_time,ash.sample_time)) - NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))),'+00000000','+'),'.')-1
|
||||
) duration
|
||||
--&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
&&_IF_ORA_11202_OR_HIGHER , max(trunc(NVL(ash_child.px_flags,ash.px_flags) / 2097152)) current_dop
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash.top_level_sql_id,ash_child.top_level_sql_id) top_level_sql_id
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_read_io_requests,0) + NVL(ash_child.delta_read_io_requests,0) )/power(1000,1)) phyread_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_write_io_requests,0) + NVL(ash_child.delta_write_io_requests,0) )/power(1000,1)) phywrite_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_read_io_bytes,0) + NVL(ash_child.delta_read_io_bytes,0) )/power(1024,3)) phyread
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_write_io_bytes,0) + NVL(ash_child.delta_write_io_bytes,0) )/power(1024,3)) phywrite
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(NVL(ash.delta_interconnect_io_bytes,0) + NVL(ash_child.delta_interconnect_io_bytes,0) )/power(1024,3)) interconnect_io
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(NVL(ash.pga_allocated,0) + NVL(ash_child.pga_allocated,0) )/power(1024,3),2) pga_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(MAX(NVL(ash.temp_space_allocated,0) + NVL(ash_child.temp_space_allocated,0) )/power(1024,3),2) temp_space_allocated
|
||||
FROM v$database d
|
||||
JOIN sys.wrh$_active_session_history ash
|
||||
ON ash.dbid = d.dbid
|
||||
AND ash.instance_number LIKE '&&INST_ID'
|
||||
AND ash.session_id LIKE '&&SID'
|
||||
AND ash.session_serial# LIKE '&&SERIAL'
|
||||
AND ash.sql_id LIKE '&&SQL_ID'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
&&WHERECLAUSE
|
||||
LEFT OUTER JOIN sys.wrh$_active_session_history ash_child
|
||||
ON ash_child.dbid = ash.dbid
|
||||
AND ash_child.qc_instance_id = ash.instance_number
|
||||
AND ash_child.qc_session_id = ash.session_id
|
||||
AND ash_child.qc_session_serial# = ash.session_serial#
|
||||
AND ash_child.qc_session_id <> 0
|
||||
&&_IF_ORA_11gR1_OR_HIGHER AND ash_child.sql_exec_start = ash.sql_exec_start
|
||||
AND ash_child.sample_time > sysdate - (&&HOURS/24)
|
||||
AND ash_child.qc_instance_id LIKE '&&INST_ID'
|
||||
AND ash_child.qc_session_id LIKE '&&SID'
|
||||
AND ash_child.qc_session_serial# LIKE '&&SERIAL'
|
||||
AND ash_child.sql_id LIKE '&&SQL_ID'
|
||||
&&WHERECLAUSE2
|
||||
GROUP BY decode(ash_child.qc_session_id, 0, ash_child.session_id, ash.session_id)
|
||||
, decode(ash_child.qc_session_id, 0, ash_child.instance_number, ash.instance_number)
|
||||
, decode(ash_child.qc_session_id, 0, ash_child.session_serial#, ash.session_serial#)
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ash.sql_exec_id
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ash.sql_exec_start
|
||||
--&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , NVL(ash.top_level_sql_id,ash_child.top_level_sql_id)
|
||||
&&HAVINGCLAUSE
|
||||
--having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 20 -- Physical Read + Write GBs
|
||||
--having (SUM(ash.delta_read_io_bytes) ) / power(1024,3) > 100 -- Physical Write GBs
|
||||
--having (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 100 -- Interconnect IO GBs
|
||||
--having (SUM(ash.pga_allocated) ) / power(1024,3) > 2 -- PGA GBs
|
||||
--having (SUM(ash.temp_space_allocated) ) / power(1024,3) > 10 -- Temp Space GBs
|
||||
ORDER BY
|
||||
max(ash.sample_time) asc
|
||||
&&_IF_ORA_11gR1_OR_HIGHER, NVL(ash.sql_exec_start,MIN(NVL(ash_child.sample_time,ash.sample_time))) ASC
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
189
vg/awr_signature_stats_delta.sql
Normal file
189
vg/awr_signature_stats_delta.sql
Normal file
@@ -0,0 +1,189 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats from AWR
|
||||
* Version : 10.1.0.4 and above
|
||||
* Parameters : 1 - SQL_ID (Use % as wildcard)
|
||||
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
|
||||
* 3 - Number of Days (Default 7 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
|
||||
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
|
||||
* aggregated stats for all instances in output.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE whereclause
|
||||
|
||||
|
||||
DEFINE force_matching_signature="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE days="&&3"
|
||||
DEFINE whereclause="&&4"
|
||||
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=99,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1000"
|
||||
--DEFINE COUNT_SMALL_HEADING="#1000"
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1000000"
|
||||
--DEFINE COUNT_SMALL_HEADING="#mill"
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
--DEFINE COUNT_DIVIDER="1000000"
|
||||
--DEFINE COUNT_HEADING="million"
|
||||
|
||||
DEFINE BYTES_FORMAT=999,999
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="60"
|
||||
--DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
Prompt
|
||||
Prompt ***************************************************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (Delta) - By FORCE_MATCHING_SIGNATURE
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Force Matching Signature = '&&force_matching_signature'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt ***************************************************************************************************
|
||||
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN force_matching_signature HEADING "Force|Matching|Signature" FORMAT 99999999999999999999
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999
|
||||
COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta" FORMAT 999
|
||||
COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time
|
||||
, ss.force_matching_signature
|
||||
, ss.plan_hash_value
|
||||
, ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta
|
||||
, ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta
|
||||
, ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta
|
||||
, ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta
|
||||
, ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta
|
||||
, ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta
|
||||
, ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta
|
||||
, '|' seperator
|
||||
, SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta
|
||||
--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta) px_servers_execs_delta
|
||||
-- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta
|
||||
, SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta
|
||||
, SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta
|
||||
, SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta
|
||||
, SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
|
||||
, ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta
|
||||
, '|' seperator
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta
|
||||
, '|' seperator
|
||||
--, ss.sql_profile
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
, v$system_parameter p
|
||||
where p.name = 'db_block_size'
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.dbid = d.dbid
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.force_matching_signature LIKE '&&force_matching_signature'
|
||||
AND ss.plan_hash_value LIKE '&&plan_hash_value'
|
||||
--AND ss.executions_delta > 0
|
||||
&&whereclause
|
||||
GROUP BY ss.dbid
|
||||
, ss.snap_id
|
||||
, ss.force_matching_signature
|
||||
, ss.plan_hash_value
|
||||
--, ss.sql_profile
|
||||
ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI')
|
||||
, ss.force_matching_signature
|
||||
, ss.plan_hash_value
|
||||
--, ss.sql_profile
|
||||
;
|
||||
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE whereclause
|
||||
|
||||
|
||||
@@footer
|
||||
133
vg/awr_sql_binds.sql
Normal file
133
vg/awr_sql_binds.sql
Normal file
@@ -0,0 +1,133 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQL Binds from AWR
|
||||
* Version : 10.2 and above
|
||||
* Parameters : 1 - SQL_ID
|
||||
* 2 - Number of Days (Default 7 days)
|
||||
* 2 - Whereclause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 27-Aug-15 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE days
|
||||
UNDEFINE whereclause
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE use_force_matching_signature
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE days="&&2"
|
||||
DEFINE whereclause="&&3"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&days','','7','&&days') "_days"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
FROM DUAL
|
||||
;
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
select to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from v$database d
|
||||
, dba_hist_sqlstat ss2
|
||||
where d.dbid = ss2.dbid
|
||||
AND ss2.sql_id = '&&sql_id' and rownum = 1;
|
||||
|
||||
select CASE WHEN '&&force_matching_signature' IS NULL THEN '0'
|
||||
WHEN '&&force_matching_signature' = '' THEN '0'
|
||||
ELSE '&&force_matching_signature'
|
||||
END "_force_matching_signature"
|
||||
from dual
|
||||
;
|
||||
|
||||
set term on
|
||||
|
||||
/************************************/
|
||||
|
||||
Prompt
|
||||
Prompt **************************************************************
|
||||
Prompt * AWR SQL Bind Values
|
||||
Prompt * (Force Matching Signature = '&&force_matching_signature')
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt **************************************************************
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN bind_values HEADING "Bind Values" FORMAT a100
|
||||
COLUMN bind_datatype HEADING "Bind DataType" FORMAT a80
|
||||
|
||||
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, ss.instance_number
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, (select listagg(NVL(name,':B' || position)
|
||||
||'['
|
||||
|| datatype_string || NVL2(scale
|
||||
,'(' || scale || NVL2(precision,','|| precision,'') || ')'
|
||||
,''
|
||||
)
|
||||
|| ']'
|
||||
||'='
|
||||
|| CASE
|
||||
WHEN datatype_string <> 'TIMESTAMP' THEN NVL(value_string,'NULL')
|
||||
ELSE TO_CHAR(ANYDATA.ACCESStimestamp(VALUE_ANYDATA))
|
||||
END
|
||||
,','
|
||||
) WITHIN GROUP (order by position)
|
||||
from table(dbms_sqltune.extract_binds(ss.BIND_DATA))
|
||||
) bind_values
|
||||
/*
|
||||
, (select listagg(NVL(name,':B' || position) || '='
|
||||
|| datatype_string || NVL2(scale,'(' || scale || NVL2(precision,','|| precision, '') || ')' ,'' )
|
||||
,','
|
||||
) WITHIN GROUP (order by position)
|
||||
from table(dbms_sqltune.extract_binds(ss.BIND_DATA))
|
||||
) bind_datatype
|
||||
*/
|
||||
from v$database d
|
||||
JOIN dba_hist_snapshot s ON s.dbid = d.dbid
|
||||
JOIN dba_hist_sqlstat ss ON ss.dbid = s.dbid AND ss.instance_number = s.instance_number AND ss.snap_id = s.snap_id
|
||||
AND ss.executions_delta > 0
|
||||
where s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
WHEN 0 THEN '&&sql_id'
|
||||
ELSE '%'
|
||||
END
|
||||
AND ss.force_matching_signature = '&&force_matching_signature'
|
||||
&&whereclause
|
||||
ORDER BY s.end_interval_time
|
||||
, ss.instance_number
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
38
vg/awr_sql_hints.sql
Normal file
38
vg/awr_sql_hints.sql
Normal file
@@ -0,0 +1,38 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Hints in a SQL Statement
|
||||
* Parameters : 1 - SQLID
|
||||
* 2 - Child Number
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 01-May-12 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
set pages 50
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE child_no="&&2"
|
||||
|
||||
|
||||
SELECT extractvalue(value(d), '/hint') AS outline_hints
|
||||
FROM xmltable('/*/outline_data/hint'
|
||||
passing ( SELECT xmltype(other_xml) AS xmlval
|
||||
FROM v$sql_plan
|
||||
WHERE sql_id LIKE NVL('&sql_id',sql_id)
|
||||
AND child_number = &child_no
|
||||
AND other_xml IS NOT NULL
|
||||
)
|
||||
) d
|
||||
;
|
||||
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE child_no
|
||||
|
||||
@@footer
|
||||
88
vg/awr_sql_signature_search.sql
Normal file
88
vg/awr_sql_signature_search.sql
Normal file
@@ -0,0 +1,88 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Search SQL Text from AWR repository to find SQLId
|
||||
* Parameters : 1 - SQLText to search (Use % as wild card)
|
||||
* 2 - Number of days history to search (Default 7 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-JUL-14 Vishal Gupta Added plan_hash_value to output
|
||||
* 12-JUN-13 Vishal Gupta Added force_matching_signature to output
|
||||
* 08-MAR-12 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE FORCE_MATCHING_SINGATURE
|
||||
UNDEFINE no_of_days
|
||||
|
||||
DEFINE FORCE_MATCHING_SINGATURE="&&1"
|
||||
DEFINE no_of_days="&&2"
|
||||
|
||||
COLUMN _no_of_days NEW_VALUE no_of_days NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&no_of_days','','7','&&no_of_days') "_no_of_days"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT ************************************************************************
|
||||
PROMPT * AWR SQL Text Search by using FORCE_MATCHING_SINGATURE
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - FORCE_MATCHING_SINGATURE - "&&FORCE_MATCHING_SINGATURE"
|
||||
PROMPT * - NoOfDays - "&&no_of_days"
|
||||
PROMPT ************************************************************************
|
||||
|
||||
COLUMN END_INTERVAL_TIME HEADING "Max Snap Time" FORMAT a18
|
||||
COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP
|
||||
COLUMN force_matching_signature HEADING "FORCE_MATCHING_SIGNATURE" FORMAT 999999999999999999999
|
||||
|
||||
set timing on
|
||||
|
||||
/*
|
||||
SELECT --+ FULL(sql) parallel(12)
|
||||
sql.sql_id
|
||||
FROM dba_hist_sqltext sql
|
||||
WHERE upper(sql.sql_text) like upper(q'[&&sqltext]')
|
||||
AND upper(SQL.sql_text) NOT LIKE upper('%dba_hist_sqltext%')
|
||||
;
|
||||
*/
|
||||
|
||||
SELECT --+ FIRST_ROWS LEADING(s) USE_NL(sql ss s ) INDEX(ss.sn) FULL(s)
|
||||
-- FULL(s) FULL(ss) FULL(sql) parallel(12)
|
||||
TO_CHAR(max(s.END_INTERVAL_TIME),'DD-MON-YY HH24:MI:SS') END_INTERVAL_TIME
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ss.force_matching_signature
|
||||
FROM v$database d
|
||||
, dba_hist_snapshot s
|
||||
, dba_hist_sqlstat ss
|
||||
, dba_hist_sqltext sql
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.end_interval_time > sysdate - &&no_of_days
|
||||
AND s.dbid = ss.dbid
|
||||
AND s.instance_number = ss.instance_number
|
||||
AND s.snap_id = ss.snap_id
|
||||
AND ss.dbid = sql.dbid
|
||||
AND ss.sql_id = sql.sql_id
|
||||
AND ss.force_matching_signature = &&FORCE_MATCHING_SINGATURE
|
||||
GROUP BY ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ss.force_matching_signature
|
||||
ORDER BY max(s.END_INTERVAL_TIME) desc
|
||||
;
|
||||
|
||||
set timing off
|
||||
|
||||
@@footer
|
||||
169
vg/awr_sqlid_object_stats.sql
Normal file
169
vg/awr_sqlid_object_stats.sql
Normal file
@@ -0,0 +1,169 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Statistics of a table (including part, sub-par, ind, ind-part, ind-subpart)
|
||||
* Parameters : 1 - SQLId
|
||||
* 2 - SQL Child Number
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ --------------------------------------------------------------------
|
||||
* 14-Jul-15 Vishal Gupta Added last_ddl_time, last_spec_change and created columns to output
|
||||
* 01-Oct-12 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
|
||||
|
||||
|
||||
COLUMN _child_number NEW_VALUE child_number NOPRINT
|
||||
|
||||
set term off
|
||||
|
||||
SELECT DECODE('&&child_number','','0','&&child_number') "_child_number"
|
||||
FROM DUAL
|
||||
/
|
||||
|
||||
set term on
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ***********************************************************************
|
||||
PROMPT * AWR - SQL Statement Object Statistics
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT ***********************************************************************
|
||||
|
||||
COLUMN object_name HEADING "TableName" FORMAT a50
|
||||
COLUMN Object_type HEADING "Object|Type" FORMAT a6
|
||||
COLUMN stale_stats HEADING "Stale|Stats" FORMAT a5
|
||||
COLUMN stattype_locked HEADING "Locked|Stats" FORMAT a5
|
||||
COLUMN last_analyzed HEADING "LastAnalyzed" FORMAT a18
|
||||
COLUMN user_stats HEADING "U|s|e|r" FORMAT a1 TRUNCATE
|
||||
COLUMN sample_size HEADING "SampleSize" FORMAT 9,999,999,999
|
||||
COLUMN num_rows HEADING "RowCount" FORMAT 9,999,999,999
|
||||
COLUMN blocks HEADING "Blocks" FORMAT 9,999,999,999
|
||||
COLUMN Size_MB HEADING "Size(MB)" FORMAT 9,999,999,999
|
||||
COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18
|
||||
COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18
|
||||
COLUMN created HEADING "Created" FORMAT a18
|
||||
|
||||
|
||||
WITH objects AS
|
||||
(
|
||||
SELECT /*+ ALL_ROWS NO_MERGE LEADING (sp) MATERIALIZE */
|
||||
DISTINCT
|
||||
o.owner
|
||||
, o.object_name
|
||||
, o.subobject_name
|
||||
, REPLACE(o.object_type,'MATERIALIZED','MAT') object_type
|
||||
, sp.partition_id
|
||||
, TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time
|
||||
, TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change
|
||||
, TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created
|
||||
FROM dba_hist_sql_plan sp
|
||||
JOIN dba_objects o ON o.owner = sp.object_owner AND o.object_name = sp.object_name
|
||||
/* Dont join by object id, as it does not cover cases when object has been dropped and recreated*/
|
||||
WHERE sp.object_type IS NOT NULL
|
||||
AND sp.sql_id = '&&sql_id'
|
||||
AND sp.plan_hash_value = '&&plan_hash_value'
|
||||
)
|
||||
,stats AS
|
||||
(
|
||||
SELECT /*+ ALL_ROWS NO_MERGE LEADING(o) MATERIALIZE */
|
||||
s.owner
|
||||
|| '.' || s.table_name
|
||||
|| NVL2(s.partition_name,':' || s.partition_name, '')
|
||||
|| NVL2(s.subpartition_name,':' || s.subpartition_name, '')
|
||||
object_name
|
||||
, o.object_type
|
||||
, s.stale_stats
|
||||
, s.stattype_locked
|
||||
, s.last_analyzed
|
||||
, s.sample_size
|
||||
, s.num_rows
|
||||
, s.blocks
|
||||
, (seg.bytes)/1024/1024 Size_MB
|
||||
, o.last_ddl_time
|
||||
, o.last_specification_change
|
||||
, o.created
|
||||
FROM objects o
|
||||
JOIN dba_tab_statistics s ON o.owner = s.owner
|
||||
AND o.object_name = s.table_name
|
||||
AND NVL(s.partition_name,'%') LIKE NVL(o.subobject_name,'%')
|
||||
AND NVL(s.partition_position,0) LIKE NVL(o.partition_id,0)
|
||||
JOIN dba_segments seg ON seg.owner = o.owner
|
||||
AND seg.segment_name = o.object_name
|
||||
--AND seg.segment_type = o.object_type
|
||||
AND NVL(o.subobject_name,'%') LIKE NVL(seg.partition_name,'%')
|
||||
AND NVL(s.partition_position,0) = NVL(o.partition_id,0)
|
||||
WHERE s.table_name NOT LIKE 'BIN$%'
|
||||
AND s.table_name NOT LIKE '%==%'
|
||||
UNION ALL
|
||||
SELECT /*+ ALL_ROWS NO_MERGE LEADING(o) MATERIALIZE */
|
||||
s.owner
|
||||
|| '.' || s.index_name
|
||||
|| NVL2(s.partition_name,':' || s.partition_name, '')
|
||||
|| NVL2(s.subpartition_name,':' || s.subpartition_name, '')
|
||||
object_name
|
||||
, o.object_type
|
||||
, s.stale_stats
|
||||
, s.stattype_locked
|
||||
, s.last_analyzed
|
||||
, s.sample_size
|
||||
, s.num_rows
|
||||
, s.leaf_blocks blocks
|
||||
, (seg.bytes)/1024/1024 Size_MB
|
||||
, o.last_ddl_time
|
||||
, o.last_specification_change
|
||||
, o.created
|
||||
FROM objects o
|
||||
JOIN dba_ind_statistics s ON o.owner = s.owner
|
||||
AND o.object_name = s.index_name
|
||||
AND NVL(o.subobject_name,'%') = NVL(s.partition_name,'%')
|
||||
JOIN dba_segments seg ON seg.owner = o.owner
|
||||
AND seg.segment_name = o.object_name
|
||||
-- AND seg.segment_type = o.object_type
|
||||
AND NVL(seg.partition_name,'%') = NVL(o.subobject_name,'%')
|
||||
WHERE s.table_name NOT LIKE 'BIN$%'
|
||||
AND s.index_name NOT LIKE 'BIN$%'
|
||||
AND s.table_name NOT LIKE '%==%'
|
||||
AND s.index_name NOT LIKE '%==%'
|
||||
)
|
||||
SELECT /*+ ALL_ROWS */
|
||||
object_name
|
||||
, object_type
|
||||
, stale_stats
|
||||
, stattype_locked
|
||||
, to_char(s.last_analyzed,'DD-MON-YY HH24:MI:SS') last_analyzed
|
||||
, sample_size
|
||||
, num_rows
|
||||
, blocks
|
||||
, Size_MB
|
||||
, last_ddl_time
|
||||
, last_specification_change
|
||||
, created
|
||||
FROM stats s
|
||||
--ORDER BY s.last_analyzed ASC
|
||||
ORDER BY object_name
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
64
vg/awr_sqlid_objects.sql
Normal file
64
vg/awr_sqlid_objects.sql
Normal file
@@ -0,0 +1,64 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display objects used in a SQL Id
|
||||
* Parameters : 1 - SQLId
|
||||
* 2 - SQL Child Number
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ --------------------------------------------------------------------
|
||||
* 22-Jul-15 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ***********************************************************************
|
||||
PROMPT * Objects Used in a SQL Statement
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT ***********************************************************************
|
||||
|
||||
COLUMN object_name HEADING "TableName" FORMAT a50
|
||||
COLUMN Object_type HEADING "Object|Type" FORMAT a15
|
||||
COLUMN Size_MB HEADING "Size(MB)" FORMAT 9,999,999,999
|
||||
COLUMN last_ddl_time HEADING "LastDDLTime" FORMAT a18
|
||||
COLUMN last_specification_change HEADING "Last|Specification|Change" FORMAT a18
|
||||
COLUMN created HEADING "Created" FORMAT a18
|
||||
|
||||
SELECT DISTINCT
|
||||
o.owner || '.' || o.object_name || NVL2(o.subobject_name,':' || o.subobject_name, '') object_name
|
||||
, REPLACE(o.object_type,'MATERIALIZED','MAT') object_type
|
||||
, TO_CHAR(o.last_ddl_time,'DD-MON-YY HH24:MI:SS') last_ddl_time
|
||||
, TO_CHAR(TO_DATE(o.timestamp,'YYYY-MM-DD HH24:MI:SS'),'DD-MON-YY HH24:MI:SS') last_specification_change
|
||||
, TO_CHAR(o.created,'DD-MON-YY HH24:MI:SS') created
|
||||
FROM dba_hist_sql_plan sp
|
||||
JOIN dba_objects o ON o.owner = sp.object_owner AND o.object_name = sp.object_name AND ( sp.object# = o.object_ID OR o.object_type not like '%PARTITION')
|
||||
/* Dont join by object id, as it does not cover cases when object has been dropped and recreated*/
|
||||
WHERE sp.object_type IS NOT NULL
|
||||
AND sp.sql_id = '&&sql_id'
|
||||
AND sp.plan_hash_value = '&&plan_hash_value'
|
||||
ORDER BY 1
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
125
vg/awr_sqlid_tree.sql
Normal file
125
vg/awr_sqlid_tree.sql
Normal file
@@ -0,0 +1,125 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQL ID Heirarchy from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID
|
||||
* 2 - Number of Days (Default 7 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 07-Mar-13 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE days
|
||||
UNDEFINE whereclause
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE days="&&2"
|
||||
DEFINE whereclause="&&3"
|
||||
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
|
||||
Prompt
|
||||
Prompt **************************************************************
|
||||
Prompt * AWR SQL Execution Hierarchy
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt **************************************************************
|
||||
|
||||
/*
|
||||
|
||||
COLUMN sample_time HEADING "SampleTime" FORMAT a18
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a50
|
||||
COLUMN sql_opname HEADING "SQL Opname" FORMAT a10
|
||||
|
||||
|
||||
SELECT --+ parallel(ash 10)
|
||||
TO_CHAR(ash.sample_time,'DD-MON-YY HH24:MI:SS') sample_time
|
||||
, LPAD(' ',level*4,'`---') || ash.sql_id sql_id
|
||||
, ash.sql_opname
|
||||
FROM dba_hist_active_sess_history ash
|
||||
WHERE ash.sample_time > sysdate - '&&days'
|
||||
&&whereclause
|
||||
START WITH ash.top_level_sql_id = '&&sql_id'
|
||||
CONNECT BY PRIOR ash.top_level_sql_id = ash.sql_id
|
||||
ORDER BY ash.sample_time
|
||||
;
|
||||
*/
|
||||
|
||||
|
||||
COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999
|
||||
COLUMN sql_exec_start FORMAT a20
|
||||
COLUMN sql_exec_end FORMAT a27
|
||||
COLUMN duration FORMAT a23
|
||||
COLUMN sql_opname FORMAT a20
|
||||
|
||||
SELECT DISTINCT
|
||||
ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.FORCE_MATCHING_SIGNATURE
|
||||
, ash.top_level_sql_id
|
||||
FROM dba_hist_active_sess_history ash
|
||||
, v$database d
|
||||
WHERE ash.dbid = d.dbid
|
||||
AND ash.top_level_sql_id = '&&sql_id'
|
||||
AND ash.sample_time > sysdate - '&&days'
|
||||
;
|
||||
|
||||
|
||||
|
||||
SELECT --ash.sql_exec_id,
|
||||
TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
, max(ash.sample_time) sql_exec_end
|
||||
, max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)) duration
|
||||
, ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.FORCE_MATCHING_SIGNATURE
|
||||
, ash.top_level_sql_id
|
||||
FROM dba_hist_active_sess_history ash
|
||||
, v$database d
|
||||
WHERE ash.dbid = d.dbid
|
||||
AND ash.top_level_sql_id = '&&sql_id'
|
||||
AND ash.sample_time > sysdate - '&&days'
|
||||
GROUP BY ash.FORCE_MATCHING_SIGNATURE
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_opname
|
||||
, ash.top_level_sql_id
|
||||
ORDER BY max(ash.sample_time) asc
|
||||
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
42
vg/awr_sqlplan_flips.sql
Normal file
42
vg/awr_sqlplan_flips.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display all SQL Ids with degraded execution plan flips
|
||||
* Parameters : 1 - Number of days
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 11-Oct-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE DAYS
|
||||
DEFINE DAYS="&&1"
|
||||
|
||||
COLUMN _DAYS NEW_VALUE DAYS NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&DAYS','','7','&&DAYS') "_DAYS"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
DEFINE elapsed_time_threshold=
|
||||
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
244
vg/awr_sqlstats.sql
Normal file
244
vg/awr_sqlstats.sql
Normal file
@@ -0,0 +1,244 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID
|
||||
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
|
||||
* 3 - Number of Days (Default 7 days)
|
||||
* 4 - Whereclause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 10-Feb-16 Vishal Gupta Add following columns to output
|
||||
* - End of Fetch Count
|
||||
* - Phy Read Requests
|
||||
* - Phy Write Requests
|
||||
* Added conditional use of follwoing based on version
|
||||
* - Force matching signature
|
||||
* 13-Feb-14 Vishal Gupta Add PX_SERVERS to output
|
||||
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
|
||||
* aggregated stats for all instances in output.
|
||||
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE whereclause
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE use_force_matching_signature
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE days="&&3"
|
||||
DEFINE whereclause="&&4"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=99,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1000"
|
||||
--DEFINE COUNT_SMALL_HEADING="#1000"
|
||||
|
||||
DEFINE COUNT_FORMAT=99,999
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE COUNT_LARGE_FORMAT=99,999
|
||||
--DEFINE COUNT_LARGE_DIVIDER="1"
|
||||
--DEFINE COUNT_LARGE_HEADING="#"
|
||||
DEFINE COUNT_LARGE_DIVIDER="1000"
|
||||
DEFINE COUNT_LARGE_HEADING="#1000"
|
||||
--DEFINE COUNT_LARGE_DIVIDER="1000000"
|
||||
--DEFINE COUNT_LARGE_HEADING="million"
|
||||
|
||||
|
||||
|
||||
DEFINE BYTES_FORMAT=99,999
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
DEFINE TIME_DIVIDER="60"
|
||||
DEFINE TIME_HEADING="min"
|
||||
|
||||
/************************************/
|
||||
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
select NULL
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from v$database d
|
||||
, dba_hist_sqlstat ss2
|
||||
where d.dbid = ss2.dbid
|
||||
AND ss2.sql_id = '&&sql_id'
|
||||
and rownum = 1
|
||||
;
|
||||
|
||||
select CASE WHEN '&&force_matching_signature' IS NULL THEN '0'
|
||||
WHEN '&&force_matching_signature' = '' THEN '0'
|
||||
ELSE '&&force_matching_signature'
|
||||
END "_force_matching_signature"
|
||||
from dual
|
||||
;
|
||||
set term on
|
||||
|
||||
/************************************/
|
||||
|
||||
Prompt
|
||||
Prompt **************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (Cummulative)
|
||||
Prompt * (Force Matching Signature = '&&force_matching_signature')
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt **************************************************************
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN iowait_total HEADING "IO|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN apwait_total HEADING "Appl|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN ccwait_total HEADING "Conc|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN clwait_total HEADING "Cluster|Wait|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN plsexec_time_total HEADING "PLsexec|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN cpu_time_total HEADING "CPU|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN elapsed_time_total HEADING "Elapsed|Time|Total|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN executions_delta HEADING "Exec|Delta|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN executions_total HEADING "Exec|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT
|
||||
COLUMN end_of_fetch_count_total HEADING "End Of|Fetch|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT
|
||||
COLUMN invalidations_total HEADING "Invalid|Total|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT
|
||||
COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT 999
|
||||
--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN rows_processed_total HEADING "Rows|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
|
||||
COLUMN sorts_total HEADING "Sorts|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN buffer_gets_total HEADING "Buffer|Gets|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
|
||||
COLUMN physical_read_requests_total HEADING "Phy|Read|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
|
||||
COLUMN physical_write_requests_total HEADING "Phy|Write|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
|
||||
COLUMN direct_writes_total HEADING "Direct|Path|Write|Total|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
|
||||
COLUMN optimized_physical_reads_total HEADING "Optim'd|Phy|Read|Req|(&COUNT_LARGE_HEADING)" FORMAT &COUNT_LARGE_FORMAT
|
||||
COLUMN physical_read_bytes_total HEADING "Phy|Read|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_total HEADING "Phy|Write|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN cell_uncompressed_bytes_total HEADING "Cell|UnComp|Total|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
SELECT TO_CHAR(MAX(ss.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time
|
||||
--, ss.instance_number
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ROUND(SUM(ss.iowait_total)/1000000/&TIME_DIVIDER) iowait_total
|
||||
, ROUND(SUM(ss.apwait_total)/1000000/&TIME_DIVIDER) apwait_total
|
||||
, ROUND(SUM(ss.ccwait_total)/1000000/&TIME_DIVIDER) ccwait_total
|
||||
, ROUND(SUM(ss.clwait_total)/1000000/&TIME_DIVIDER) clwait_total
|
||||
--, ROUND(SUM(ss.plsexec_time_total)/1000000/&TIME_DIVIDER) plsexec_time_total
|
||||
, ROUND(SUM(ss.cpu_time_total)/1000000/&TIME_DIVIDER) cpu_time_total
|
||||
, ROUND(SUM(ss.elapsed_time_total)/1000000/&TIME_DIVIDER) elapsed_time_total
|
||||
, '|' seperator
|
||||
, SUM(ss.executions_total)/&COUNT_DIVIDER executions_total
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_total)/&COUNT_SMALL_DIVIDER px_servers_execs_total
|
||||
, SUM(ss.sorts_total)/&COUNT_SMALL_DIVIDER sorts_total
|
||||
, SUM(ss.end_of_fetch_count_total )/&COUNT_DIVIDER end_of_fetch_count_total
|
||||
--, SUM(ss.invalidations_total)/&COUNT_DIVIDER invalidations_total
|
||||
, SUM(ss.rows_processed_total)/&COUNT_LARGE_DIVIDER rows_processed_total
|
||||
, SUM(ss.buffer_gets_total)/&COUNT_LARGE_DIVIDER buffer_gets_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.physical_read_requests_total)/&COUNT_LARGE_DIVIDER) physical_read_requests_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.physical_write_requests_total)/&COUNT_LARGE_DIVIDER) physical_write_requests_total
|
||||
, SUM(ROUND(ss.direct_writes_total)/&COUNT_LARGE_DIVIDER) direct_writes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ROUND(ss.optimized_physical_reads_total)/&COUNT_LARGE_DIVIDER) optimized_physical_reads_total
|
||||
, '|' seperator
|
||||
-- , SUM(ss.buffer_gets_delta* ss.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_total)/&BYTES_DIVIDER io_interconnect_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_total)/&BYTES_DIVIDER physical_read_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_total)/&BYTES_DIVIDER physical_write_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_total)/&BYTES_DIVIDER io_offload_elig_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_total)/&BYTES_DIVIDER io_offload_return_bytes_total
|
||||
--&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.cell_uncompressed_bytes_total)/&BYTES_DIVIDER cell_uncompressed_bytes_total
|
||||
, '|' seperator
|
||||
, ss.sql_profile
|
||||
-- , ss.module
|
||||
-- , ss.action
|
||||
FROM
|
||||
(
|
||||
SELECT s.end_interval_time
|
||||
, ss.*
|
||||
, p.value
|
||||
, NVL(LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id),0) next_snap_id
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
, v$system_parameter p
|
||||
where p.name = 'db_block_size'
|
||||
AND s.dbid = d.dbid
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
&&_IF_ORA_10gR1_OR_LOWER AND ss.sql_id = '&&sql_id'
|
||||
&&_IF_ORA_10gR2_OR_HIGHER AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
&&_IF_ORA_10gR2_OR_HIGHER WHEN 0 THEN '&&sql_id'
|
||||
&&_IF_ORA_10gR2_OR_HIGHER ELSE '%'
|
||||
&&_IF_ORA_10gR2_OR_HIGHER END
|
||||
&&_IF_ORA_10gR2_OR_HIGHER AND ss.force_matching_signature = '&&force_matching_signature'
|
||||
AND ss.plan_hash_value LIKE '&&plan_hash_value'
|
||||
&&whereclause
|
||||
) ss
|
||||
WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id)
|
||||
GROUP BY ss.dbid
|
||||
, ss.snap_id
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ss.sql_profile
|
||||
ORDER BY TO_CHAR(MAX(ss.end_interval_time),'YYYY-MM-DD HH24:MI')
|
||||
, ss.plan_hash_value
|
||||
, ss.sql_profile
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
206
vg/awr_sqlstats_daily.sql
Normal file
206
vg/awr_sqlstats_daily.sql
Normal file
@@ -0,0 +1,206 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID
|
||||
* 2 - Number of Days (Default 30 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
|
||||
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
|
||||
* aggregated stats for all instances in output.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE days
|
||||
UNDEFINE whereclause
|
||||
UNDEFINE force_matching_signature
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE days="&&2"
|
||||
DEFINE whereclause="&&4"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&days','','30','&&days') "_days"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=999,999
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
--DEFINE COUNT_SMALL_HEADING="#"
|
||||
DEFINE COUNT_SMALL_DIVIDER="1000"
|
||||
DEFINE COUNT_SMALL_HEADING="#1000"
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1000000"
|
||||
--DEFINE COUNT_SMALL_HEADING="#mill"
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=99,999,999
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
--DEFINE COUNT_DIVIDER="1000000"
|
||||
--DEFINE COUNT_HEADING="million"
|
||||
|
||||
DEFINE COUNT_LARGE_FORMAT=99,999,999
|
||||
--DEFINE COUNT_LARGE_DIVIDER="1"
|
||||
--DEFINE COUNT_LARGE_HEADING="#"
|
||||
DEFINE COUNT_LARGE_DIVIDER="1000"
|
||||
DEFINE COUNT_LARGE_HEADING="#1000"
|
||||
--DEFINE COUNT_LARGE_DIVIDER="1000000"
|
||||
--DEFINE COUNT_LARGE_HEADING="million"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=999,999
|
||||
--DEFINE TIME_DIVIDER="1"
|
||||
--DEFINE TIME_HEADING="sec"
|
||||
DEFINE TIME_DIVIDER="60"
|
||||
DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
|
||||
/************************************/
|
||||
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
set term off
|
||||
select to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from v$database d
|
||||
JOIN sys.WRH$_SQLSTAT ss2 on ss2.dbid = d.dbid
|
||||
where ss2.sql_id = '&&sql_id' and rownum = 1;
|
||||
set term on
|
||||
/************************************/
|
||||
|
||||
Prompt
|
||||
Prompt ***************************************************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (Daily - Delta)
|
||||
Prompt * (Force Matching Signature = '&&force_matching_signature')
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt ***************************************************************************************************
|
||||
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Date" FORMAT a9
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 999999999999999999999
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999
|
||||
COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&&COUNT_HEADING)" FORMAT 999
|
||||
COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_LARGE_HEADING)" FORMAT &&COUNT_LARGE_FORMAT
|
||||
COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
SELECT TO_CHAR(TRUNC(s.end_interval_time,'DD'),'DD-MON-YY') end_interval_time
|
||||
, ss.force_matching_signature
|
||||
, max(ss.sql_id) sql_id
|
||||
--, ss.plan_hash_value
|
||||
, ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta
|
||||
, ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta
|
||||
, ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta
|
||||
, ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta
|
||||
, ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta
|
||||
, ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta
|
||||
, ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta
|
||||
, '|' seperator
|
||||
, SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta
|
||||
--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/&&COUNT_DIVIDER px_servers_execs_delta
|
||||
-- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta
|
||||
, SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta
|
||||
, SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta
|
||||
, SUM(ss.buffer_gets_delta)/&&COUNT_LARGE_DIVIDER buffer_gets_delta
|
||||
, SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
|
||||
, ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta
|
||||
, '|' seperator
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta
|
||||
, '|' seperator
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
, v$system_parameter p
|
||||
where p.name = 'db_block_size'
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.dbid = d.dbid
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
WHEN 0 THEN '&&sql_id'
|
||||
ELSE '%'
|
||||
END
|
||||
AND ss.force_matching_signature LIKE '&&force_matching_signature'
|
||||
--AND ss.executions_delta > 0
|
||||
&&whereclause
|
||||
GROUP BY ss.dbid
|
||||
, TRUNC(s.end_interval_time,'DD')
|
||||
, ss.force_matching_signature
|
||||
--, ss.plan_hash_value
|
||||
ORDER BY TRUNC(s.end_interval_time,'DD')
|
||||
, ss.force_matching_signature
|
||||
--, ss.plan_hash_value
|
||||
;
|
||||
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE whereclause
|
||||
|
||||
|
||||
@@footer
|
||||
201
vg/awr_sqlstats_delta.sql
Normal file
201
vg/awr_sqlstats_delta.sql
Normal file
@@ -0,0 +1,201 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID (Use % as wildcard)
|
||||
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
|
||||
* 3 - Number of Days (Default 7 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
|
||||
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
|
||||
* aggregated stats for all instances in output.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE days="&&3"
|
||||
DEFINE whereclause="&&4"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=99,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1000"
|
||||
--DEFINE COUNT_SMALL_HEADING="#1000"
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1000000"
|
||||
--DEFINE COUNT_SMALL_HEADING="#mill"
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
--DEFINE COUNT_DIVIDER="1000000"
|
||||
--DEFINE COUNT_HEADING="million"
|
||||
|
||||
DEFINE BYTES_FORMAT=999,999
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
--DEFINE TIME_DIVIDER="1"
|
||||
--DEFINE TIME_HEADING="sec"
|
||||
DEFINE TIME_DIVIDER="60"
|
||||
DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
|
||||
/************************************/
|
||||
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
set term off
|
||||
select to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from dba_hist_sqlstat ss2
|
||||
where ss2.sql_id = '&&sql_id' and rownum = 1;
|
||||
set term on
|
||||
/************************************/
|
||||
|
||||
Prompt
|
||||
Prompt ***************************************************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (Delta)
|
||||
Prompt * (Force Matching Signature = '&&force_matching_signature')
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt ***************************************************************************************************
|
||||
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999
|
||||
COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta" FORMAT 999
|
||||
COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta
|
||||
, ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta
|
||||
, ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta
|
||||
, ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta
|
||||
, ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta
|
||||
, ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta
|
||||
, ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta
|
||||
, '|' seperator
|
||||
, SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta) px_servers_execs_delta
|
||||
-- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta
|
||||
, SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta
|
||||
, SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta
|
||||
, SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta
|
||||
, SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
|
||||
, ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta
|
||||
, '|' seperator
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta
|
||||
, '|' seperator
|
||||
, ss.sql_profile
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
, v$system_parameter p
|
||||
where p.name = 'db_block_size'
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.dbid = d.dbid
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
WHEN 0 THEN '&&sql_id'
|
||||
ELSE '%'
|
||||
END
|
||||
AND ss.force_matching_signature LIKE '&&force_matching_signature'
|
||||
AND ss.plan_hash_value LIKE '&&plan_hash_value'
|
||||
--AND ss.executions_delta > 0
|
||||
&&whereclause
|
||||
GROUP BY ss.dbid
|
||||
, ss.snap_id
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ss.sql_profile
|
||||
ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI')
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ss.sql_profile
|
||||
;
|
||||
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE whereclause
|
||||
|
||||
|
||||
@@footer
|
||||
201
vg/awr_sqlstats_delta_per_exec.sql
Normal file
201
vg/awr_sqlstats_delta_per_exec.sql
Normal file
@@ -0,0 +1,201 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats per execution from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID
|
||||
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
|
||||
* 3 - Number of Days (Default 7 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE whereclause
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE days="&&3"
|
||||
DEFINE whereclause="&&4"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term on
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
FROM DUAL;
|
||||
set term off
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=9,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999,999
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
|
||||
--DEFINE TIME_DIVIDER="0.001"
|
||||
--DEFINE TIME_HEADING="msec"
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="60"
|
||||
--DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
/************************************/
|
||||
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
set term off
|
||||
select to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from dba_hist_sqlstat ss2
|
||||
where ss2.sql_id = '&&sql_id' and rownum = 1;
|
||||
set term on
|
||||
/************************************/
|
||||
|
||||
|
||||
Prompt
|
||||
Prompt ******************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (All Figures Delta are per execution)
|
||||
Prompt * (Force Matching Signature = '&&force_matching_signature')
|
||||
Prompt *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt ******************************************************************
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations_delta HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999
|
||||
COLUMN iowait_delta HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN apwait_delta HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN ccwait_delta HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN clwait_delta HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN plsexec_time_delta HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN cpu_time_delta HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN elapsed_time_delta HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 9,999
|
||||
COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 9,999
|
||||
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999
|
||||
--COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT
|
||||
COLUMN rows_processed_delta HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_delta HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT
|
||||
COLUMN buffer_gets_delta HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN direct_writes_delta HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_read_bytes_delta HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_delta HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
|
||||
|
||||
SELECT TO_CHAR(MAX(s.end_interval_time),'DD-MON-YY HH24:MI') end_interval_time
|
||||
--, ss.instance_number
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, '|' seperator
|
||||
, ROUND(SUM(ss.iowait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) iowait_delta
|
||||
, ROUND(SUM(ss.apwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) apwait_delta
|
||||
, ROUND(SUM(ss.ccwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) ccwait_delta
|
||||
, ROUND(SUM(ss.clwait_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) clwait_delta
|
||||
, ROUND(SUM(ss.plsexec_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) plsexec_time_delta
|
||||
, ROUND(SUM(ss.cpu_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) cpu_time_delta
|
||||
, ROUND(SUM(ss.elapsed_time_delta)/1000000/SUM(GREATEST(ss.executions_delta,1))/&&TIME_DIVIDER) elapsed_time_delta
|
||||
, '|' seperator
|
||||
, SUM(GREATEST(ss.executions_total,1))/&&COUNT_DIVIDER executions_total
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER px_servers_execs_delta
|
||||
-- , ss.invalidations_delta/GREATEST(ss.executions_delta,1)/&&COUNT_DIVIDER invalidations_delta
|
||||
, SUM(ss.rows_processed_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER rows_processed_delta
|
||||
, SUM(ss.sorts_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_SMALL_DIVIDER sorts_delta
|
||||
, SUM(ss.buffer_gets_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER buffer_gets_delta
|
||||
, ROUND(SUM(ss.direct_writes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER) direct_writes_delta
|
||||
, '|' seperator
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_interconnect_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER physical_read_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER physical_write_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/SUM(GREATEST(ss.executions_delta,1))/&&COUNT_DIVIDER optimized_physical_reads_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_offload_elig_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/SUM(GREATEST(ss.executions_delta,1))/&&BYTES_DIVIDER io_offload_return_bytes_delta
|
||||
, '|' seperator
|
||||
, ss.sql_profile
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
where ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.dbid = d.dbid
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
WHEN 0 THEN '&&sql_id'
|
||||
ELSE '%'
|
||||
END
|
||||
AND ss.force_matching_signature LIKE '&&force_matching_signature'
|
||||
AND ss.plan_hash_value LIKE '&&plan_hash_value'
|
||||
--AND ss.executions_delta > 0
|
||||
&&whereclause
|
||||
GROUP BY ss.dbid
|
||||
, ss.snap_id
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ss.sql_profile
|
||||
ORDER BY TO_CHAR(MAX(s.end_interval_time),'YYYY-MM-DD HH24:MI')
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ss.sql_profile
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
201
vg/awr_sqlstats_per_exec.sql
Normal file
201
vg/awr_sqlstats_per_exec.sql
Normal file
@@ -0,0 +1,201 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats per execution from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID (Use % as wildcard)
|
||||
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
|
||||
* 3 - Number of Days (Default 7 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE whereclause
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE days="&&3"
|
||||
DEFINE whereclause="&&4"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
|
||||
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=9,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="100"
|
||||
--DEFINE COUNT_HEADING="#100"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9999
|
||||
|
||||
--DEFINE TIME_DIVIDER="0.001"
|
||||
--DEFINE TIME_HEADING="msec"
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="60"
|
||||
--DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
/************************************/
|
||||
|
||||
set term off
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
select to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from dba_hist_sqlstat ss2
|
||||
where ss2.sql_id = '&&sql_id' and rownum = 1;
|
||||
set term on
|
||||
/************************************/
|
||||
|
||||
|
||||
Prompt
|
||||
Prompt ******************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (All Figures are per execution)
|
||||
Prompt * (Force Matching Signature = '&&force_matching_signature')
|
||||
Prompt *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt ******************************************************************
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations_total HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999
|
||||
COLUMN iowait_total HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN apwait_total HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN ccwait_total HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN clwait_total HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN plsexec_time_total HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN cpu_time_total HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN elapsed_time_total HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 999,999
|
||||
COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 999,999
|
||||
COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999
|
||||
--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN rows_processed_total HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_total HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT
|
||||
COLUMN buffer_gets_total HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999,999
|
||||
COLUMN direct_writes_total HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_read_bytes_total HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_total HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
|
||||
|
||||
SELECT TO_CHAR(ss.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, ss.instance_number
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, '|' seperator
|
||||
, ROUND(ss.iowait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) iowait_total
|
||||
, ROUND(ss.apwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) apwait_total
|
||||
, ROUND(ss.ccwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) ccwait_total
|
||||
, ROUND(ss.clwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) clwait_total
|
||||
, ROUND(ss.plsexec_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) plsexec_time_total
|
||||
, ROUND(ss.cpu_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) cpu_time_total
|
||||
, ROUND(ss.elapsed_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) elapsed_time_total
|
||||
, '|' seperator
|
||||
, ss.executions_delta/&&COUNT_DIVIDER executions_delta
|
||||
, ss.executions_total/&&COUNT_DIVIDER executions_total
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , ss.px_servers_execs_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER px_servers_execs_total
|
||||
-- , ss.invalidations_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER invalidations_total
|
||||
, ss.rows_processed_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER rows_processed_total
|
||||
, ss.sorts_total/GREATEST(ss.executions_total,1)/&&COUNT_SMALL_DIVIDER sorts_total
|
||||
, ss.buffer_gets_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER buffer_gets_total
|
||||
, ROUND(ss.direct_writes_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER) direct_writes_total
|
||||
, '|' seperator
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_interconnect_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_interconnect_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_read_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_write_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER optimized_physical_reads_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_elig_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_elig_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_return_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_return_bytes_total
|
||||
, '|' seperator
|
||||
, ss.sql_profile
|
||||
FROM
|
||||
(
|
||||
SELECT s.end_interval_time
|
||||
, ss.*
|
||||
, LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id) next_snap_id
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
where ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.dbid = d.dbid
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
WHEN 0 THEN '&&sql_id'
|
||||
ELSE '%'
|
||||
END
|
||||
AND ss.force_matching_signature LIKE '&&force_matching_signature'
|
||||
AND ss.plan_hash_value LIKE '&&plan_hash_value'
|
||||
&&whereclause
|
||||
) ss
|
||||
WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id)
|
||||
ORDER BY TO_CHAR(ss.end_interval_time,'YYYY-MM-DD HH24:MI')
|
||||
, ss.instance_number
|
||||
;
|
||||
|
||||
@@footer
|
||||
201
vg/awr_sqlstats_per_exec_b.sql
Normal file
201
vg/awr_sqlstats_per_exec_b.sql
Normal file
@@ -0,0 +1,201 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats per execution from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID (Use % as wildcard)
|
||||
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
|
||||
* 3 - Number of Days (Default 7 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE whereclause
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE days="&&3"
|
||||
DEFINE whereclause="&&4"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
|
||||
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&days','','7','&&days') "_days"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=9,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999,999
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="100"
|
||||
--DEFINE COUNT_HEADING="#100"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9999
|
||||
|
||||
--DEFINE TIME_DIVIDER="0.001"
|
||||
--DEFINE TIME_HEADING="msec"
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="60"
|
||||
--DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
/************************************/
|
||||
|
||||
set term off
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
select to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from dba_hist_sqlstat ss2
|
||||
where ss2.sql_id = '&&sql_id' and rownum = 1;
|
||||
set term on
|
||||
/************************************/
|
||||
|
||||
|
||||
Prompt
|
||||
Prompt ******************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (All Figures are per execution)
|
||||
Prompt * (Force Matching Signature = '&&force_matching_signature')
|
||||
Prompt *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt ******************************************************************
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a15
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations_total HEADING "Invalid|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999
|
||||
COLUMN iowait_total HEADING "IO|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN apwait_total HEADING "Appl|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN ccwait_total HEADING "Conc|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN clwait_total HEADING "Cluster|Wait|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN plsexec_time_total HEADING "PLsexec|Time|(&&TIME_HEADING)|Per|Exec" FORMAT &&TIME_FORMAT
|
||||
COLUMN cpu_time_total HEADING "CPU|Time|(&&TIME_HEADING)|Per|Exec" FORMAT 9999999
|
||||
COLUMN elapsed_time_total HEADING "Elapsed|Time|(&&TIME_HEADING)|Per|Exec" FORMAT 99999999
|
||||
COLUMN executions_delta HEADING "Delta|Exec|(&&COUNT_HEADING)" FORMAT 9,999,999,999
|
||||
COLUMN executions_total HEADING "Total|Exec|(&&COUNT_HEADING)" FORMAT 9,999,999,999
|
||||
COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT 999
|
||||
--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN rows_processed_total HEADING "Rows|(&&COUNT_HEADING)|Per|Exec" 9999999999
|
||||
COLUMN sorts_total HEADING "Sorts|(&&COUNT_SMALL_HEADING)|Per|Exec" FORMAT &&COUNT_SMALL_FORMAT
|
||||
COLUMN buffer_gets_total HEADING "Buffer|Gets|(&&COUNT_HEADING)|Per|Exec" FORMAT 9,999,999
|
||||
COLUMN direct_writes_total HEADING "Direct|WriteReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_interconnect_bytes_total HEADING "IO|Inter|Connect|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_read_bytes_total HEADING "Phy|Read|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_total HEADING "Phy|Write|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN optimized_physical_reads_total HEADING "Optimized|Phy|ReadReq|(&&COUNT_HEADING)|Per|Exec" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_offload_elig_bytes_total HEADING "IO|Offload|Elig|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_total HEADING "IO|Offload|Return|(&&BYTES_HEADING)|Per|Exec" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
|
||||
|
||||
SELECT TO_CHAR(ss.end_interval_time,'DD-MON-YY HH24:MI') end_interval_time
|
||||
, ss.instance_number
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, '|' seperator
|
||||
, ROUND(ss.iowait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) iowait_total
|
||||
, ROUND(ss.apwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) apwait_total
|
||||
, ROUND(ss.ccwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) ccwait_total
|
||||
, ROUND(ss.clwait_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) clwait_total
|
||||
, ROUND(ss.plsexec_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) plsexec_time_total
|
||||
, ROUND(ss.cpu_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) cpu_time_total
|
||||
, ROUND(ss.elapsed_time_total/1000000/GREATEST(ss.executions_total,1)/&&TIME_DIVIDER) elapsed_time_total
|
||||
, '|' seperator
|
||||
, ss.executions_delta/&&COUNT_DIVIDER executions_delta
|
||||
, ss.executions_total/&&COUNT_DIVIDER executions_total
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , ss.px_servers_execs_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER px_servers_execs_total
|
||||
-- , ss.invalidations_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER invalidations_total
|
||||
, ss.rows_processed_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER rows_processed_total
|
||||
, ss.sorts_total/GREATEST(ss.executions_total,1)/&&COUNT_SMALL_DIVIDER sorts_total
|
||||
, ss.buffer_gets_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER buffer_gets_total
|
||||
, ROUND(ss.direct_writes_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER) direct_writes_total
|
||||
, '|' seperator
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_interconnect_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_interconnect_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_read_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER physical_write_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads_total/GREATEST(ss.executions_total,1)/&&COUNT_DIVIDER optimized_physical_reads_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_elig_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_elig_bytes_total
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_offload_return_bytes_total/GREATEST(ss.executions_total,1)/&&BYTES_DIVIDER io_offload_return_bytes_total
|
||||
, '|' seperator
|
||||
, ss.sql_profile
|
||||
FROM
|
||||
(
|
||||
SELECT s.end_interval_time
|
||||
, ss.*
|
||||
, LEAD (ss.snap_id) OVER (ORDER BY ss.dbid, ss.instance_number, ss.snap_id) next_snap_id
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
where ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.dbid = d.dbid
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
WHEN 0 THEN '&&sql_id'
|
||||
ELSE '%'
|
||||
END
|
||||
AND ss.force_matching_signature LIKE '&&force_matching_signature'
|
||||
AND ss.plan_hash_value LIKE '&&plan_hash_value'
|
||||
&&whereclause
|
||||
) ss
|
||||
WHERE (ss.executions_delta > 0 OR ss.snap_id + 1 <> ss.next_snap_id)
|
||||
ORDER BY TO_CHAR(ss.end_interval_time,'YYYY-MM-DD HH24:MI')
|
||||
, ss.instance_number
|
||||
;
|
||||
|
||||
@@footer
|
||||
155
vg/awr_sqlstats_per_exec_new.sql
Normal file
155
vg/awr_sqlstats_per_exec_new.sql
Normal file
@@ -0,0 +1,155 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats per execution from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID
|
||||
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
|
||||
* 3 - Number of Days (Default 7 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
DEFINE sqlid="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE days="&&3"
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=9,999,999,999
|
||||
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
|
||||
--DEFINE TIME_DIVIDER="0.001"
|
||||
--DEFINE TIME_HEADING="msec"
|
||||
--DEFINE TIME_DIVIDER="1"
|
||||
--DEFINE TIME_HEADING="sec"
|
||||
DEFINE TIME_DIVIDER="60"
|
||||
DEFINE TIME_HEADING="min"
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Snap Time" FORMAT a18
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations_delta HEADING "Invalid|(&COUNT_HEADING)|PerExec" FORMAT 9,999
|
||||
COLUMN iowait_delta HEADING "IO|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
|
||||
COLUMN apwait_delta HEADING "Appl|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
|
||||
COLUMN ccwait_delta HEADING "Conc|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
|
||||
COLUMN clwait_delta HEADING "Cluster|Wait|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
|
||||
COLUMN plsexec_time_delta HEADING "PLsexec|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
|
||||
COLUMN cpu_time_delta HEADING "CPU|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
|
||||
COLUMN elapsed_time_delta HEADING "Elapsed|Time|(&TIME_HEADING)|PerExec" FORMAT &TIME_FORMAT
|
||||
COLUMN executions_delta HEADING "Exec|(&COUNT_HEADING)" FORMAT 9,999
|
||||
COLUMN px_servers_execs_total HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)|PerExec" FORMAT 999
|
||||
--COLUMN px_servers_execs_total HEADING "Par'l|Server|Exec|(&COUNT_SMALL_HEADING)|PerExec" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN rows_processed_delta HEADING "Rows|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT
|
||||
COLUMN sorts_delta HEADING "Sorts|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT
|
||||
COLUMN buffer_gets_delta HEADING "Buffer|Gets|(&COUNT_HEADING)|PerExec" FORMAT &COUNT_FORMAT
|
||||
COLUMN direct_writes_delta HEADING "Direct|Write|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
|
||||
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
|
||||
COLUMN physical_read_bytes_delta HEADING "Phy|Read|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_delta HEADING "Phy|Write|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
|
||||
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|(&BYTES_HEADING)|PerExec" FORMAT &BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
|
||||
Prompt
|
||||
Prompt ***************************************************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (All Figures are per execution)
|
||||
Prompt * SQLID = &&sqlid , plan_hash_value = &plan_hash_value over last &days days
|
||||
Prompt ***************************************************************************************************
|
||||
|
||||
WITH snaps AS
|
||||
(
|
||||
SELECT ss.dbid
|
||||
, ss.instance_number
|
||||
, ss.snap_id
|
||||
, LAG(ss.snap_id) OVER (PARTITION BY s.dbid, s.instance_number, ss.sql_id, ss.plan_hash_value ORDER BY ss.dbid, ss.instance_number, ss.snap_id , ss.sql_id, ss.plan_hash_value) prev_snap_id
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, s.end_interval_time
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
where ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.dbid = d.dbid
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.sql_id = '&&sqlid'
|
||||
AND ss.plan_hash_value LIKE '&&plan_hash_value'
|
||||
AND ss.executions_delta > 0
|
||||
)
|
||||
SELECT TO_CHAR(s.end_interval_time,'DD-MON-YY HH24:MI:SS') end_interval_time
|
||||
, ss.instance_number
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, '|' seperator
|
||||
, ROUND((ss.iowait_total-ss_prev.iowait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) iowait_delta
|
||||
, ROUND((ss.apwait_total-ss_prev.apwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) apwait_delta
|
||||
, ROUND((ss.ccwait_total-ss_prev.ccwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) ccwait_delta
|
||||
, ROUND((ss.clwait_total-ss_prev.clwait_total)/1000000/ss.executions_delta/&TIME_DIVIDER) clwait_delta
|
||||
, ROUND((ss.plsexec_time_total-ss_prev.plsexec_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) plsexec_time_delta
|
||||
, ROUND((ss.cpu_time_total-ss_prev.cpu_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) cpu_time_delta
|
||||
, ROUND((ss.elapsed_time_total-ss_prev.elapsed_time_total)/1000000/ss.executions_delta/&TIME_DIVIDER) elapsed_time_delta
|
||||
, '|' seperator
|
||||
, ss.executions_delta/&COUNT_DIVIDER executions_delta
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , (ss.px_servers_execs_total-ss_prev.px_servers_execs_total)/ss.executions_total/&COUNT_DIVIDER px_servers_execs_delta
|
||||
-- , (ss.invalidations_total-ss_prev.invalidations_total)/ss.executions_total/&COUNT_DIVIDER invalidations_delta
|
||||
, (ss.rows_processed_total-ss_prev.rows_processed_total)/ss.executions_delta/&COUNT_DIVIDER rows_processed_delta
|
||||
, (ss.buffer_gets_total-ss_prev.buffer_gets_total)/ss.executions_delta/&COUNT_DIVIDER buffer_gets_delta
|
||||
, ROUND((ss.direct_writes_total-ss_prev.direct_writes_total)/ss.executions_delta/&BYTES_DIVIDER) direct_writes_delta
|
||||
, '|' seperator
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_interconnect_bytes_total-ss_prev.io_interconnect_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_interconnect_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , (ss.physical_read_bytes_total-ss_prev.physical_read_bytes_total)/ss.executions_delta/&BYTES_DIVIDER physical_read_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , (ss.physical_write_bytes_total-ss_prev.physical_write_bytes_total)/ss.executions_delta/&BYTES_DIVIDER physical_write_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_offload_elig_bytes_total-ss_prev.io_offload_elig_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_offload_elig_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , (ss.io_offload_return_bytes_total-ss_prev.io_offload_return_bytes_total)/ss.executions_delta/&BYTES_DIVIDER io_offload_return_bytes_delta
|
||||
, ss.sql_profile
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_sqlstat ss_prev
|
||||
, snaps s
|
||||
where ss.dbid = s.dbid
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.sql_id = s.sql_id
|
||||
AND ss.plan_hash_value = s.plan_hash_value
|
||||
AND ss_prev.dbid (+) = s.dbid
|
||||
AND ss_prev.instance_number (+) = s.instance_number
|
||||
AND ss_prev.snap_id (+) = s.prev_snap_id
|
||||
AND ss_prev.sql_id (+) = s.sql_id
|
||||
AND ss_prev.plan_hash_value (+) = s.plan_hash_value
|
||||
order by s.end_interval_time , s.instance_number
|
||||
;
|
||||
|
||||
UNDEFINE sqlid
|
||||
UNDEFINE days
|
||||
|
||||
|
||||
@@footer
|
||||
198
vg/awr_sqlstats_weekly.sql
Normal file
198
vg/awr_sqlstats_weekly.sql
Normal file
@@ -0,0 +1,198 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats from AWR
|
||||
* Version : 10.1 and above
|
||||
* Parameters : 1 - SQL_ID
|
||||
* 2 - Number of Days (Default 30 days)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 08-Mar-12 Vishal Gupta Intial version
|
||||
* 20-Mar-12 Vishal Gupta Added PLAN_HASH_VALUE in output
|
||||
* 23-Apr-12 Vishal Gupta Added PLAN_HASH_VALUE as the input variable
|
||||
* 09-Oct-12 Vishal Gupta Removed the instance_number from output and
|
||||
* aggregated stats for all instances in output.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE days
|
||||
UNDEFINE whereclause
|
||||
UNDEFINE force_matching_signature
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE days="&&2"
|
||||
DEFINE whereclause="&&4"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
COLUMN _days NEW_VALUE days NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&days','','30','&&days') "_days"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=999,999
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
--DEFINE COUNT_SMALL_HEADING="#"
|
||||
DEFINE COUNT_SMALL_DIVIDER="1000"
|
||||
DEFINE COUNT_SMALL_HEADING="#1000"
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1000000"
|
||||
--DEFINE COUNT_SMALL_HEADING="#mill"
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=99,999,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
--DEFINE COUNT_DIVIDER="1000000"
|
||||
--DEFINE COUNT_HEADING="million"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
--DEFINE BYTES_DIVIDER="1024"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024"
|
||||
--DEFINE BYTES_HEADING="MB"
|
||||
DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
DEFINE BYTES_HEADING="GB"
|
||||
|
||||
DEFINE TIME_FORMAT=999,999
|
||||
--DEFINE TIME_DIVIDER="1"
|
||||
--DEFINE TIME_HEADING="sec"
|
||||
DEFINE TIME_DIVIDER="60"
|
||||
DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
|
||||
/************************************/
|
||||
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
set term off
|
||||
select to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from v$database d
|
||||
JOIN sys.WRH$_SQLSTAT ss2 on ss2.dbid = d.dbid
|
||||
where ss2.sql_id = '&&sql_id' and rownum = 1;
|
||||
set term on
|
||||
/************************************/
|
||||
|
||||
Prompt
|
||||
Prompt ***************************************************************************************************
|
||||
Prompt * AWR SQL Executions Statistics (Delta)
|
||||
Prompt * (Force Matching Signature = '&&force_matching_signature')
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Days = '&&days'
|
||||
PROMPT * - WhereClause = '&&whereclause'
|
||||
Prompt ***************************************************************************************************
|
||||
|
||||
|
||||
COLUMN seperator HEADING "!|!|!|!" FORMAT a1
|
||||
COLUMN end_interval_time HEADING "Week|Starting" FORMAT a9
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN force_matching_signature HEADING "Force Matching Signature" FORMAT 999999999999999999999
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations_delta HEADING "Invalid|Delta|(&&COUNT_HEADING)" FORMAT 9,999
|
||||
COLUMN iowait_delta HEADING "IO|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN apwait_delta HEADING "Appl|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN ccwait_delta HEADING "Conc|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN clwait_delta HEADING "Cluster|Wait|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN plsexec_time_delta HEADING "PLsexec|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN cpu_time_delta HEADING "CPU|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN elapsed_time_delta HEADING "Elapsed|Time|Delta|(&&TIME_HEADING)" FORMAT &&TIME_FORMAT
|
||||
COLUMN executions_delta HEADING "Exec|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN px_servers_execs_delta HEADING "Par'l|Serv|Exec|Delta|(&&COUNT_HEADING)" FORMAT 999
|
||||
COLUMN rows_processed_delta HEADING "Rows|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN sorts_delta HEADING "Sorts|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN buffer_gets_bytes_delta HEADING "Logical|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN buffer_gets_delta HEADING "Buffer|Gets|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN direct_writes_delta HEADING "Direct|Write|Delta|(&&BYTES_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_interconnect_bytes_delta HEADING "IO|Inter|Connect|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_read_bytes_delta HEADING "Phy|Read|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN physical_write_bytes_delta HEADING "Phy|Write|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN optimized_physical_reads_delta HEADING "Optimized|Phy|ReadReq|Delta|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||||
COLUMN io_offload_elig_bytes_delta HEADING "IO|Offload|Elig|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes_delta HEADING "IO|Offload|Return|Delta|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a30
|
||||
|
||||
SELECT TO_CHAR(TRUNC(s.end_interval_time,'IW'),'DD-MON-YY') end_interval_time
|
||||
, ss.force_matching_signature
|
||||
, max(ss.sql_id) sql_id
|
||||
--, ss.plan_hash_value
|
||||
, ROUND(SUM(ss.iowait_delta)/1000000/&&TIME_DIVIDER) iowait_delta
|
||||
, ROUND(SUM(ss.apwait_delta)/1000000/&&TIME_DIVIDER) apwait_delta
|
||||
, ROUND(SUM(ss.ccwait_delta)/1000000/&&TIME_DIVIDER) ccwait_delta
|
||||
, ROUND(SUM(ss.clwait_delta)/1000000/&&TIME_DIVIDER) clwait_delta
|
||||
, ROUND(SUM(ss.plsexec_time_delta)/1000000/&&TIME_DIVIDER) plsexec_time_delta
|
||||
, ROUND(SUM(ss.cpu_time_delta)/1000000/&&TIME_DIVIDER) cpu_time_delta
|
||||
, ROUND(SUM(ss.elapsed_time_delta)/1000000/&&TIME_DIVIDER) elapsed_time_delta
|
||||
, '|' seperator
|
||||
, SUM(ss.executions_delta)/&&COUNT_DIVIDER executions_delta
|
||||
--&&_IF_ORA_10gR2_OR_HIGHER , SUM(ss.px_servers_execs_delta)/&&COUNT_DIVIDER px_servers_execs_delta
|
||||
-- , SUM(ss.invalidations_delta)/&&COUNT_DIVIDER invalidations_delta
|
||||
, SUM(ss.rows_processed_delta)/&&COUNT_DIVIDER rows_processed_delta
|
||||
, SUM(ss.sorts_delta)/&&COUNT_DIVIDER sorts_delta
|
||||
, SUM(ss.buffer_gets_delta)/&&COUNT_DIVIDER buffer_gets_delta
|
||||
, SUM(ss.buffer_gets_delta* p.value)/&&BYTES_DIVIDER buffer_gets_bytes_delta
|
||||
, ROUND(SUM(ss.direct_writes_delta)/&&COUNT_DIVIDER) direct_writes_delta
|
||||
, '|' seperator
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_interconnect_bytes_delta)/&&BYTES_DIVIDER io_interconnect_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_read_bytes_delta)/&&BYTES_DIVIDER physical_read_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.physical_write_bytes_delta)/&&BYTES_DIVIDER physical_write_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.optimized_physical_reads_delta)/&&COUNT_DIVIDER optimized_physical_reads_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_elig_bytes_delta)/&&BYTES_DIVIDER io_offload_elig_bytes_delta
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , SUM(ss.io_offload_return_bytes_delta)/&&BYTES_DIVIDER io_offload_return_bytes_delta
|
||||
, '|' seperator
|
||||
from dba_hist_sqlstat ss
|
||||
, dba_hist_snapshot s
|
||||
, v$database d
|
||||
, v$system_parameter p
|
||||
where p.name = 'db_block_size'
|
||||
AND ss.instance_number = s.instance_number
|
||||
AND ss.dbid = s.dbid
|
||||
AND ss.snap_id = s.snap_id
|
||||
AND ss.dbid = d.dbid
|
||||
AND s.end_interval_time > SYSDATE - &&days
|
||||
AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
WHEN 0 THEN '&&sql_id'
|
||||
ELSE '%'
|
||||
END
|
||||
AND ss.force_matching_signature LIKE '&&force_matching_signature'
|
||||
--AND ss.executions_delta > 0
|
||||
&&whereclause
|
||||
GROUP BY ss.dbid
|
||||
, TRUNC(s.end_interval_time,'IW')
|
||||
, ss.force_matching_signature
|
||||
--, ss.plan_hash_value
|
||||
ORDER BY TRUNC(s.end_interval_time,'IW')
|
||||
, ss.force_matching_signature
|
||||
--, ss.plan_hash_value
|
||||
;
|
||||
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE days
|
||||
UNDEFINE force_matching_signature
|
||||
UNDEFINE whereclause
|
||||
|
||||
|
||||
@@footer
|
||||
60
vg/awr_sqltext.sql
Normal file
60
vg/awr_sqltext.sql
Normal file
@@ -0,0 +1,60 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQL Text from AWR repository
|
||||
* Parameters : 1 - SQL_ID
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 22-Oct-15 Vishal Gupta Added FORCE_MATCHING_SIGNATURE in the output heading
|
||||
* 08-Mar-12 Vishal Gupta Initial version
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
UNDEFINE sqlid
|
||||
UNDEFINE force_matching_signature
|
||||
|
||||
|
||||
DEFINE sqlid="&&1"
|
||||
DEFINE force_matching_signature=""
|
||||
|
||||
SET long 4000000
|
||||
SET longchunksize 400000
|
||||
SET pages 0
|
||||
set lines 300
|
||||
|
||||
|
||||
|
||||
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
select to_char(ss2.force_matching_signature) "_force_matching_signature"
|
||||
from v$database d
|
||||
, dba_hist_sqlstat ss2
|
||||
where d.dbid = ss2.dbid
|
||||
AND ss2.sql_id = '&&sqlid'
|
||||
and rownum = 1
|
||||
;
|
||||
|
||||
Prompt ********************************************************
|
||||
Prompt * SQL Text for SQLID = &&sqlid
|
||||
Prompt * Force Matching Signature = &&force_matching_signature
|
||||
Prompt ********************************************************
|
||||
|
||||
COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP
|
||||
|
||||
SELECT s.sql_text
|
||||
FROM dba_hist_sqltext s
|
||||
, v$database d
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.sql_id = '&&sqlid'
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
53
vg/awr_sqltext_expand.sql
Normal file
53
vg/awr_sqltext_expand.sql
Normal file
@@ -0,0 +1,53 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Expanded SQL Text from AWR repository
|
||||
* Parameters : 1 - SQL_ID
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 29-Jul-15 Vishal Gupta Created
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
DEFINE sqlid="&&1"
|
||||
|
||||
SET long 4000000
|
||||
SET longchunksize 400000
|
||||
SET pages 0
|
||||
set lines 300
|
||||
|
||||
COLUMN sql_text HEADING "SQLText" FORMAT a150 WRAP
|
||||
|
||||
Prompt ***********************************************
|
||||
Prompt * Expanded SQL Text for SQLID = &&sqlid
|
||||
Prompt ***********************************************
|
||||
|
||||
VARIABLE EXPANDED_SQLTEXT CLOB;
|
||||
|
||||
DECLARE
|
||||
L_SQLTEXT CLOB;
|
||||
BEGIN
|
||||
SELECT s.sql_text
|
||||
INTO L_SQLTEXT
|
||||
FROM dba_hist_sqltext s
|
||||
, v$database d
|
||||
WHERE d.dbid = s.dbid
|
||||
AND s.sql_id = '&&sqlid'
|
||||
;
|
||||
sys.dbms_sql2.expand_sql_text(L_SQLTEXT,:EXPANDED_SQLTEXT);
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN
|
||||
NULL;
|
||||
END;
|
||||
/
|
||||
|
||||
print :EXPANDED_SQLTEXT
|
||||
|
||||
@@footer
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user