0

在 Oracle 10g 中,我有一个 SQL,它今天执行得相当快(大约 30-40 分钟)。两天前执行相同的 SQL 时,大约需要 2.5 小时才能完成 SQL。我认为查询的执行计划可能已经改变。但事实并非如此。两个执行计划匹配。因此,在 DBA 的帮助下,我得到了生成的 AWR 报告,以查找该期间的数据库活动。果然,这个长期运行的查询与其他几个查询一起出现。在 AWR 中,此查询以大量缓冲区获取、磁盘读取列表为特征,但至少有四个其他查询甚至更高(它们总共占 98%)。事实上,两个列表中排名靠前的查询是大约 50% 的缓冲区获取和 80% 的磁盘读取,而我的分别只占 2% 和 0.9%。

所以我的问题 - 其他查询的大量缓冲区获取和磁盘读取是否会影响我的查询性能?

4

2 回答 2

3

绝对地。在不深入数据库设计的情况下,数据库系统在底层拥有大量共享资源。

最大的通常是数据页。这些在服务器上维护并为查询提供数据。例如,如果您正在多次读取一个表,那么当页面已经在内存中时,第二次读取的效率要高得多。如果其他查询正在使用页面缓存,那么您可以在缓存中放置更少的页面——并且您的查询更有可能需要从磁盘读取。

当然,也可以有直接的争执。多个查询可能同时尝试从磁盘获取数据——并且您的 I/O 调用可能最终会在队列中延迟它们。

也可以有更微妙的相互作用。数据库引擎的一项重要优化是“预读”。也就是说,如果您阅读一个数据页,那么您很可能也需要下一个数据页。当引擎在内存中处理数据时,I/O 系统可以出去获取下一个数据。

好吧,如果您同时运行大量查询,则引擎可能没有足够的带宽来提前读取您的页面。

这些只是缓冲和其他查询如何影响性能的一些示例。但答案是响亮的“是”。其他查询可能会对您的查询性能产生影响。

于 2014-07-11T11:43:29.437 回答
0

我认为您需要检查锁和共享资源。我认为查询不仅仅是简单的 DQL。执行计划突然变慢,其中执行计划没有改变,这表明存在资源争用。

于 2018-08-19T18:42:12.230 回答