我们正在应用程序中偶尔执行长查询。该数据库是Oracle 12.1 RDS。我在AppDynamics中看到查询执行了13秒,我自己在Oracle SQL Developer中执行了查询,并且查询时间不会超过0.1秒。我不能在这里放置查询,因为其中有3个偶尔会给执行时间带来超过10s的时间,对于每个查询,我都无法在SQL Developer中进行重现。 我们已经开始使用/ * + collect_plan_statistics * /为长时间运行的查询记录执行计划,该查询与执行0.1秒的查询相同,不同之处在于它没有这样的记录“ 1 SQL Plan Directive for此声明”。
我正在寻找可以帮助识别此行为的根本原因的任何想法。
答案 0 :(得分:0)
一种可能性是,您有一个缓存的执行计划,该计划对于大多数参数值或参数值的组合都适用,但是对于某些值/组合却严重失败。您可以尝试在WHERE子句中添加非过滤谓词,例如 <?php echo $sizes[0]; ?>
<?php echo $sizes[1]; ?>
<?php echo $sizes[2]; ?>
<?php echo $sizes[3]; ?>
。 I've read,但尚未测试是否可用于强制进行硬解析,但可能是您需要更改值(例如1 = 1
,1 = 1
,{{1} }等)来执行每次查询。