136 lines
5.7 KiB
MySQL
136 lines
5.7 KiB
MySQL
|
|
/*
|
||
|
|
*
|
||
|
|
* Author : Vishal Gupta
|
||
|
|
* Purpose : Displays long running transactions
|
||
|
|
* Parameter: 1 - Where Clause
|
||
|
|
*
|
||
|
|
* Revision History:
|
||
|
|
* ===================
|
||
|
|
* Date Author Description
|
||
|
|
* --------- ------------ -----------------------------------------
|
||
|
|
* 04-May-15 Vishal Gupta Created
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
|
||
|
|
|
||
|
|
/************************************
|
||
|
|
* INPUT PARAMETERS
|
||
|
|
************************************/
|
||
|
|
|
||
|
|
UNDEFINE WHERE_CLAUSE
|
||
|
|
DEFINE WHERE_CLAUSE="&&1"
|
||
|
|
|
||
|
|
|
||
|
|
/************************************
|
||
|
|
* CONFIGURATION PARAMETERS
|
||
|
|
************************************/
|
||
|
|
|
||
|
|
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 COUNT_FORMAT=999,999
|
||
|
|
--DEFINE COUNT_DIVIDER="1"
|
||
|
|
--DEFINE COUNT_HEADING="#"
|
||
|
|
DEFINE COUNT_DIVIDER="1000"
|
||
|
|
DEFINE COUNT_HEADING="#1000"
|
||
|
|
|
||
|
|
|
||
|
|
PROMPT
|
||
|
|
PROMPT *********************************************
|
||
|
|
PROMPT * D A T A B A S E T R A N S A C T I O N S
|
||
|
|
PROMPT *********************************************
|
||
|
|
|
||
|
|
COLUMN xid HEADING "XID" FORMAT a16
|
||
|
|
COLUMN sid HEADING "SID" FORMAT 99999
|
||
|
|
COLUMN inst_id HEADING "I#" FORMAT 99
|
||
|
|
COLUMN spid HEADING "SPID" FORMAT a6
|
||
|
|
COLUMN transaction_start_date HEADING "Transaction|StartTime" FORMAT a18
|
||
|
|
COLUMN tran_duration HEADING "Transaction|Duration" FORMAT a15
|
||
|
|
COLUMN transaction_status HEADING "Tran|Status" FORMAT a8
|
||
|
|
COLUMN space HEADING "Space|Tran" FORMAT a5
|
||
|
|
COLUMN recursive HEADING "Recu|rsive|Tran" FORMAT a5
|
||
|
|
COLUMN noundo HEADING "No|Undo|Tran" FORMAT a4
|
||
|
|
COLUMN ptx HEADING "Par'l|Tran" FORMAT a5
|
||
|
|
COLUMN used_undo HEADING "Undo|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||
|
|
COLUMN username HEADING "UserName" FORMAT a20
|
||
|
|
COLUMN osuser HEADING "OS User" FORMAT a15 TRUNCATED
|
||
|
|
COLUMN status HEADING "Session|Status" FORMAT a8
|
||
|
|
COLUMN state HEADING "Session|State" FORMAT a12 TRUNCATED
|
||
|
|
COLUMN logon_time HEADING "Logon Time" FORMAT a18
|
||
|
|
COLUMN MACHINE HEADING "Machine" FORMAT a20 TRUNCATED
|
||
|
|
COLUMN process HEADING "Process" FORMAT a11
|
||
|
|
COLUMN program HEADING "Program" FORMAT a20 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
|
||
|
|
|
||
|
|
COLUMN log_io HEADING "Logical|IO|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||
|
|
COLUMN phy_io HEADING "Physical|IO|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||
|
|
COLUMN cr_get HEADING "Consistent|Gets|(&&COUNT_HEADING)" FORMAT &&COUNT_FORMAT
|
||
|
|
|
||
|
|
COLUMN locked_mode HEADING "Lock Mode" FORMAT a10
|
||
|
|
COLUMN object_name HEADING "ObjectName" FORMAT a35
|
||
|
|
|
||
|
|
|
||
|
|
SELECT
|
||
|
|
-- t.xid xid
|
||
|
|
--, t.ptx_xid
|
||
|
|
s.sid sid
|
||
|
|
, t.inst_id
|
||
|
|
, p.spid
|
||
|
|
, s.status
|
||
|
|
, TO_CHAR(t.start_date,'DD-MON-YY HH24:MI:SS') transaction_start_date
|
||
|
|
, FLOOR(sysdate - t.start_date) || 'd '
|
||
|
|
|| LPAD(FLOOR(MOD((sysdate - t.start_date) , 1) * 24 ) ,2) || 'h '
|
||
|
|
|| LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 , 1) * 60 ) ,2) || 'm '
|
||
|
|
|| LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 * 60 , 1) * 60 ) ,2) || 's ' tran_duration
|
||
|
|
, t.status transaction_status
|
||
|
|
, t.space
|
||
|
|
, t.recursive
|
||
|
|
, t.noundo
|
||
|
|
, t.ptx
|
||
|
|
, DECODE(lo.locked_mode,
|
||
|
|
0, 'None', /* Mon Lock equivalent */
|
||
|
|
1, 'Null', /* N */
|
||
|
|
2, 'Row-S (SS)', /* L */
|
||
|
|
3, 'Row-X (SX)', /* R */
|
||
|
|
4, 'Share', /* S */
|
||
|
|
5, 'S/Row-X (SSX)', /* C */
|
||
|
|
6, 'Exclusive', /* X */
|
||
|
|
TO_CHAR(lo.locked_mode)
|
||
|
|
) locked_mode
|
||
|
|
, NVL2(o.owner,o.owner|| '.' || o.object_name || NVL2(o.subobject_name,'(' || o.subobject_name || ')','') , '' ) object_name
|
||
|
|
, ROUND((t.used_ublk * p.value)/&&BYTES_DIVIDER) used_undo
|
||
|
|
, t.log_io/&&COUNT_DIVIDER log_io
|
||
|
|
, t.phy_io/&&COUNT_DIVIDER phy_io
|
||
|
|
, t.cr_get/&&COUNT_DIVIDER cr_get
|
||
|
|
, s.username
|
||
|
|
, s.osuser
|
||
|
|
-- , s.sql_id
|
||
|
|
-- , s.sql_child_number
|
||
|
|
, s.program
|
||
|
|
FROM gv$transaction t
|
||
|
|
INNER JOIN gv$session s ON t.inst_id = s.inst_id AND t.ses_addr = s.saddr
|
||
|
|
INNER JOIN gv$process p ON p.inst_id = s.inst_id AND p.addr = s.paddr
|
||
|
|
INNER JOIN v$parameter p ON p.name = 'db_block_size'
|
||
|
|
LEFT OUTER JOIN gv$locked_object lo ON t.inst_id = lo.inst_id
|
||
|
|
AND s.sid = lo.session_id
|
||
|
|
AND t.xidusn = lo.xidusn
|
||
|
|
AND t.xidslot = lo.xidslot
|
||
|
|
AND t.xidsqn = lo.xidsqn
|
||
|
|
LEFT OUTER JOIN dba_objects o ON lo.object_id = o.object_id
|
||
|
|
WHERE 1=1 and 2=2
|
||
|
|
-- had to put AND clause other when no where clause is passed it was giving following error
|
||
|
|
-- SP2-0341: line overflow during variable substitution (>3000 characters at line 53)
|
||
|
|
&&WHERE_CLAUSE
|
||
|
|
ORDER BY transaction_start_date asc
|
||
|
|
;
|
||
|
|
|