我不确定这是否可以使用sql语句。 我正在寻找sql查询来了解要包含在PARALLEL子句中的硬件上可用的CPU数量。我们无法访问我们的Linux环境,因此我们正在寻求了解这一价值的任何可能性。是否可以使用SQL?请建议。
实际上我的索引创建脚本花费的时间比预期的时间长,而且是使用“NOLOGGING PARALLEL COMPRESS”子句实现的。
请建议在PARALLEL和COMPRESS子句中留下数字“N”是否正确。
如果我们错过了PARALLEL子句中的CPU信息数,Oracle如何管理并行度。
答案 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,如下所示:
你可以查询v $参数来获取上面两个参数名称--cpu_count和parallel_threads_per_cpu
SQL> SELECT name, value FROM v$parameter WHERE UPPER(name) IN ('CPU_COUNT','PARALLEL_THREADS_PER_CPU');