with stats as ( select /*+ materialize */ * from ( select parsing_schema_name,t.start#,t.end#,t.sql_id,t.plan_hash_value,t.execs,t.avg_sec,s.sql_text from ( select s.parsing_schema_name,min(begin_interval_time) start#,max(begin_interval_time) end#, sql_id, plan_hash_value, sum(nvl(executions_delta,0)) execs, round ((sum(elapsed_time_delta)/(sum(executions_delta)))/1000000) avg_sec from DBA_HIST_SQLSTAT S, DBA_HIST_SNAPSHOT SS where 1=1 and ss.begin_interval_time > trunc(sysdate-4,'iw') and ss.snap_id = S.snap_id and ss.instance_number = S.instance_number and executions_delta > 0 and (elapsed_time_delta/decode(nvl(executions_delta,0),0,1,executions_delta))/1000000 > &1 group by sql_id, plan_hash_value,parsing_schema_name )t join dba_hist_sqltext s on s.sql_id=t.sql_id order by execs*avg_sec desc ) tt where rownum <= 50 ) select * from stats s where parsing_schema_name not like 'SYS%' and s.sql_text not like '%/* DS_SVC */%' and s.sql_text not like '%_job_proc%' and s.sql_text not like '%SQL Analyze%' and lower(s.sql_text) not like '%dbms_feature%' and s.sql_text not like '%SYS_DBA_SEGS%' and lower(s.sql_text) not like '%v$sys%' and lower(s.sql_text) not like '%dba_audit_trail%' and lower(s.sql_text) not like '%no_index(mytab)%';
Posts from Июнь 2017
Postgresql how-to find top query for last 15 seconds
DROP TABLE IF EXISTS pg_stat_statements_temp; create table pg_stat_statements_temp as SELECT d.datname,u.usename, s.queryid, round(s.total_time::numeric, 2) AS total_time, s.calls, round(s.mean_time::numeric, 2) AS mean, now() as cur_date FROM pg_stat_statements s join pg_database d on s.dbid=d.oid join pg_user u on s.userid=u.usesysid; select pg_sleep(15); with stat as (SELECT d.datname,u.usename, s.queryid,s.query, round(s.total_time::numeric, 2) AS total_time, s.calls, round(s.mean_time::numeric, 2) AS mean FROM pg_stat_statements s join pg_database d on s.dbid=d.oid join pg_user u on s.userid=u.usesysid ) select s.datname,s.usename,s.queryid,regexp_replace(s.query, E'[\n\r]+', ' ', 'g' )::varchar(80) AS short_query, s.total_time-t.total_time as time, s.calls-t.calls as calls, s.mean -t.mean as mean, round( (100 * (s.total_time-t.total_time) /sum(s.total_time-t.total_time) OVER () )::numeric, 2) as cpu, now()-t.cur_date as diff_time, CASE WHEN s.calls-t.calls >0 THEN (s.calls-t.calls )/(extract ( second from now()-t.cur_date) + extract ( minutes from now()-t.cur_date)*60 + extract ( minutes from now()-t.cur_date)*60*60 ) else '0' end as tps from stat s join pg_stat_statements_temp t on s.datname=t.datname and s.usename=t.usename and s.queryid=t.queryid order by cpu desc limit 20;
Oracle find query runs slower than ‘&1’ seconds in ‘&2’ minutes
with stats as ( select /*+ materialize */ * from ( select t.start#,t.end#,t.sql_id,t.plan_hash_value,t.execs,t.avg_sec,s.sql_text from ( select min(begin_interval_time) start#,max(begin_interval_time) end#, sql_id, plan_hash_value, sum(nvl(executions_delta,0)) execs, round ((sum(elapsed_time_delta)/(sum(executions_delta)))/1000000) avg_sec from DBA_HIST_SQLSTAT S, DBA_HIST_SNAPSHOT SS where 1=1 and ss.begin_interval_time > (sysdate -&2/1440) and ss.snap_id = S.snap_id and ss.instance_number = S.instance_number and executions_delta > 0 and (elapsed_time_delta/decode(nvl(executions_delta,0),0,1,executions_delta))/1000000 > &1 group by sql_id, plan_hash_value )t join dba_hist_sqltext s on s.sql_id=t.sql_id order by execs*avg_sec desc ) tt where rownum <= 50 ) select * from stats s where 1=1 and s.sql_text not like '%/* DS_SVC */%' and s.sql_text not like '%_job_proc%' and s.sql_text not like '%SQL Analyze%' and lower(s.sql_text) not like '%dbms_feature%' and s.sql_text not like '%SYS_DBA_SEGS%' and lower(s.sql_text) not like '%v$sys%' and lower(s.sql_text) not like '%dba_audit_trail%' and lower(s.sql_text) not like '%no_index(mytab)%';
oracle12c how-to get detailed info about gather stat job
from oracle 12c it is possible to find out detailed information about gather stats job
in em you may find it at
or use dbms_stats.report_* to get info
detailed at https://docs.oracle.com/database/121/TGSQL/tgsql_astat.htm#TGSQL95102
I use it this way:
variable mystatsreport clob declare begin :mystatsreport := dbms_stats.report_stats_operations( since=>SYSTIMESTAMP-3, until=>SYSTIMESTAMP, detail_level=>'ALL', format=>'TEXT'); end; / print mystatsreport
variable mystatsreport clob declare begin :mystatsreport := dbms_stats.report_single_stats_operation ( opid => 11898,detail_level => 'TYPICAL', format =>'TEXT' ); end; / print mystatsreport
variable mystatsreport clob declare begin :mystatsreport := dbms_stats.report_single_stats_operation ( opid => 11898,detail_level => 'TYPICAL', format =>'TEXT' ); end; / print mystatsreport