首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >oracle组的高CPU利用率

oracle组的高CPU利用率
EN

Stack Overflow用户
提问于 2013-06-21 09:48:00
回答 2查看 984关注 0票数 0

我对甲骨文逐条有疑问。组是否由CPU密集型操作组成?

我们对一个包含32M行和没有索引列的表进行了查询,该表在7-8列上进行分组,在3列上聚合并插入到另一个表中。偶尔,我们看到oracle进程使用的CPU总量为100%。

该查询如下所示:

代码语言:javascript
运行
复制
insert into temp_table select col1, col2, col3, col4, col5, col6, col7, col8,
 sum(col10), sum(col11), count(*) from orig_table group by col1, col2, 
 col3, col4, col5, col6, col7, col8 ;

就我的理解而言,按照分组,我们将不得不排序,然后分组。这会导致高CPU利用率吗?还有,总量呢?它们会导致高CPU吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-06-21 10:55:59

与往常一样,解释计划会很有趣,如果您查询v$sql_workarea,您将看到组by是否溢出到磁盘。

重要的不仅是要查询的行数,还包括将要输出的行数和包含的列的平均列宽度,因为这在很大程度上决定了执行聚合所需的内存,因此排序是否会溢出到磁盘。如果是这样,那么您可能需要增加PGA内存分配,要么手动设置,要么改变PGA的总大小。检查PGA和SGA缓冲区通知,以确定它们是否一般大小良好。

您还可能成为服务器技术最新趋势的牺牲品,服务器技术通常以CPU的CPU为特征,而CPU的内核相对较弱。除非您正在运行并行查询,否则您将被限制在单个核心上。

票数 2
EN

Stack Overflow用户

发布于 2013-06-21 10:07:48

您正在使用聚合函数。如果表有3200万行,并且试图聚合这些列中的所有值,那么您期望Oracle做什么?坐在懒散的状态?

对这么多数据进行汇总将需要时间!

group by子句所用的时间取决于第1列到第8列中不同值的数量。在执行group by之前,数据库首先必须检索这些列的所有值,然后按照您的请求对其排序“很好”,然后插入它。此外,通常情况下,查询看起来很糟糕。为什么要对每一列进行汇总和,但在执行组时可能会丢失值?例如,如果在第1-8列中有重复的值,则可以无缘无故地多次计算和*。

由于您没有提供任何解释声明,简单的回答是,在选择了这么多数据之后,聚合“肯定会花费大量的时间”,这个组依赖于您的数据。如果Oracle没有使用这么多CPU的话,我会感到惊讶的是,仅仅基于您需要经过的行数,就可以从拥有3200万条记录的表中检索结果。

如果不看执行计划,就不可能知道在哪里花费了多少时间。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17232219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档