51 lines
2.4 KiB
MySQL
51 lines
2.4 KiB
MySQL
|
|
-- +----------------------------------------------------------------------------+
|
||
|
|
-- | Jeffrey M. Hunter |
|
||
|
|
-- | jhunter@idevelopment.info |
|
||
|
|
-- | www.idevelopment.info |
|
||
|
|
-- |----------------------------------------------------------------------------|
|
||
|
|
-- | Copyright (c) 1998-2011 Jeffrey M. Hunter. All rights reserved. |
|
||
|
|
-- |----------------------------------------------------------------------------|
|
||
|
|
-- | DATABASE : Oracle |
|
||
|
|
-- | FILE : perf_top_sql_by_disk_reads.sql |
|
||
|
|
-- | CLASS : Tuning |
|
||
|
|
-- | PURPOSE : Report on top SQL statements ordered by disk reads. |
|
||
|
|
-- | NOTE : As with any code, ensure to test this script in a development |
|
||
|
|
-- | environment before attempting to run it in production. |
|
||
|
|
-- +----------------------------------------------------------------------------+
|
||
|
|
|
||
|
|
SET LINESIZE 145
|
||
|
|
SET PAGESIZE 9999
|
||
|
|
SET VERIFY off
|
||
|
|
|
||
|
|
COLUMN username FORMAT a18 HEADING 'Username'
|
||
|
|
COLUMN disk_reads FORMAT 999,999,999,999,999 HEADING 'Disk Reads'
|
||
|
|
COLUMN executions FORMAT 999,999,999,999,999 HEADING 'Executions'
|
||
|
|
COLUMN reads_per_exec FORMAT 999,999,999,999,999 HEADING 'Reads / Executions'
|
||
|
|
COLUMN sql HEADING 'SQL Statement'
|
||
|
|
|
||
|
|
BREAK ON report
|
||
|
|
COMPUTE sum OF disk_reads ON report
|
||
|
|
COMPUTE sum OF executions ON report
|
||
|
|
COMPUTE sum OF reads_per_exec ON report
|
||
|
|
|
||
|
|
prompt
|
||
|
|
prompt =============================================
|
||
|
|
prompt SQL with disk reads greater than 1000
|
||
|
|
prompt =============================================
|
||
|
|
|
||
|
|
SELECT
|
||
|
|
UPPER(b.username) username
|
||
|
|
, a.disk_reads disk_reads
|
||
|
|
, a.executions executions
|
||
|
|
, a.disk_reads / decode(a.executions, 0, 1, a.executions) reads_per_exec
|
||
|
|
, sql_text || chr(10) || chr(10) sql
|
||
|
|
FROM
|
||
|
|
sys.v_$sqlarea a
|
||
|
|
, dba_users b
|
||
|
|
WHERE
|
||
|
|
a.parsing_user_id = b.user_id
|
||
|
|
AND a.disk_reads > 1000
|
||
|
|
AND b.username NOT IN ('SYS','SYSTEM')
|
||
|
|
ORDER BY
|
||
|
|
disk_reads desc;
|