Files
oracle/tpt/ash/sqlid_dbtime_buckets.sql

66 lines
1.4 KiB
MySQL
Raw Permalink Normal View History

2026-03-12 21:23:47 +01:00
-- Copyright 2018 Tanel Poder. All rights reserved. More info at https://tanelpoder.com
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms & conditions.
COL approx_elapsed_time FOR A30
WITH ash AS (
SELECT
sql_id
, session_id
, sample_time
, sample_time - CAST(MIN(sql_exec_start)
OVER(PARTITION BY session_id,session_serial#,sql_exec_start,sql_exec_id)
AS TIMESTAMP) elapsed_time
, sql_exec_start
, sql_exec_id
, session_state
, event
, machine
, module
FROM
v$active_session_history
WHERE
sql_id = '&1'
AND &2
AND sample_time BETWEEN &3 AND &4
GROUP BY
sql_id
, session_id
, session_serial#
, sample_time
, sql_exec_start
, sql_exec_id
, session_state
, event
, machine
, module
),
longrunning AS (
SELECT * FROM ash
WHERE
elapsed_time > INTERVAL '1' SECOND
)
SELECT
sql_id
, sql_exec_start
-- an earlier analytic function already does the "partition by session_id,session_serial#"
, MAX(elapsed_time) approx_elapsed_time
, session_state
, event
, COUNT(*) seconds
, COUNT(DISTINCT session_id) sessions
FROM longrunning
GROUP BY
sql_id
, sql_exec_start
, session_state
, event
ORDER BY
sql_id
, sql_exec_start
, COUNT(*) DESC
/