2026-03-12 20:23:15
This commit is contained in:
61
vdh/fsx.sql
Normal file
61
vdh/fsx.sql
Normal file
@@ -0,0 +1,61 @@
|
||||
----------------------------------------------------------------------------------------
|
||||
--
|
||||
-- File name: fsx.sql
|
||||
--
|
||||
-- Purpose: Find SQL and report whether it was Offloaded and % of I/O saved.
|
||||
--
|
||||
-- Author: Kerry Osborne
|
||||
--
|
||||
-- Usage: This scripts prompts for two values.
|
||||
--
|
||||
-- sql_text: a piece of a SQL statement like %select col1, col2 from skew%
|
||||
--
|
||||
-- sql_id: the sql_id of the statement if you know it (leave blank to ignore)
|
||||
--
|
||||
-- Description:
|
||||
--
|
||||
-- This script can be used to locate statements in the shared pool and
|
||||
-- determine whether they have been executed via Smart Scans.
|
||||
--
|
||||
-- It is based on the observation that the IO_CELL_OFFLOAD_ELIGIBLE_BYTES
|
||||
-- column in V$SQL is only greater than 0 when a statement is executed
|
||||
-- using a Smart Scan. The IO_SAVED_% column attempts to show the ratio of
|
||||
-- of data received from the storage cells to the actual amount of data
|
||||
-- that would have had to be retrieved on non-Exadata storage. Note that
|
||||
-- as of 11.2.0.2, there are issues calculating this value with some queries.
|
||||
--
|
||||
-- Note that the AVG_ETIME will not be acurate for parallel queries. The
|
||||
-- ELAPSED_TIME column contains the sum of all parallel slaves. So the
|
||||
-- script divides the value by the number of PX slaves used which gives an
|
||||
-- approximation.
|
||||
--
|
||||
-- Note also that if parallel slaves are spread across multiple nodes on
|
||||
-- a RAC database the PX_SERVERS_EXECUTIONS column will not be set.
|
||||
--
|
||||
-- See kerryosborne.oracle-guy.com for additional information.
|
||||
---------------------------------------------------------------------------------------
|
||||
set pagesize 999
|
||||
set lines 190
|
||||
col sql_text format a70 trunc
|
||||
col child format 99999
|
||||
col execs format 9,999
|
||||
col avg_etime format 99,999.99
|
||||
col "IO_SAVED_%" format 999.99
|
||||
col avg_px format 999
|
||||
col offload for a7
|
||||
|
||||
select sql_id, child_number child, plan_hash_value plan_hash, executions execs,
|
||||
(elapsed_time/1000000)/decode(nvl(executions,0),0,1,executions)/
|
||||
decode(px_servers_executions,0,1,px_servers_executions/decode(nvl(executions,0),0,1,executions)) avg_etime,
|
||||
px_servers_executions/decode(nvl(executions,0),0,1,executions) avg_px,
|
||||
decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,'No','Yes') Offload,
|
||||
decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,0,100*(IO_CELL_OFFLOAD_ELIGIBLE_BYTES-IO_INTERCONNECT_BYTES)
|
||||
/decode(IO_CELL_OFFLOAD_ELIGIBLE_BYTES,0,1,IO_CELL_OFFLOAD_ELIGIBLE_BYTES)) "IO_SAVED_%",
|
||||
sql_text
|
||||
from v$sql s
|
||||
where upper(sql_text) like upper(nvl('&sql_text',sql_text))
|
||||
and sql_text not like 'BEGIN :sql_text := %'
|
||||
and sql_text not like '%IO_CELL_OFFLOAD_ELIGIBLE_BYTES%'
|
||||
and sql_id like nvl('&sql_id',sql_id)
|
||||
order by 1, 2, 3
|
||||
/
|
||||
Reference in New Issue
Block a user