Queries running on database
What are the queries that are running?
select sesion.sid, sesion.username, optimizer_mode, hash_value, address, cpu_time, elapsed_time,
sql_text
from v$sqlarea sqlarea, v$session sesion where sesion.sql_hash_value = sqlarea.hash_value and sesion.sql_address = sqlarea.address and sesion.username is not null
/
Get the rows fetched, if there is difference it means processing is happening
select b.name, a.value vlu from v$sesstat a, v$statname b where a.statistic# = b.statistic#
and sid =&sid and a.value != 0 and b.name like '%row%'
/
Get the sql_hash_value
select sql_hash_value from v$session where sid='&sid';
SQL> select sql_hash_value from v$session where sid='&sid';
Enter value for sid: 1075
old 1: select sql_hash_value from v$session where sid='&sid'
new 1: select sql_hash_value from v$session where sid='1075'
SQL_HASH_VALUE
--------------
928832585
Get the sql_Text
SQL> select sql_text v$sql from v$sql where hash_value =&Enter_Hash_Value; Enter value for enter_hash_value: 928832585
Get the explain_plan
set lines 190
col XMS_PLAN_STEP format a40
set pages 100
select case when access_predicates is not null then 'A' else ' ' end || case when filter_predicates is not null then 'F' else ' ' end xms_pred, id xms_id,
lpad(' ',depth*1,' ')||operation || ' ' || options xms_plan_step, object_name xms_object_name,
cost xms_opt_cost, cardinality xms_opt_card, bytes xms_opt_bytes,
optimizer xms_optimizer from
v$sql_plan where
hash_value in (&SQL_HASH_VALUE) and to_char(child_number) like '%';
ONE SCRIPT TO IDENTIFY ALL PERFORMANCE ISSUE RELATED TO SQL QUERY
ONE SCRIPT TO IDENTIFY ALL PERFORMANCE ISSUE RELATED TO SQL QUERY
================================================================
Set echo off set trimspool on set
define on
column filename new_val filename
select to_char(sysdate, 'yyyymmdd-hh-mi-ss' ) filename from
dual; column dbname new_value dbname noprint select name dbname from v$pdbs;
spool &dbname-&filename..txt
================== DB INFO ==================
set lines 750 pages 9999
select name CDB_NAME,(select name from v$pdbs)
PDB_NAME,database_role from v$database;
select INSTANCE_NAME,HOST_NAME,logins,VERSION from
v$instance;
================== TOTALCONNECTIONS ==================
set lines 750 pages 9999 break on
report
compute SUM of tot on report
compute SUM of active on report compute SUM of inactive on report col username
for a50
select
DECODE(username,NULL,'INTERNAL',USERNAME) Username, count(*) TOT,
COUNT(DECODE(status,'ACTIVE',STATUS)) ACTIVE,
COUNT(DECODE(status,'INACTIVE',STATUS)) INACTIVE from gv$session
where status in
('ACTIVE','INACTIVE') group by username;
================ SESSIONS DETAILS ================
set linesize 750 pages 9999 column box
format a30 col serial# for 999999 column spid format a10 column username format
a30 column program format a30 column os_user format a20 col LOGON_TIME for a20
select b.inst_id,b.sid,b.serial#,a.spid,
substr(b.machine,1,30) box,to_char
(b.logon_time, 'dd-mon-yyyy
hh24:mi:ss') logon_time, substr(b.username,1,30) username,
substr(b.osuser,1,20) os_user,
substr(b.program,1,30) program,status,b.last_call_et
AS last_call_et_secs,b.sql_id from gv$session b,gv$process a
where b.paddr = a.addr and a.inst_id = b.inst_id and
type='USER' order by b.inst_id,b.sid;
================ SQL DETAIL’S ================
column sid format 9999 column username
format a15 column PARSING_SCHEMA_NAME format a15 column sql_text format a50
column module format a35 select
a.inst_id,a.sid,a.username,b.PARSING_SCHEMA_NAME,a.module,a.sql_id,a.sql
_child_number child,b.hash_value,to_char (a.sql_exec_start, 'dd-Mon-yyyy
hh24:mi:ss')
sql_exec_start,(sysdate-sql_exec_start)*24*60*60
SECS,b.rows_processed,a.status,substr(b.sql_text,1,50) sql_text from gv$session
a,gv$sqlarea b where a.sql_hash_value = b.hash_value and a.sql_address =
b.address and a.module not like '%emagent%' and a.module not like
'%oraagent.bin%' and a.username is not null order by a.status;
================== SQL MONITER REPORT =========================
column text_line format a1000 set
lines 750 pages 9999 set long 20000 longchunksize 20000
select dbms_sqltune.report_sql_monitor_list() text_line
from dual;
============ SQL MONITER –
EXECUTING
=========================
set lines 1000 pages 9999 column sid
format 9999 column serial for 999999 column status format a15 column username
format a10 column sql_text format a80 column module format a30 col program for
a30 col SQL_EXEC_START for a20
SELECT * FROM
(SELECT status,inst_id,sid,SESSION_SERIAL# as
Serial,username,sql_id,SQL_PLAN_HASH_VALUE, program,
TO_CHAR(sql_exec_start,'dd-mon-yyyy hh24:mi:ss') AS
sql_exec_start,
ROUND(elapsed_time/1000000) AS
"Elapsed (s)", ROUND(cpu_time /1000000) AS "CPU (s)",
substr(sql_text,1,30) sql_text
FROM gv$sql_monitor where status='EXECUTING' and module not
like '%emagent%'
ORDER BY sql_exec_start desc
);
================ BLOCKING
SESSIONS ================
set lines 750 pages 9999 col
blocking_status for a100
select s1.inst_id,s2.inst_id,s1.username || '@' ||
s1.machine
|| ' ( SID=' || s1.sid || ' ) is blocking '
|| s2.username || '@' || s2.machine || ' ( SID=' || s2.sid
|| ' ) ' AS blocking_status
from gv$lock l1, gv$session s1,
gv$lock l2, gv$session s2 where s1.sid=l1.sid and s2.sid=l2.sid and
s1.inst_id=l1.inst_id and s2.inst_id=l2.inst_id and l1.BLOCK=1 and l2.request
> 0 and l1.id1 = l2.id1 and l2.id2 = l2.id2 order by s1.inst_id;
============== MORE
DETAIL ==============
accept sid default '' - 'Please provide the sid: ' accept inst_id
default '' - 'Please provide the
inst_id: ' ================ SID DETAILS ================
column box format a30 column spid
format a10 column username format a20 column program format a30 column os_user
format a20 col LOGON_TIME for a20
select b.inst_id,b.sid,b.serial#,a.spid,
substr(b.machine,1,30) box,to_char
(b.logon_time, 'dd-mon-yyyy
hh24:mi:ss') logon_time, substr(b.username,1,20) username,
substr(b.osuser,1,20) os_user,
substr(b.program,1,30)
program,status,b.last_call_et AS last_call_et_secs,b.sql_id from gv$session
b,gv$process a where b.paddr = a.addr and a.inst_id = b.inst_id and type='USER'
and b.sid=&sid and b.inst_id=&inst_id order by logon_time;
column sid format 9999
column username format a15 column
PARSING_SCHEMA_NAME format a15 column sql_text format a50 column module format
a35 select
a.inst_id,a.sid,a.username,b.PARSING_SCHEMA_NAME,a.module,a.sql_id,a.sql
_child_number child,b.hash_value,to_char (a.sql_exec_start, 'dd-Mon-yyyy
hh24:mi:ss')
sql_exec_start,(sysdate-sql_exec_start)*24*60*60
SECS,b.rows_processed,a.status,substr(b.sql_text,1,50) sql_text from gv$session
a,gv$sqlarea b where a.sql_hash_value = b.hash_value and a.sql_address =
b.address and a.sid=&sid and a.inst_id=&inst_id and a.module not like
'%emagent%' and a.module not like '%oraagent.bin%' and a.username is not null
order by a.status;
accept sql_id default '' - 'Please provide the sql_id: '
================ SID WATING ON ================
COLUMN username FORMAT A20
COLUMN sid FORMAT 9999
COLUMN serial# FORMAT 999999
COLUMN event FORMAT A40
SELECT NVL(s.username, '(oracle)') AS username,
s.sid,
s.serial#, se.event, se.total_waits, se.total_timeouts,
se.time_waited, se.average_wait, se.max_wait, se.time_waited_micro FROM
gv$session_event se, gv$session s
WHERE s.sid = se.sid AND s.sid =
&sid and s.inst_id=se.inst_id and s.inst_id=&inst_id
ORDER BY se.time_waited DESC
/
col WAIT_CLASS for a10
SELECT sw.inst_id,NVL(s.username, '(oracle)') AS username,
s.sid,
s.serial#, sw.event, sw.wait_class,
sw.wait_time, sw.seconds_in_wait, sw.state
FROM gv$session_wait sw, gv$session s
WHERE s.sid = sw.sid and
s.inst_id=sw.inst_id and s.sid=&sid and s.inst_id=&inst_id
ORDER BY sw.seconds_in_wait DESC;
================ SESSIONS LongOps ================
SET VERIFY OFF
SELECT
a.sid,RPAD(a.opname,30),a.sofar,a.totalwork,a.ELAPSED_SECONDS,ROUND(((a.
sofar)*100)/a.totalwork,3) "%_COMPLETED",time_remaining,
RPAD(a.username,10) username,a.SQL_HASH_VALUE,B.STATUS
FROM GV$SESSION_LONGOPS a, gv$session b WHERE a.sid=&sid
and b.inst_id=&inst_id
AND a.sofar<> a.totalwork
/
=============== REALTIME
MONITORING FOR SID ===========
SELECT *
FROM
(SELECT status, --username, sql_id,
sql_exec_id,
TO_CHAR(sql_exec_start,'dd-mon-yyyy hh24:mi:ss') AS
sql_exec_start,
ROUND(elapsed_time/1000000) AS
"Elapsed (s)", ROUND(cpu_time /1000000) AS "CPU (s)",
buffer_gets,
ROUND(physical_read_bytes /(1024*1024)) AS "Phys reads
(MB)",
ROUND(physical_write_bytes/(1024*1024)) AS "Phys
writes (MB)"
FROM gv$sql_monitor where sid=&sid and
inst_id=&inst_id
ORDER BY elapsed_time DESC
)
WHERE rownum<=20;
SELECT ROUND(elapsed_time /1000000) AS "Elapsed
(s)",
ROUND(cpu_time /1000000,3) AS "CPU (s)",
ROUND(queuing_time /1000000,3) AS "Queuing (s)",
ROUND(user_io_wait_time /1000000,3) AS "I/O wait
(s)",
ROUND(application_wait_time/1000000,3) AS "Appli wait
(s)",
ROUND(concurrency_wait_time/1000000,3) AS "Concurrency
wait (s)",
ROUND(cluster_wait_time /1000000,3) AS
"Cluster wait (s)", ROUND(physical_read_bytes /(1024*1024)) AS
"Phys reads (MB)", ROUND(physical_write_bytes /(1024*1024)) AS
"Phys writes (MB)", buffer_gets AS "Buffer gets",
ROUND(plsql_exec_time/1000000,3) AS "Plsql exec
(s)",
ROUND(java_exec_time /1000000,3) AS "Java exec
(s)"
FROM gv$sql_monitor
WHERE sid=&sid and inst_id=&inst_id;
================== SQL_MONITOR REPORT ===============
set pagesize 0 echo off timing off linesize 1000 trimspool
on trim on long
2000000 longchunksize 2000000 select
DBMS_SQLTUNE.REPORT_SQL_MONITOR(
sql_id=>'&sql_id',
report_level=>'ALL', type=>'TEXT') from dual;
=============== FULL SQL STATEMENT ===============
set lines 1000 pages 9999 set long 20000 col sql_text for
a500
select sql_text from dba_hist_sqltext where sql_id =
'&sql_id'; ================ BIND VARIABLES ================
col VALUE_STRING for a50
SELECT NAME,POSITION,DATATYPE_STRING,VALUE_STRING FROM
gv$sql_bind_capture WHERE sql_id='&sql_id' and inst_id=&inst_id;
================ SQL HISTORY ================
set lines 1000 pages 9999
COL instance_number FOR 9999 HEA 'Inst';
COL end_time HEA 'End Time';
COL plan_hash_value HEA 'Plan|Hash Value';
COL executions_total FOR 999,999 HEA 'Execs|Total';
COL rows_per_exec HEA 'Rows Per Exec';
COL et_secs_per_exec HEA 'Elap Secs|Per Exec';
COL cpu_secs_per_exec HEA 'CPU Secs|Per Exec';
COL io_secs_per_exec HEA 'IO Secs|Per Exec';
COL cl_secs_per_exec HEA 'Clus Secs|Per Exec';
COL ap_secs_per_exec HEA 'App Secs|Per Exec';
COL cc_secs_per_exec HEA 'Conc Secs|Per Exec';
COL pl_secs_per_exec HEA 'PLSQL Secs|Per Exec';
COL ja_secs_per_exec HEA 'Java Secs|Per Exec';
SELECT 'gv$dba_hist_sqlstat' source,h.instance_number,
TO_CHAR(CAST(s.begin_interval_time AS DATE), 'DD-MM-YYYY
HH24:MI') snap_time,
TO_CHAR(CAST(s.end_interval_time AS DATE), 'DD-MM-YYYY
HH24:MI') end_time,
h.sql_id,
h.plan_hash_value,
h.executions_total,
TO_CHAR(ROUND(h.rows_processed_total / h.executions_total),
'999,999,999,999') rows_per_exec,
TO_CHAR(ROUND(h.elapsed_time_total / h.executions_total /
1e6, 3), '999,990.000') et_secs_per_exec,
TO_CHAR(ROUND(h.cpu_time_total / h.executions_total / 1e6,
3), '999,990.000') cpu_secs_per_exec,
TO_CHAR(ROUND(h.iowait_total / h.executions_total / 1e6,
3), '999,990.000') io_secs_per_exec,
TO_CHAR(ROUND(h.clwait_total / h.executions_total / 1e6,
3), '999,990.000') cl_secs_per_exec,
TO_CHAR(ROUND(h.apwait_total / h.executions_total / 1e6,
3), '999,990.000') ap_secs_per_exec,
TO_CHAR(ROUND(h.ccwait_total / h.executions_total / 1e6,
3), '999,990.000') cc_secs_per_exec,
TO_CHAR(ROUND(h.plsexec_time_total / h.executions_total /
1e6, 3), '999,990.000') pl_secs_per_exec,
TO_CHAR(ROUND(h.javexec_time_total / h.executions_total /
1e6, 3),
'999,990.000') ja_secs_per_exec FROM dba_hist_sqlstat h,
dba_hist_snapshot s
WHERE h.sql_id = '&sql_id'
AND h.executions_total > 0
AND s.snap_id = h.snap_id
AND s.dbid = h.dbid
AND s.instance_number = h.instance_number
UNION ALL
SELECT 'gv$sqlarea_plan_hash' source,h.inst_id,
TO_CHAR(sysdate, 'DD-MM-YYYY HH24:MI')
snap_time, TO_CHAR(sysdate, 'DD-MM-YYYY HH24:MI') end_time,
h.sql_id,
h.plan_hash_value,
h.executions,
TO_CHAR(ROUND(h.rows_processed / h.executions),
'999,999,999,999') rows_per_exec,
TO_CHAR(ROUND(h.elapsed_time / h.executions / 1e6, 3),
'999,990.000') et_secs_per_exec,
TO_CHAR(ROUND(h.cpu_time / h.executions / 1e6, 3),
'999,990.000') cpu_secs_per_exec,
TO_CHAR(ROUND(h.USER_IO_WAIT_TIME / h.executions / 1e6, 3),
'999,990.000') io_secs_per_exec,
TO_CHAR(ROUND(h.CLUSTER_WAIT_TIME / h.executions / 1e6, 3),
'999,990.000') cl_secs_per_exec,
TO_CHAR(ROUND(h.APPLICATION_WAIT_TIME / h.executions / 1e6,
3), '999,990.000') ap_secs_per_exec,
TO_CHAR(ROUND(h.CLUSTER_WAIT_TIME / h.executions / 1e6, 3),
'999,990.000') cc_secs_per_exec,
TO_CHAR(ROUND(h.PLSQL_EXEC_TIME / h.executions / 1e6, 3),
'999,990.000') pl_secs_per_exec,
TO_CHAR(ROUND(h.JAVA_EXEC_TIME / h.executions / 1e6, 3),
'999,990.000') ja_secs_per_exec
FROM gv$sqlarea_plan_hash h WHERE
h.sql_id = '&sql_id' and h.inst_id=&inst_id
AND h.executions > 0 order by
source ;
====================
SQL_ID WAITING ON ?
============
select sql_id,event, time_waited
"time_waited(s)", case when time_waited = 0 then
0 else
round(time_waited*100 /
sum(time_waited) Over(), 2) end "percentage" from
(
select sql_id,event,
sum(time_waited) time_waited from gv$active_session_history where sql_id =
'&sql_id' and inst_id=&inst_id group by sql_id,event
)
order by time_waited desc;
=============== OBJECT STATISTICS ====================
col table_name for a40 col owner for
a30
select distinct owner, table_name,
STALE_STATS, last_analyzed, stattype_locked from dba_tab_statistics where
(owner, table_name) in (select distinct owner, table_name from dba_tables where
( table_name) in ( select object_name from gv$sql_plan
where upper(sql_id) = upper('&sql_id') and
inst_id=&inst_id and object_name is not null))
--and STALE_STATS='YES'
/
col index_name for a50
SELECT owner, index_name, table_name,last_analyzed,
sample_size, num_rows, partitioned, global_stats
FROM dba_indexes
WHERE index_name IN (
select distinct rtrim(substr(plan_table_output,
instr(plan_table_output, '|', 1, 3)+2, (instr(plan_table_output, '|', 1,
4)-instr(plan_table_output, '|', 1, 3)-2)), '
')
from (
SELECT plan_table_output
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', null,
'BASIC'))
UNION ALL
SELECT * FROM TABLE(dbms_xplan.display_awr('&sql_id',
null, null, 'ALL'))
)
where plan_table_output like '%INDEX%'
)
ORDER BY owner, table_name, index_name
/
=================== EXPLAIN PLAN FROM
MEMORY ================
col PLAN FOR a150
SELECT
RPAD('(' || p.plan_line_ID || ' ' ||
NVL(p.plan_parent_id,'0') || ')',8) || '|' ||
RPAD(LPAD (' ', 2*p.plan_DEPTH) || p.plan_operation || ' '
|| p.plan_options,60,'.') ||
NVL2(p.plan_object_owner||p.plan_object_name, '(' ||
p.plan_object_owner|| '.' || p.plan_object_name || ') ',
'') ||
NVL2(p.plan_COST,'Cost:' || p.plan_COST,'') || ' ' ||
NVL2(p.plan_bytes||p.plan_CARDINALITY,'(' || p.plan_bytes
|| ' bytes, ' || p.plan_CARDINALITY || ' rows)','') || ' ' ||
NVL2(p.plan_partition_start || p.plan_partition_stop,'
PStart:' || p.plan_partition_start || ' PStop:' || p.plan_partition_stop,'') ||
NVL2(p.plan_time, p.plan_time || '(s)','') AS PLAN
FROM gv$sql_plan_monitor p
WHERE sid=&sid
and p.inst_id=&inst_id
ORDER BY p.plan_line_id, p.plan_parent_id;
select * from
table(dbms_xplan.display_cursor('&sql_id', NULL, 'ALLSTATS LAST'));
=================== EXPLAIN PLAN FROM AWR ====================
select * from table(dbms_xplan.display_awr('&sql_id',
NULL, null, 'ALLSTATS LAST'));
==================== SQL PROFILES ===================
set lines 1000 pages 9999 col name for
a30 col task_exec_name for a16 col category for a10 col created for a30 col
sql_text for a150
col signature for 9999999999999999999999999
select sql.sql_id,sql.child_number as child , prof.name,
prof.category,
prof.created,prof.task_exec_name,prof.FORCE_MATCHING,prof.status,prof.SIG
NATURE from
dba_sql_profiles prof, gv$sql sql
where sql.sql_id in ('&sql_id')
-- and sql.child_number=child_number
-- and
sql.force_matching_signature=prof.SIGNATURE order by created;
================ SQL BASELINES ================
col SQL_HANDLE for a30 col origin for
a16 col last_modified for a30 col last_verified for a30
select sql_handle, plan_name, origin, created,
last_modified, last_verified,ENABLED,ACCEPTED,FIXED,REPRODUCED from
dba_sql_plan_baselines
where signature in (select
force_matching_signature from gv$sql where sql_id='&sql_id' and
inst_id=&inst_id);
undef sid undef sql_id undef inst_id spool off;
Comments
Post a Comment