一次SPA回放缓慢分析
我是本际云服务器推荐网的小编小本本,最近做了一次核心库的SPA回放,其中任务1、2跑起来较慢,预估时间要20多个小时,实际跑了近24个小时。按照经验来看,这并不正常,于是我又核查了统计信息和索引信息,发现一切正常。所以问题应该出现在SQL语句方面。只能等待SPA报告跑出来,进一步分析问题所在。

缓慢分析的原因
主要通过分析任务1、2跑出的buffer_gets报告,发现有一条语句存在较大问题。该语句在生产环境中的性能本就存在问题,但由于调用量较少,问题并未凸显出来。然而,这类语句在SPA任务1、2中的SQL集中存在,分别达到五千多和六千多。按照每个语句20s执行,这类语句执行消耗的时间可达到几十个小时。这就是造成SPA回放缓慢的主要原因。
解决方案
对于这个问题,我的解决方案是去掉该SQL语句中的hint关键字/*+ORDERED*/,因为该ORDERED提示会使Oracle按照表在FROM子句中出现的顺序联接表,从而导致执行计划无法最优。手动去掉该hint后,测试环境逻辑读降为两千多。另外,我们可以通过使用OPTIMIZER_IGNORE_HINTS参数来忽略SQL语句中使用的hint,从而进一步优化性能。在19c环境中,我们可以将该参数调整为true,然后再跑下SPA任务。最新跑出的报告显示,该SQL语句对比性能提升显著,执行时间只有0.02s左右,逻辑读也只有三千左右。重新跑下SPA任务后,系统估算任务1、2在2个小时内能跑完,实际跑下来也确认如此,速度提升了近10倍。
总结起来,SPA任务跑的慢,可能是因为业务语句使用hint导致,解决此问题还需要和业务侧沟通整改。另外需要注意的是,OPTIMIZER_IGNORE_HINTS参数对现有绑定SQL Profile的语句并不影响。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5878.html
