返回超过251个结果时,简单的Oracle查询开始运行缓慢

时间:2013-11-11 21:45:53

标签: sql performance oracle

正如标题所暗示的,我有一个非常简单的Oracle查询,当我超出返回251结果时,它会在5秒内返回。我正在使用SQL Developer,并使用内置的连接实用程序进行附加(此应用程序中没有ODBC连接功能)。

这里的查询速度很快(足够快)(pa_stu大约有4万行):

Select * From pa_stu Where rownum < 252;
根据SQL Developer的说法,Oracle将数据以0.521秒的速度返回给我。

以下查询以及提取更大数据集的查询是罪魁祸首:

Select * From pa_stu Where rownum < 253;
根据SQL Developer的说法,Oracle会在5.327秒内向我返回最后一个数据。

用于测试的所有查询都有相同的解释计划。也就是说,ROWNUM&lt; 251的过滤谓词(将251更改为正在使用的任何数字)和一个FULL的TABLE ACCESS。

上面的结果是一致的,另外,将评估的数字提高到大约1000倍,结果时间翻倍到大约10秒(一致)。好像有些缓冲正在某个地方进行,而且缓冲区太小了。此外,这只发生在我们的一个Oracle服务器上。另一个更高度使用的数据(也包含不同的数据)使用类似的语句返回数百条记录中的100条记录没有任何问题。

数据库由DBA控制,我已经完成了所有这些操作。她没有解决方案。这实际上是在一个月左右的时间内开始发生的,并且在几个月之前并非如此,如果这是有意义的话。它不像现在那么明显。

感谢您的帮助。

0 个答案:

没有答案