PLSQL:查询以了解PARALLEL子句中可使用的CPU数量

时间:2016-11-17 10:55:07

标签: oracle11g

我不确定这是否可以使用sql语句。 我正在寻找sql查询来了解要包含在PARALLEL子句中的硬件上可用的CPU数量。我们无法访问我们的Linux环境,因此我们正在寻求了解这一价值的任何可能性。是否可以使用SQL?请建议。

实际上我的索引创建脚本花费的时间比预期的时间长,而且是使用“NOLOGGING PARALLEL COMPRESS”子句实现的。

请建议在PARALLEL和COMPRESS子句中留下数字“N”是否正确。

如果我们错过了PARALLEL子句中的CPU信息数,Oracle如何管理并行度。

2 个答案:

答案 0 :(得分:1)

在sqlplus中,您可以使用以下命令查看cpu的数量。

show parameter CPU_COUNT;

SQL> show parameter CPU_COUNT;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cpu_count                            integer     2

或者,您可以查询v$parameter以获取相同的值

SQL> select value   from v$parameter where name like 'cpu_count';

VALUE
--------------------------------------------------------------------------------
2

使用NOLOGGING PARALLEL COMPRESS创建索引是可选的,但在使用时会带来一些值。压缩索引可节省空间并减少CPU时间,因为它们占用的空间更少。如果你必须扫描100个块 - 做100个锁存器,100个一致的获取需要一定量的CPU。现在,如果它被压缩 - 你必须像以前那样做60多个块,60%的CPU。除了你每个叶块存储更多的索引条目。

关于oracle如何并行工作,请阅读以下内容:

https://docs.oracle.com/cd/E11882_01/server.112/e25523/parallel002.htm

答案 1 :(得分:1)

如果指定了PARALLEL子句但未列出任何并行度,则该对象将获得默认DOP。默认并行性使用公式根据系统配置确定DOP,如下所示:

  • 对于单个实例,DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT
  • 对于Oracle RAC配置,DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT

你可以查询v $参数来获取上面两个参数名称--cpu_count和parallel_threads_per_cpu

SQL> SELECT name, value FROM v$parameter WHERE UPPER(name) IN ('CPU_COUNT','PARALLEL_THREADS_PER_CPU');