博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
性能下降的不定时炸弹_过旧的sql_profile
阅读量:2446 次
发布时间:2019-05-10

本文共 2051 字,大约阅读时间需要 6 分钟。

最近这一周以来,生产环境像是得了重病的病人一样,小问题没有修好,大问题不断。IO的等待极为严重。数据库的负载达到了几十倍,上百倍。

weblogic和tuxedo在很大程度上都受到了影响,导致业务响应极为缓慢。
在排查了中间件部门,数据库,存储,网络,操作系统等各个层面,也发现了存储的一些小问题,问题比较大的就是数据库这边的一个sql语句,每执行一次需要7分多钟,按理说这种类型的语句执行7分钟左右可能不是太大的问题。但是了解到这个sql语句在所有的中间件层面都需要频繁的发送sql请求,比如有20个weblgoic,那么可能就同时会发送20个sql请求,这个问题一下子就变得有些严重了。
更有些让人纳闷的是,通过查看sql语句,发现里面添加了一些hint,这些Hint在认真的校验之后,都没有问题,根据产品线的反馈,这些都是反复验证的最优执行。里面有一个5千多万条数据的表,需要走全表扫描,在Hint里面加了一些指定的处理,都是很合理的处理。
我抓取到top sql以后,查看执行计划就有些纳闷,为什么执行计划和Hint里面的有很大出入,Hint中指定了使用全表扫描,并行,但是生产环境的执行计划却是用了索引,没有使用并行。
反复的验证之后,但是也没留意,自己主观的认为没有走并行可能是资源使用受限,没有多余的并行资源可用了,所以没有走并行,走索引扫描,可能是Oracle认为通过索引扫描的代价更低。
但是自己的认识确实是错了。我显示通过sql monitor得到了对于那个的执行报告,然后生成了一个sql tuning advisor的报告,里面给的两个建议,一个是添加对应的索引,让一些数据的过滤更加高效,这个也需要斟酌,毕竟添加额外的索引会对dml产生一定的影响,可能原有的一些执行计划会受到影响,得不偿失。 另外一个建议就是增加并行。这个地方我就有些纳闷了,本来已经增加了并行,但是似乎没有产生什么效果。
最后查看sql_profile的配置时,自己才恍然大悟。sql语句没有走hint指定的执行计划,很大程度上是因为已经配置了对应的sql_profile,这个sql_profile里面指定了数据的访问需要走索引,不走并行等等。按照问题排查的思路,我们这几个月对没有处理过这个sql语句。最后一查看创建的时间让人大跌眼镜,这个sql_profile是在去年的10月份创建的,那个时候里面的数据要少很多。按照当时的分析和数据量,访问索引可能效率更高,代价更低。但是过了快一年了,结果数据量增加了好几倍,系统的负载也上来了,原来的profiel就产生了负面的影响,本来影响还不明显,慢慢的随着数据量的不断增大,问题越来越严重,导致了隔了一年以后终于爆发了。
所以说过旧的profile真是一个不定式炸弹,在系统的升级过程中,有些执行计划确实要好好斟酌。oracle毕竟没有那么有远见的判断你数据的增长情况,它只是在当前的情况下能分析出最友,代价最低的一些建议。但是需要我们自己来判断。
当然了这个问题的处理也不是一句话就解决的事,我们需要做好充分的准备,首先需要备份原有的profile,万一性能更加糟糕了怎么办,至少我们可以让执行计划不会更加糟糕。恢复回去。
这个时候就可以使用dbms_sqltune里面的几个小功能。
这个功能是创建一个sqlprofiel备份的表,所有的profile的备份数据可以放在这个表中

SQL> exec DBMS_SQLTUNE.CREATE_STGTAB_SQLPROF(table_name=>'STAGE',schema_name=>'N1');

PL/SQL procedure successfully completed.

使用如下的命令可以直接把当前的profile数据备份到表中

SQL> exec dbms_sqltune.PACK_STGTAB_SQLPROF(PROFILE_NAME=>'SYS_SQLPROF_01419cd955b40000',STAGING_TABLE_NAME=>'STAGE',STAGING_SCHEMA_OWNER=>'N1');

PL/SQL procedure successfully completed.

有了这些数据,就可以导入到别的库上或者直接恢复。
当然了在目前的库上我们先不需要这个profiel了,就需要直接删除它。
exec dbms_sqltune.drop_sql_profile('SYS_SQLPROF_01419cd955b40000');
这样处理之后,就等性能能够有质的飞跃了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1284144/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-1284144/

你可能感兴趣的文章
HTML和HTML5之间的区别
查看>>
android mvp示例_Android使用SwipeRefreshLayout示例向下拉或向下滑动以刷新
查看>>
在Android中获取当前日期的4种方法
查看>>
windows便笺_如何将便笺提醒附加到Windows和应用程序
查看>>
加密货币钱包提供商_每日新闻摘要:一位加密货币钱包开发者为了保护用户而黑客攻击
查看>>
chromebook刷机_每日新闻摘要:Google终止了将Windows引入Chromebook的项目
查看>>
vue alexa:_免费下载:在任何PC上使用Alexa免提
查看>>
2019新闻列表_每日新闻摘要:Google I / O 2019的期望
查看>>
如何修复破坏大照片的Undertow
查看>>
电子书pdf文件网站_如何转换PDF文件以便于阅读电子书
查看>>
如何在PowerPoint中水平翻转图片
查看>>
如何从Excel列表中的Word中创建邮件标签
查看>>
如何在Linux启动时轻松挂载分区
查看>>
outlook 加载配置项_如何禁用Outlook加载项进行故障排除
查看>>
如何导出或删除Outlook.com搜索历史记录
查看>>
dd-wrt固件_如何使用DD-WRT优先安排网络流量
查看>>
如何将您的计算机变成带有病态胡须的增压TiVo
查看>>
如何在Facebook Messenger中启用暗模式
查看>>
如何远程锁定或擦除iOS 5设备
查看>>
如何重命名您的AirPods
查看>>