scripts/collector/oracle/sql/extracts/statspack/sqlstats.sql (193 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 sp_con_id FORMAT A6 HEADING CON_ID
COLUMN PHYSICAL_READ_BYTES_TOTAL FORMAT A40
COLUMN PHYSICAL_WRITE_BYTES_TOTAL FORMAT A40
COLUMN IO_OFFLOAD_ELIG_BYTES_TOTAL FORMAT A40
COLUMN IO_INTERCONNECT_BYTES_TOTAL FORMAT A40
COLUMN OPTIMIZED_PHYSICAL_READS_TOTAL FORMAT A40
COLUMN CELL_UNCOMPRESSED_BYTES_TOTAL FORMAT A40
COLUMN IO_OFFLOAD_RETURN_BYTES_TOTAL FORMAT A40
spool &outputdir/opdb__sqlstats__&v_tag
prompt PKEY|CON_ID|DBID|INSTANCE_NUMBER|FORCE_MATCHING_SIGNATURE|SQL_ID|TOTAL_EXECUTIONS|TOTAL_PX_SERVERS_EXECS|ELAPSED_TIME_TOTAL|DISK_READS_TOTAL|PHYSICAL_READ_BYTES_TOTAL|PHYSICAL_WRITE_BYTES_TOTAL|IO_OFFLOAD_ELIG_BYTES_TOTAL|IO_INTERCONNECT_BYTES_TOTAL|OPTIMIZED_PHYSICAL_READS_TOTAL|CELL_UNCOMPRESSED_BYTES_TOTAL|IO_OFFLOAD_RETURN_BYTES_TOTAL|DIRECT_WRITES_TOTAL|PERC_EXEC_FINISHED|AVG_ROWS|AVG_DISK_READS|AVG_BUFFER_GETS|AVG_CPU_TIME_US|AVG_ELAPSED_US|AVG_IOWAIT_US|AVG_CLWAIT_US|AVG_APWAIT_US|AVG_CCWAIT_US|AVG_PLSEXEC_US|AVG_JAVEXEC_US|DMA_SOURCE_ID|DMA_MANUAL_ID
WITH vsqlstat AS(
SELECT :v_pkey AS pkey,
'N/A' AS con_id,
b.dbid,
b.instance_number,
to_char(force_matching_signature) force_matching_signature,
min(sql_id) sql_id,
ROUND(sum(executions)) total_executions,
ROUND(sum(px_servers_executions)) total_px_servers_execs,
ROUND(sum(elapsed_time)) elapsed_time_total,
ROUND(sum(disk_reads)) disk_reads_total,
NULL physical_read_bytes_total,
NULL physical_write_bytes_total,
NULL io_offload_elig_bytes_total,
NULL io_interconnect_bytes_total,
NULL optimized_physical_reads_total,
NULL cell_uncompressed_bytes_total,
NULL io_offload_return_bytes_total,
ROUND(sum(direct_writes)) direct_writes_total,
trunc(decode(sum(executions), 0, 0, (sum(end_of_fetch_count)*100)/sum(executions))) perc_exec_finished,
trunc(decode(sum(executions), 0, 0, sum(rows_processed)/sum(executions))) avg_rows,
trunc(decode(sum(executions), 0, 0, sum(disk_reads)/sum(executions))) avg_disk_reads,
trunc(decode(sum(executions), 0, 0, sum(buffer_gets)/sum(executions))) avg_buffer_gets,
trunc(decode(sum(executions), 0, 0, sum(cpu_time)/sum(executions))) avg_cpu_time_us,
trunc(decode(sum(executions), 0, 0, sum(elapsed_time)/sum(executions))) avg_elapsed_us,
trunc(decode(sum(executions), 0, 0, sum(user_io_wait_time)/sum(executions))) avg_iowait_us,
trunc(decode(sum(executions), 0, 0, sum(cluster_wait_time)/sum(executions))) avg_clwait_us,
trunc(decode(sum(executions), 0, 0, sum(application_wait_time)/sum(executions))) avg_apwait_us,
trunc(decode(sum(executions), 0, 0, sum(concurrency_wait_time)/sum(executions))) avg_ccwait_us,
trunc(decode(sum(executions), 0, 0, sum(plsql_exec_time)/sum(executions))) avg_plsexec_us,
trunc(decode(sum(executions), 0, 0, sum(java_exec_time)/sum(executions))) avg_javexec_us
FROM
(
select snap_id, dbid, instance_number, text_subset, old_hash_value, command_type, force_matching_signature, sql_id,
s.executions,
NVL(
DECODE(
GREATEST(executions, NVL( LAG(executions) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
executions,
executions - LAG(executions) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_executions,
px_servers_executions,
NVL(
DECODE(
GREATEST(px_servers_executions, NVL( LAG(px_servers_executions) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
px_servers_executions,
px_servers_executions - LAG(px_servers_executions) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_px_servers_executions,
elapsed_time,
NVL(
DECODE(
GREATEST(elapsed_time, NVL( LAG(elapsed_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
elapsed_time,
elapsed_time - LAG(elapsed_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_elapsed_time,
disk_reads,
NVL(
DECODE(
GREATEST(disk_reads, NVL( LAG(disk_reads) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
disk_reads,
disk_reads - LAG(disk_reads) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_disk_reads,
direct_writes,
NVL(
DECODE(
GREATEST(direct_writes, NVL( LAG(direct_writes) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
direct_writes,
direct_writes - LAG(direct_writes) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_direct_writes,
end_of_fetch_count,
NVL(
DECODE(
GREATEST(end_of_fetch_count, NVL( LAG(end_of_fetch_count) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
end_of_fetch_count,
end_of_fetch_count - LAG(end_of_fetch_count) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_end_of_fetch_count,
rows_processed,
NVL(
DECODE(
GREATEST(rows_processed, NVL( LAG(rows_processed) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
rows_processed,
rows_processed - LAG(rows_processed) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_rows_processed,
buffer_gets,
NVL(
DECODE(
GREATEST(buffer_gets, NVL( LAG(buffer_gets) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
buffer_gets,
buffer_gets - LAG(buffer_gets) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_buffer_gets,
cpu_time,
NVL(
DECODE(
GREATEST(cpu_time, NVL( LAG(cpu_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
cpu_time,
cpu_time - LAG(cpu_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_cpu_time,
user_io_wait_time,
NVL(
DECODE(
GREATEST(user_io_wait_time, NVL( LAG(user_io_wait_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
user_io_wait_time,
user_io_wait_time - LAG(user_io_wait_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_user_io_wait_time,
cluster_wait_time,
NVL(
DECODE(
GREATEST(cluster_wait_time, NVL( LAG(cluster_wait_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
cluster_wait_time,
cluster_wait_time - LAG(cluster_wait_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_cluster_wait_time,
application_wait_time,
NVL(
DECODE(
GREATEST(application_wait_time, NVL( LAG(application_wait_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
application_wait_time,
application_wait_time - LAG(application_wait_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_application_wait_time,
concurrency_wait_time,
NVL(
DECODE(
GREATEST(concurrency_wait_time, NVL( LAG(concurrency_wait_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
concurrency_wait_time,
concurrency_wait_time - LAG(concurrency_wait_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_concurrency_wait_time,
plsql_exec_time,
NVL(
DECODE(
GREATEST(plsql_exec_time, NVL( LAG(plsql_exec_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
plsql_exec_time,
plsql_exec_time - LAG(plsql_exec_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_plsql_exec_time,
java_exec_time,
NVL(
DECODE(
GREATEST(java_exec_time, NVL( LAG(java_exec_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id), 0)),
java_exec_time,
java_exec_time - LAG(java_exec_time) OVER ( PARTITION BY s.dbid, s.instance_number, text_subset, old_hash_value, command_type, force_matching_signature ORDER BY s.snap_id),
0),
0) AS delta_java_exec_time
From STATS$SQL_SUMMARY s
) a,
STATS$SNAPSHOT b
WHERE a.snap_id = b.snap_id
AND a.instance_number = b.instance_number
AND a.dbid = b.dbid
AND b.snap_time BETWEEN '&&v_min_snaptime' AND '&&v_max_snaptime'
AND b.dbid = &&v_dbid
GROUP BY :v_pkey,
b.dbid, b.instance_number, force_matching_signature
ORDER BY elapsed_time_total DESC)
SELECT pkey , con_id AS sp_con_id , dbid , instance_number , force_matching_signature , sql_id ,
total_executions , total_px_servers_execs , elapsed_time_total , disk_reads_total ,
physical_read_bytes_total , physical_write_bytes_total , io_offload_elig_bytes_total , io_interconnect_bytes_total ,
optimized_physical_reads_total , cell_uncompressed_bytes_total , io_offload_return_bytes_total , direct_writes_total ,
perc_exec_finished , avg_rows , avg_disk_reads , avg_buffer_gets , avg_cpu_time_us , avg_elapsed_us , avg_iowait_us ,
avg_clwait_us , avg_apwait_us , avg_ccwait_us , avg_plsexec_us , avg_javexec_us,
:v_dma_source_id AS DMA_SOURCE_ID, :v_manual_unique_id AS DMA_MANUAL_ID
FROM vsqlstat
WHERE rownum < 300;
spool off
COLUMN sp_con_id CLEAR
COLUMN PHYSICAL_READ_BYTES_TOTAL CLEAR
COLUMN PHYSICAL_WRITE_BYTES_TOTAL CLEAR
COLUMN IO_OFFLOAD_ELIG_BYTES_TOTAL CLEAR
COLUMN IO_INTERCONNECT_BYTES_TOTAL CLEAR
COLUMN OPTIMIZED_PHYSICAL_READS_TOTAL CLEAR
COLUMN CELL_UNCOMPRESSED_BYTES_TOTAL CLEAR
COLUMN IO_OFFLOAD_RETURN_BYTES_TOTAL CLEAR