SQL';基于其他查询的性能';s同时执行的性能-AWR

SQL';基于其他查询的性能';s同时执行的性能-AWR,sql,performance,oracle,awr,Sql,Performance,Oracle,Awr,在Oracle 10g中,我有一个SQL,今天它的执行速度相当快(大约30-40分钟)。当两天前执行相同的SQL时,完成SQL大约需要2.5个小时。我认为查询的执行计划可能已更改。但事实并非如此。 两个执行计划都匹配。因此,在DBA的帮助下,我得到了生成的AWR报告,以查找在此期间的数据库活动。果然,这个长时间运行的查询与其他两个查询一起使用。在AWR中,这个查询的特点是缓冲区获取的数量很多,磁盘读取列表也很多,但至少还有四个查询更高(它们总共占98%)。事实上,两个列表中最前面的查询大约占缓冲

在Oracle 10g中,我有一个SQL,今天它的执行速度相当快(大约30-40分钟)。当两天前执行相同的SQL时,完成SQL大约需要2.5个小时。我认为查询的执行计划可能已更改。但事实并非如此。 两个执行计划都匹配。因此,在DBA的帮助下,我得到了生成的AWR报告,以查找在此期间的数据库活动。果然,这个长时间运行的查询与其他两个查询一起使用。在AWR中,这个查询的特点是缓冲区获取的数量很多,磁盘读取列表也很多,但至少还有四个查询更高(它们总共占98%)。事实上,两个列表中最前面的查询大约占缓冲区获取的50%和磁盘读取的80%,而我的查询分别只占大约2%和0.9%。我的查询没有出现在任何其他列表中,包括CPU时间和解析的调用


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

绝对如此。如果不深入研究数据库设计,数据库系统就有一堆共享资源

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

当然,也可能存在直接的争论。多个查询可能试图同时从磁盘获取数据,而您的I/O调用可能会在队列中延迟它们

也可能有更微妙的互动。数据库引擎的一个重要优化是“提前阅读”。也就是说,如果您阅读了一个数据页,那么很可能您还需要下一个数据页。当引擎处理内存中的数据时,I/O系统可以输出并获取下一个数据

嗯,如果您同时运行许多查询,那么引擎可能没有足够的带宽提前读取页面


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

绝对如此。如果不深入研究数据库设计,数据库系统就有一堆共享资源

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

当然,也可能存在直接的争论。多个查询可能试图同时从磁盘获取数据,而您的I/O调用可能会在队列中延迟它们

也可能有更微妙的互动。数据库引擎的一个重要优化是“提前阅读”。也就是说,如果您阅读了一个数据页,那么很可能您还需要下一个数据页。当引擎处理内存中的数据时,I/O系统可以输出并获取下一个数据

嗯,如果您同时运行许多查询,那么引擎可能没有足够的带宽提前读取页面


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

绝对如此。如果不深入研究数据库设计,数据库系统就有一堆共享资源

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

当然,也可能存在直接的争论。多个查询可能试图同时从磁盘获取数据,而您的I/O调用可能会在队列中延迟它们

也可能有更微妙的互动。数据库引擎的一个重要优化是“提前阅读”。也就是说,如果您阅读了一个数据页,那么很可能您还需要下一个数据页。当引擎处理内存中的数据时,I/O系统可以输出并获取下一个数据

嗯,如果您同时运行许多查询,那么引擎可能没有足够的带宽提前读取页面


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

绝对如此。如果不深入研究数据库设计,数据库系统就有一堆共享资源

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

当然,也可能存在直接的争论。多个查询可能试图同时从磁盘获取数据,而您的I/O调用可能会以队列结束