scripts/collector/oracle/sql/extracts/statspack/iofunction.sql (177 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
spool &outputdir/opdb__iofunction__&v_tag
WITH vrawiof AS (
SELECT :v_pkey AS pkey,
snap.snap_time,
NULL end_interval_time,
TO_CHAR(snap.snap_time, 'hh24') hour,
iof.snap_id, iof.dbid, iof.instance_number, iof.function_id, fn.function_name,
NVL(DECODE(GREATEST(iof.small_read_megabytes, NVL(LAG(iof.small_read_megabytes)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.small_read_megabytes, iof.small_read_megabytes - LAG(iof.small_read_megabytes)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS sm_read_mb_delta_value,
NVL(DECODE(GREATEST(iof.small_write_megabytes, NVL(LAG(iof.small_write_megabytes)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.small_write_megabytes, iof.small_write_megabytes - LAG(iof.small_write_megabytes)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS sm_write_mb_delta_value,
NVL(DECODE(GREATEST(iof.small_read_reqs, NVL(LAG(iof.small_read_reqs)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.small_read_reqs, iof.small_read_reqs - LAG(iof.small_read_reqs)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS sm_read_rq_delta_value,
NVL(DECODE(GREATEST(iof.small_write_reqs, NVL(LAG(iof.small_write_reqs)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.small_write_reqs, iof.small_write_reqs - LAG(iof.small_write_reqs)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS sm_write_rq_delta_value,
NVL(DECODE(GREATEST(iof.large_read_megabytes, NVL(LAG(iof.large_read_megabytes)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.large_read_megabytes, iof.large_read_megabytes - LAG(iof.large_read_megabytes)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS lg_read_mb_delta_value,
NVL(DECODE(GREATEST(iof.large_write_megabytes, NVL(LAG(iof.large_write_megabytes)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.large_write_megabytes, iof.large_write_megabytes - LAG(iof.large_write_megabytes)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS lg_write_mb_delta_value,
NVL(DECODE(GREATEST(iof.large_read_reqs, NVL(LAG(iof.large_read_reqs)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.large_read_reqs, iof.large_read_reqs - LAG(iof.large_read_reqs)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS lg_read_rq_delta_value,
NVL(DECODE(GREATEST(iof.large_write_reqs, NVL(LAG(iof.large_write_reqs)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.large_write_reqs, iof.large_write_reqs - LAG(iof.large_write_reqs)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS lg_write_rq_delta_value,
NVL(DECODE(GREATEST(iof.number_of_waits, NVL(LAG(iof.number_of_waits)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.number_of_waits, iof.number_of_waits - LAG(iof.number_of_waits)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS no_iowait_delta_value,
NVL(DECODE(GREATEST(iof.wait_time, NVL(LAG(iof.wait_time)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id), 0)),
iof.wait_time, iof.wait_time - LAG(iof.wait_time)
OVER (PARTITION BY iof.dbid, iof.instance_number, fn.function_name ORDER BY iof.snap_id),0), 0) AS tot_watime_delta_value
FROM STATS$IOSTAT_FUNCTION iof
INNER JOIN STATS$SNAPSHOT snap
ON iof.snap_id = snap.snap_id
AND iof.instance_number = snap.instance_number
AND iof.dbid = snap.dbid
INNER JOIN STATS$IOSTAT_FUNCTION_NAME fn
ON fn.function_id = iof.function_id
WHERE snap.snap_time BETWEEN '&&v_min_snaptime' AND '&&v_max_snaptime'
AND snap.dbid = &&v_dbid),
vperciof AS (
SELECT pkey,
dbid,
instance_number,
hour,
function_name,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY sm_read_mb_delta_value DESC) AS sm_read_mb_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY sm_write_mb_delta_value DESC) AS sm_write_mb_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY sm_read_rq_delta_value DESC) AS sm_read_rq_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY sm_write_rq_delta_value DESC) AS sm_write_rq_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY lg_read_mb_delta_value DESC) AS lg_read_mb_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY lg_write_mb_delta_value DESC) AS lg_write_mb_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY lg_read_rq_delta_value DESC) AS lg_read_rq_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY lg_write_rq_delta_value DESC) AS lg_write_rq_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY no_iowait_delta_value DESC) AS no_iowait_delta_value_P95,
PERCENTILE_CONT(0.05)
within GROUP (ORDER BY tot_watime_delta_value DESC) AS tot_watime_delta_value_P95,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY sm_read_mb_delta_value DESC) AS sm_read_mb_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY sm_write_mb_delta_value DESC) AS sm_write_mb_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY sm_read_rq_delta_value DESC) AS sm_read_rq_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY sm_write_rq_delta_value DESC) AS sm_write_rq_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY lg_read_mb_delta_value DESC) AS lg_read_mb_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY lg_write_mb_delta_value DESC) AS lg_write_mb_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY lg_read_rq_delta_value DESC) AS lg_read_rq_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY lg_write_rq_delta_value DESC) AS lg_write_rq_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY no_iowait_delta_value DESC) AS no_iowait_delta_value_P100,
PERCENTILE_CONT(0.00)
within GROUP (ORDER BY tot_watime_delta_value DESC) AS tot_watime_delta_value_P100
FROM vrawiof
GROUP BY pkey,
dbid,
instance_number,
hour,
function_name),
viof AS(
SELECT pkey,
dbid,
instance_number,
hour,
function_name,
ROUND(sm_read_mb_delta_value_P95) sm_read_mb_delta_value_P95,
ROUND(sm_write_mb_delta_value_P95) sm_write_mb_delta_value_P95,
ROUND(sm_read_rq_delta_value_P95) sm_read_rq_delta_value_P95,
ROUND(sm_write_rq_delta_value_P95) sm_write_rq_delta_value_P95,
ROUND(lg_read_mb_delta_value_P95) lg_read_mb_delta_value_P95,
ROUND(lg_write_mb_delta_value_P95) lg_write_mb_delta_value_P95,
ROUND(lg_read_rq_delta_value_P95) lg_read_rq_delta_value_P95,
ROUND(lg_write_rq_delta_value_P95) lg_write_rq_delta_value_P95,
ROUND(no_iowait_delta_value_P95) no_iowait_delta_value_P95,
ROUND(tot_watime_delta_value_P95) tot_watime_delta_value_P95,
ROUND(sm_read_mb_delta_value_P95 + lg_read_mb_delta_value_P95) total_reads_mb_P95,
ROUND(sm_read_rq_delta_value_P95 + lg_read_rq_delta_value_P95) total_reads_req_P95,
ROUND(sm_write_mb_delta_value_P95 + lg_write_mb_delta_value_P95) total_writes_mb_P95,
ROUND(sm_write_rq_delta_value_P95 + lg_write_rq_delta_value_P95) total_write_req_P95,
ROUND(sm_read_mb_delta_value_P100) sm_read_mb_delta_value_P100,
ROUND(sm_write_mb_delta_value_P100) sm_write_mb_delta_value_P100,
ROUND(sm_read_rq_delta_value_P100) sm_read_rq_delta_value_P100,
ROUND(sm_write_rq_delta_value_P100) sm_write_rq_delta_value_P100,
ROUND(lg_read_mb_delta_value_P100) lg_read_mb_delta_value_P100,
ROUND(lg_write_mb_delta_value_P100) lg_write_mb_delta_value_P100,
ROUND(lg_read_rq_delta_value_P100) lg_read_rq_delta_value_P100,
ROUND(lg_write_rq_delta_value_P100) lg_write_rq_delta_value_P100,
ROUND(no_iowait_delta_value_P100) no_iowait_delta_value_P100,
ROUND(tot_watime_delta_value_P100) tot_watime_delta_value_P100,
ROUND(sm_read_mb_delta_value_P100 + lg_read_mb_delta_value_P100) total_reads_mb_P100,
ROUND(sm_read_rq_delta_value_P100 + lg_read_rq_delta_value_P100) total_reads_req_P100,
ROUND(sm_write_mb_delta_value_P100 + lg_write_mb_delta_value_P100) total_writes_mb_P100,
ROUND(sm_write_rq_delta_value_P100 + lg_write_rq_delta_value_P100) total_write_req_P100
FROM vperciof)
SELECT pkey , dbid , instance_number , hour , function_name ,
sm_read_mb_delta_value_P95 ,
sm_write_mb_delta_value_P95 ,
sm_read_rq_delta_value_P95 ,
sm_write_rq_delta_value_P95 ,
lg_read_mb_delta_value_P95 ,
lg_write_mb_delta_value_P95 ,
lg_read_rq_delta_value_P95 ,
lg_write_rq_delta_value_P95 ,
no_iowait_delta_value_P95 ,
tot_watime_delta_value_P95 ,
total_reads_mb_P95 ,
total_reads_req_P95 ,
total_writes_mb_P95 ,
total_write_req_P95,
sm_read_mb_delta_value_P100 ,
sm_write_mb_delta_value_P100 ,
sm_read_rq_delta_value_P100 ,
sm_write_rq_delta_value_P100 ,
lg_read_mb_delta_value_P100 ,
lg_write_mb_delta_value_P100 ,
lg_read_rq_delta_value_P100 ,
lg_write_rq_delta_value_P100 ,
no_iowait_delta_value_P100 ,
tot_watime_delta_value_P100 ,
total_reads_mb_P100 ,
total_reads_req_P100 ,
total_writes_mb_P100 ,
total_write_req_P100,
:v_dma_source_id AS DMA_SOURCE_ID, :v_manual_unique_id AS DMA_MANUAL_ID
FROM viof;
spool off
column hour clear