科技看点|分享测试环境中一条sql拖垮整个数据库的解决思路( 二 )


科技看点|分享测试环境中一条sql拖垮整个数据库的解决思路6、观察awr报告最快的办法就是看等待事件--》找对应sql
等待事件很明显是CPU占用过高 , 对应看sql order by CPU time实际上就有结果了 。
科技看点|分享测试环境中一条sql拖垮整个数据库的解决思路
科技看点|分享测试环境中一条sql拖垮整个数据库的解决思路有兴趣的朋友可以算一下这条sql产生了多少的逻辑读..
科技看点|分享测试环境中一条sql拖垮整个数据库的解决思路7、关于'acknowledge over PGA limit' Wait Event细心的朋友从AWR应该可以观察到'acknowledge over PGA limit' Wait Event , 查询mos文档 , 发现此类问题是由于PGA大小达到了PGA_AGGREGATE_LIMIT的值 , 防止ORA-4036错误 , 后面进程分配pga时需要等待其他进程释放pga 。
科技看点|分享测试环境中一条sql拖垮整个数据库的解决思路临时解决方案:
1. Set PGA_AGGREGATE_LIMIT=0 (as SYS user) to revert to 11g behavior of PGA memory management using PGA_AGGREGATE_TARGET parameter and the wait event will be alleviated. ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=0 SID='*' SCOPE=BOTH;2. Set PGA_AGGREGATE_LIMIT to higher than the default value (as SYS user), which was calculated based on the PGA_AGGREGATE_TARGET, PROCESSES or "_pga_limit_target_perc" setting and that will also help to reduce this wait event.ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=oracle建议设置PGA_AGGREGATE_LIMIT=0或者增大这个参数的值解决ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=0 SCOPE=BOTH;上面这个方法只是暂时解决 , 究竟是什么导致的呢 , 需要继续检查pga使用情况
首先判断该应用pga设置是否合理 , 即连接数数量和pga大小 , 可以通过查询process数量和pga使用 , 如果明显出现process较小而pga使用很大 , 则有可能是某些应用进程或者数据库进程异常导致 , 其实就是下面sql导致了 , 也就是上面AWR看到的sql 。
进一步探究可用以下sql:
--列出占用pga最大的进程select pid,spid,substr(username, 1, 20) "USER",program,PGA_USED_MEM,PGA_ALLOC_MEM,PGA_FREEABLE_MEM,PGA_MAX_MEMfrom v$process where pga_alloc_mem = (select max(pga_alloc_mem)from v$processwhere program not like '%LGWR%');--检查应用进程分配的pga,查询出大于50m的select a.sid,a.status,a.sql_id,a.last_call_et,b.pga_alloc_mem/1024/1024,a.event,a.state from v$session a,v$process b where a.paddr=b.addr and a.status='INACTIVE' and b.pga_alloc_mem/1024/1024 > 50;--查看当前pga使用情况select * from v$pgastat8、问题sql分析两个800万的表全扫后做hash连接 , 连接是没问题的 , 问题在于两点:
1)为什么800万的表要全扫
2)为什么同样的表要查两次
ps:看不懂执行计划不要问我 , www.baidu.com或者看之前文章..
【科技看点|分享测试环境中一条sql拖垮整个数据库的解决思路】SELECT id FROM xxl_job_log WHERE ID NOT IN (SELECT id FROM xxl_job_log WHERE (trigger_code in (0, 200) and handle_code = 0) OR (handle_code = 200) ) AND alarm_status = 0 ORDER BY id ASC


推荐阅读