使用完整的服务器资源是否可以确保更好的查询执行性能?

Does using full resources of server ensures better query execution performance?

Create table hp_zzz1
nologging parallel
as
select * fom hP_zzz;

我正在使用 CTAS 创建一个新的 table。因为我使用了并行提示,没有任何并行线程。它消耗 256 DOP 的 exadata 服务器。

  1. 此查询是否以最高级别执行。或者这样会消耗更多时间??
  2. 使用服务器的全部资源是否保证查询的执行?

谢谢

为并行 Oracle SQL 语句使用更多资源通常会带来更好的性能并 运行 缩短时间。

从理论上讲,使用过高的并行度 (DOP) 最终会适得其反。在某些时候,管理如此大量的并行进程的开销可能会超过额外进程的好处。

但在实践中,我从未见过这种情况发生在 Oracle SQL 语句中。我已经在几个不同的平台上为 CPU 和 I/O 绑定任务标记了几次。似乎越大越好。

但是有很多重要的免责声明:

  1. 虽然较高的 DOP 将有助于该声明,但它可能对其他声明非常不公平。 returns肯定有一个递减点。如果一个语句的性能提高不到 1% 可能会损害许多其他语句,这可能不是一个好主意。
  2. 尽管我已经对此进行了多次测试,但我不能保证每个配置都是正确的。
  3. 测试这些场景很困难。您必须选择大量工作,在其他人未使用的系统上,尝试通过 运行 宁 alter system flush buffer_cache 之类的东西来避免 "hot" 系统(尽管这可能不会禁用 OS 缓存),运行 多次测试,删除异常值,平均结果等
  4. 注意可能会降低 DOP 的 Oracle 机制。仅仅因为您要求 256 并不意味着您会得到 256。为确保参数或限制没有发生,请检查 v$px_process 以确保所有并行线程都被使用。

根据我的经验,如果您只关心单个 SQL 语句的最佳性能,请尽可能提高 DOP。