定期自动统计大表执行情况

一、创建用户并赋权

sql 复制代码
create user dbtj identified by oracle default tablespace OGGTBS;

grant connect,resource to dbtj;

grant select any dictionary to dbtj;

grant create job to dbtj;

grant manage scheduler to dbtj;

二、创建存储表

1、连接到新建用户

conn dbtj/oracle

2、按大表2千万为维度,统计出大表,再根据大表找到最近一天的sql,统计其执行效率(毫秒),创建数据存储表

sql 复制代码
create table dbtj.dbtj_tab as

select to_char(b.end_interval_time, 'yyyy-mm-dd-hh24') as datet,

SQL_ID,

sum(a.executions_delta) exec_d,

sum(a.buffer_gets_delta) buffer_d,

sum(a.disk_reads_delta) disk_d,

round(sum(a.elapsed_time_delta / 1000000), 3) et_d,

round(decode(sum(a.executions_delta),

0,

sum(a.elapsed_time_delta),

sum(a.elapsed_time_delta / 1000) /

sum(a.executions_delta)),

2) et_onetime

from dba_hist_sqlstat a, dba_hist_snapshot b

where a.snap_id = b.snap_id

and a.instance_number = b.instance_number

and a.sql_id IN

(SELECT DISTINCT (SQL_ID)

FROM GV$SQL_PLAN SP

WHERE (sp.OBJECT_OWNER, sp.OBJECT_NAME) in

(select owner, table_name

from dba_tables

where num_rows >= 20000000

and owner not in ('SYS', 'SYSTEM')))

AND B.end_interval_time >= SYSDATE - 6/24

group by to_char(b.end_interval_time, 'yyyy-mm-dd-hh24'), SQL_ID

having(sum(a.executions_delta)) > 0

order by 1;

三、创建存储过程,将第二步的查询结果插入到数据表dbtj_tab

sql 复制代码
create or replace procedure dbtj_proc

as

begin

insert into dbtj.dbtj_tab

select to_char(b.end_interval_time, 'yyyy-mm-dd-hh24') as datet,

SQL_ID,

sum(a.executions_delta) exec_d,

sum(a.buffer_gets_delta) buffer_d,

sum(a.disk_reads_delta) disk_d,

round(sum(a.elapsed_time_delta / 1000000), 3) et_d,

round(decode(sum(a.executions_delta),

0,

sum(a.elapsed_time_delta),

sum(a.elapsed_time_delta / 1000) /

sum(a.executions_delta)),

2) et_onetime

from dba_hist_sqlstat a, dba_hist_snapshot b

where a.snap_id = b.snap_id

and a.instance_number = b.instance_number

and a.sql_id IN

(SELECT DISTINCT (SQL_ID)

FROM GV$SQL_PLAN SP

WHERE (sp.OBJECT_OWNER, sp.OBJECT_NAME) in

(select owner, table_name

from dba_tables

where num_rows >= 20000000

and owner not in ('SYS', 'SYSTEM')))

AND B.end_interval_time >= SYSDATE - 6/24

group by to_char(b.end_interval_time, 'yyyy-mm-dd-hh24'), SQL_ID

having(sum(a.executions_delta)) > 0

order by 1;

commit;

end;

四、创建定时任务,每天1、7、13、19 统计

sql 复制代码
begin

dbms_scheduler.create_job(

job_name =>'dbtj_job',

job_type =>'STORED_PROCEDURE',

JOB_ACTION =>'dbtj_proc',

START_DATE =>TO_TIMESTAMP_TZ('2022-07-11 22:10:00 +8:00','YYYY-MM-DD HH24:MI:SS TZH:TZM'),

REPEAT_INTERVAL =>'FREQ=DAILY;BYHOUR=01,07,13,19',

ENABLED =>TRUE);

END;

五、测试

sql 复制代码
begin

dbtj_proc;

end;


begin

dbms_scheduler.enable('dbtj_job');

end;


begin

dbms_scheduler.run_job('dbtj_job');

end;


BEGIN

DBMS_SCHEDULER.DROP_JOB('dbtj_job');

END;


select * from dbtj.dbtj_tab;

六、结果展示

sql 复制代码
dbtj.dbtj_tab

select datet as "时间",sql_id,exec_d as "执行次数",et_onetime as "每次耗时(毫秒)" from dbtj.dbtj_tab where datet >= to_char(sysdate-1,'yyyy-mm-dd-hh24') order by 1;
相关推荐
无巧不成书02182 天前
FFmpeg 保姆级安装教程!Windows/macOS/Linux全平台覆盖,
windows·macos·ffmpeg
kkoral4 天前
OpenCV 与 FFmpeg 的关系
opencv·ffmpeg
kkoral4 天前
如何在 Python 中使用 OpenCV 调用 FFmpeg 的特定功能?
python·opencv·ffmpeg
山栀shanzhi4 天前
【FFmpeg】音视频MP4封装格式转封装MOV
ffmpeg·音视频
山栀shanzhi4 天前
【FFmpeg】是什么是未压缩的裸流?
c++·ffmpeg
Maverick065 天前
02-SQL执行计划与优化器:Oracle是怎么决定“该怎么查“的
数据库·sql·oracle·ffmpeg
EasyDSS5 天前
RTMP高清推流直播/智能转码/无人机直播EasyDSS破局旅游慢直播痛点
ffmpeg·旅游·视频转码·fmp4·点播技术
EasyDSS5 天前
RTMP高清推流直播/视频转码EasyDSS在无人机RTMP直播场景中的应用技术解析
ffmpeg·音视频·无人机·视频转码·语音转写·点播技术
私人珍藏库5 天前
[Windows] FFmpeg 图形化:EasyFF v0.17
ffmpeg·媒体·工具·软件·win·多功能
EasyDSS6 天前
场景深耕:低延迟高并发EasyDSS无人机RTMP高清推流直播技术剖析
ffmpeg·webrtc·rtmp