navicat update 把原先id排序_oracle实用脚本-查某时段INSERT、DELETE、update事务量最多的sql...

概述

之前在系统告警(凌晨)想要看一下日志切换频率和涉及到比较多的DML操作的一些sql,如果是在工作时间还可以直接查当前超过3秒之类的sql,凌晨的话就比较麻烦了,得通过sql_text和sys.wrh$_sqlstat , wrm$_snapshot 来联合查了。下面分享下相关的脚本:

cd091d2156d3b8223d9dcd9924c80449.png

查看某个时间段事务量最多的sql

通过wrh$_sqlstat , wrm$_snapshot联合查询来看指定时间段涉及到INSERT、DELETE、update操作的相关sql,按事务量来做排序。

set line 200col sql_text1 format a40col module format a30select b.* from (select t.sql_id, t.module, (select to_char(dbms_lob.substr(sql_text, 20, 1)) from sys.wrh$_sqltext where sql_id = t.sql_id and rownum <=1) sql_text1, to_char(s.begin_interval_time, 'yyyy-mm-dd hh24') begin_interval_time1, to_char(t.rows_processed_delta, '9999,9999,9999') rows_processed_delta,  round((ratio_to_report(rows_processed_delta) over ())*100,2) rtr_row, t.executions_delta, to_char(t.rows_processed_delta/(t.executions_delta+1),'9999,999999') row_exec  from sys.wrh$_sqlstat t, wrm$_snapshot s where t.dbid = s.dbid and t.snap_id = s.snap_id and s.begin_interval_time >= to_date(to_char(trunc(sysdate),'yyyy-mm-dd') ||'00:00:00','yyyy-mm-dd hh24:mi:ss') and s.begin_interval_time <= to_date(to_char(trunc(sysdate) ,'yyyy-mm-dd')||'08:00:00','yyyy-mm-dd hh24:mi:ss') order by t.snap_id desc ) b where (upper(sql_text1) like '%INSERT%' or upper(sql_text1) like '%DELETE%' or upper(sql_text1) like '%UPDATE%')order by rows_processed_delta
00e5099c80cbc70e7827aca6df1c418f.png

查看redo日志切换频率

通过redo日志切换的频率来看下某段时间是不是涉及到INSERT、DELETE、update操作的比较多。

select to_char(first_time,'YYYY-mm-dd') LOG_DATE, to_char(first_time,'HH24') LOG_HOUR, count(*) SWITCHES from v$loghist group by to_char(first_time,'YYYY-mm-dd') , to_char(first_time,'HH24') order by 1,2;
708cf267e4afcc21892fbd82df376247.png

如果在生产环境中碰到checkpoint not complete一般就是INSERT、DELETE、update操作比较多,导致redo日志切换过快,这里也可以考虑直接增加redo日志大小,但是建议通过上面sql找到问题redo日志切换比较频繁的时间段,然后查该时间段涉及比较多INSERT、DELETE、update事务操作的sql,例如凌晨2点在插入一张数据量很大的中间表也会导致上面问题的发生。

后面会分享更多关于devops和DBA方面内容,感兴趣的朋友可以关注下!

2bf86860aaee586e35007b8bb2e3631e.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值