scripts/collector/oracle/sql/extracts/statspack/awrhistsysmetricsumm.sql (97 lines of code) (raw):
--
-- Copyright 2024 Google LLC
--
-- Licensed under the Apache License, Version 2.0 (the "License").
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- https://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
COLUMN HOUR FORMAT A4
COLUMN METRIC_UNIT FORMAT A15
COLUMN AVG_VALUE FORMAT 999999999999999999999999999999999999999999999999
COLUMN MODE_VALUE FORMAT 999999999999999999999999999999999999999999999999
COLUMN MEDIAN_VALUE FORMAT 999999999999999999999999999999999999999999999999
COLUMN MIN_VALUE FORMAT 999999999999999999999999999999999999999999999999
COLUMN MAX_VALUE FORMAT 999999999999999999999999999999999999999999999999
COLUMN SUM_VALUE FORMAT 999999999999999999999999999999999999999999999999
COLUMN PERC50 FORMAT 999999999999999999999999999999999999999999999999
COLUMN PERC75 FORMAT 999999999999999999999999999999999999999999999999
COLUMN PERC90 FORMAT 999999999999999999999999999999999999999999999999
COLUMN PERC100 FORMAT 999999999999999999999999999999999999999999999999
spool &outputdir/opdb__awrhistsysmetricsumm__&v_tag
prompt PKEY|DBID|INSTANCE_NUMBER|HOUR|METRIC_NAME|METRIC_UNIT|AVG_VALUE|MODE_VALUE|MEDIAN_VALUE|MIN_VALUE|MAX_VALUE|SUM_VALUE|PERC50|PERC75|PERC90|PERC95|PERC100|DMA_SOURCE_ID|DMA_MANUAL_ID
WITH vsysmetricsumm AS (
SELECT :v_pkey AS pkey,
hsm.dbid,
hsm.instance_number,
TO_CHAR(dhsnap.snap_time, 'hh24') hour,
hsm.name metric_name,
NULL AS metric_unit,
NULL avg_value,
null mode_value,
null median_value,
NULL min_value,
NULL max_value,
null sum_value,
null "PERC50",
null "PERC75",
null "PERC90",
-- Handle cases where STANDARD_DEVIATION is displayed as NULL but when compared is > .9 repeating but less than 1.
-- Oberved in 11.2 and 19.3. Seems to occur when MINVAL < AVERAGE = MAXVAL for 'User Limit %' and 'Session Limit %' metrics.
-- In most such cases, STARNDARD_DEVIATION = 0, so that is what we will do here.
--hsm.AVERAGE+(2* CASE WHEN ( standard_deviation > (.999999999999999999999999999) AND standard_deviation < 1 )
-- AND ( MINVAL = 0 AND AVERAGE = MAXVAL ) then 0 else standard_deviation end ) "PERC95",
AVG(value) OVER (PARTITION BY hsm.dbid, hsm.instance_number, TO_CHAR(dhsnap.snap_time, 'hh24') , hsm.name) + (2 * STDDEV (value) OVER (PARTITION BY hsm.dbid, hsm.instance_number, TO_CHAR(dhsnap.snap_time, 'hh24') , hsm.name)) AS "PERC95",
NULL "PERC100"
FROM (
SELECT s.snap_id, s.dbid, s.instance_number, s.name, s.value,
NVL(
DECODE(
GREATEST(value, NVL( LAG(value) OVER ( PARTITION BY s.dbid, s.instance_number, s.name ORDER BY s.snap_id), 0)),
value,
value - LAG(value) OVER ( PARTITION BY s.dbid, s.instance_number, s.name ORDER BY s.snap_id),
0),
0) AS delta_value
FROM perfstat.stats$sysstat s ) hsm
INNER JOIN stats$snapshot dhsnap
ON hsm.snap_id = dhsnap.snap_id
AND hsm.instance_number = dhsnap.instance_number
AND hsm.dbid = dhsnap.dbid
WHERE dhsnap.snap_time BETWEEN '&&v_min_snaptime' AND '&&v_max_snaptime'
AND hsm.dbid = &&v_dbid),
vsysmetricsummperhour as (
SELECT pkey,
hsm.dbid,
hsm.instance_number,
hour,
hsm.metric_name,
hsm.metric_unit,
ROUND(AVG(hsm.PERC95)) avg_value,
ROUND(STATS_MODE(hsm.PERC95)) mode_value,
ROUND(MEDIAN(hsm.PERC95)) median_value,
ROUND(MIN(hsm.PERC95)) min_value,
ROUND(MAX(hsm.PERC95)) max_value,
ROUND(SUM(hsm.PERC95)) sum_value,
ROUND(PERCENTILE_CONT(0.5)
within GROUP (ORDER BY hsm.PERC95 DESC)) AS "PERC50",
ROUND(PERCENTILE_CONT(0.25)
within GROUP (ORDER BY hsm.PERC95 DESC)) AS "PERC75",
ROUND(PERCENTILE_CONT(0.10)
within GROUP (ORDER BY hsm.PERC95 DESC)) AS "PERC90",
ROUND(PERCENTILE_CONT(0.05)
within GROUP (ORDER BY hsm.PERC95 DESC)) AS "PERC95",
ROUND(PERCENTILE_CONT(0)
within GROUP (ORDER BY hsm.PERC95 DESC)) AS "PERC100"
FROM vsysmetricsumm hsm
GROUP BY pkey,
hsm.dbid,
hsm.instance_number,
hour,
hsm.metric_name,
hsm.metric_unit
)
SELECT pkey , dbid , instance_number , hour , metric_name ,
metric_unit , avg_value , mode_value , median_value , min_value , max_value ,
sum_value , PERC50 , PERC75 , PERC90 , PERC95 , PERC100,
:v_dma_source_id AS DMA_SOURCE_ID, :v_manual_unique_id AS DMA_MANUAL_ID
FROM vsysmetricsummperhour;
spool off
COLUMN HOUR CLEAR
COLUMN METRIC_UNIT CLEAR
COLUMN AVG_VALUE CLEAR
COLUMN MODE_VALUE CLEAR
COLUMN MEDIAN_VALUE CLEAR
COLUMN MIN_VALUE CLEAR
COLUMN MAX_VALUE CLEAR
COLUMN SUM_VALUE CLEAR
COLUMN PERC50 CLEAR
COLUMN PERC75 CLEAR
COLUMN PERC90 CLEAR
COLUMN PERC100 CLEAR