查询从应用服务器创建与toad不同的执行计划

时间:2014-02-21 20:36:47

标签: asp.net oracle toad sql-execution-plan exadata

仅作为序言,我已经看到了十几个类似的SO Q / As,它们看起来有点不同(不同的服务器,不同的参数等)。

基本问题

这是我的问题,我们正在针对我们的exadata 11g实例从Web服务器运行select语句。这是一个相当简单的查询(它是一个计数)。当它从Web服务器执行时,它通常比从完全相同的数据库实例从toad运行完全相同的查询所花费的时间平均长150倍。每隔一段时间,查询就会从Web服务器快速运行。

其他信息

当Web服务器出现故障时,执行计划会有很大不同,包括全表扫描。我们可以翻转到toad并运行查询并获得300毫秒的响应。回到Web服务器并回复45秒(我们正在观察oracle性能工具,新文件)。

我们还尝试以Web用户的oracle帐户登录,并且使用正确的执行计划可以很好地运行性能。所以我认为它不是与用户有关的东西(但是我不完全清楚我是否还有其他东西可以在这里看看。)

此外,我们已启用/禁用并行查询,并且看起来没有区别,类似于toad。我们不能让它在Web服务器之外打破。

Web服务器本身是一个iis,使用read committed transaction(我们在toad中模拟,toad仍然正常执行)。

表上的程度是正常的(我的意思是,如果这是一个问题,你会期望它从网络服务器和蟾蜍都很糟糕。)

我不认为这可能是驱动程序的事情(可能吗?),因为查询已经在数据库服务器上,oracle决定执行计划而不管是谁发送它并且它位于完全旋转的exadata节点中表扫描。

所以我想我的问题是,当我基本上为相同的查询,相同的参数,相同的用户,使用不同的客户端同时(或交替)运行两个不同的执行计划时,我还能看到什么? / p>

1 个答案:

答案 0 :(得分:2)

之前见过这个。我的查询从两台不同的计算机运行,并获得了剧烈的执行响应时间。与您的类似,一个执行计划获得索引,而另一个执行计划使用全表扫描。就我而言,原因与基数反馈有关。将其关闭并修复此问题。顺便问一下,你使用的是哪个版本的11g? 要为快速查询提取执行计划,添加/ * + monitor * / hint将帮助您的查询显示在SQL Monitor上。