logstash抽取oracle慢sql和alert日志

1.通过Oracle快照定位慢日志

  Oracle快照每小时产生一个,每个快照包含了一小时内所需记录sql的执行情况


  快照视图:DBAHISTSQLSTAT

  详解  https : docs. oracle. com/ en/ database oracle oracle - database  12.2/refrn/DBA_HIST_SQLSTAT.html#GUID-F5A246E0-C04A-406C-9E10-AC26E7742F06


2.创建视图,用于查询最新一小时的慢SQL

    create or replace view slow_sql_view as
    select to_char(sysdate-1/24,'yyyy-mm-dd hh24') as snapshot_time,--快照时间
    v_1.sql_id,
    v_1.elapsed_time,--一小时内累计耗时
    v_1.cpu_time,--一小时内累计CPU时间
    v_1.iowait_time,--一小时内累计io等待时间
    v_1.gets,--一小时内累逻辑读
    v_1.reads,--一小时内累计物理读
    v_1.rws,--一小时内累计返回行数
    v_1.clwait_time,--一小时内累计集群等待时间
    v_1.execs,--一小时内累计执行次数
    v_1.elpe,--平均每条SQL消耗时间
    nvl(v_2.machine,'null') as machine,--客户服务器名称
    nvl(v_2.username,'null') as username,--客户连接用户名
    to_char(substr(v_1.sqt,1,3000)) as sql

    from
    (select s.sql_id,
    round(elapsed_time 1000000,2) elapsed_time,
    round(cpu_time / 1000000,2) cpu_time,
    round(iowait_time / 1000000,2) iowait_time,
    gets,
    reads,
    rws,
    round(clwait_time / 1000000,2) clwait_time,
    execs,
    st.sql_text sqt,
    round(elapsed_time / 1000000 / decode(execs, 0, null, execs),2) elpe
    from (select *
    from (select sql_id,
    sum(executions_delta) execs,
    sum(buffer_gets_delta) gets,
    sum(disk_reads_delta) reads,
    sum(rows_processed_delta) rws,
    sum(cpu_time_delta) cpu_time,
    sum(elapsed_time_delta) elapsed_time,
    sum(clwait_delta) clwait_time,
    sum(iowait_delta) iowait_time
    from dba_hist_sqlstat
    where snap_id =(select max(snap_id) from dba_hist_snapshot)
    group by sql_id
    order by sum(elapsed_time_delta) desc)
    where rownum =1 --平均执行时间大于1s的sql过滤出来
    order by elpe desc
    ;