首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化数据访问层

优化数据访问层
EN

Stack Overflow用户
提问于 2010-09-10 02:38:52
回答 2查看 199关注 0票数 1

我有一个web服务(JAX-RS/Spring),它生成针对Oracle中的临时表运行的SQL查询。然后将数据归档到另一个表中(通过3条MERGE语句)。每个“作业”的执行(查询和合并)都是通过JMS broker (ActiveMQ)在后台完成的。每个作业的操作顺序类似于:

代码语言:javascript
运行
复制
   insert/update into table Q (select from table F) -- done between 4 and 20 times
   merge into table P (select from table Q)  -- twice
   merge into table P (select from table F)
   merge into table P (select from table F)
   create a view V as select from table P

(表Q是临时表)。

当我像这样调度两个或三个作业时,每个作业大约需要6-7分钟来执行。但是当我同时发送多达15次运行时,持续时间会延长很多。

这是不是因为所有这些进程都在尝试插入/更新临时表Q?从而为资源而战?我应该使用什么技术来优化它呢?例如,我想制作5到6个表Q的副本,并针对它们对数据访问对象查询进行“负载平衡”。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-10 03:23:22

当我分派两到三个这样的作业时,每个作业大约需要6-7分钟来执行。但是当我同时发送多达15次运行时,持续时间会延长很多。

您的进程可能会争用任意数量的资源,而不仅仅是临时表。

对于初学者,您的数据库有多少个处理器(CPU/核心)?有一个非常好的经验法则,我们不应该在每个处理器上运行超过1.8个后台作业。因此,如果您没有足够的处理器来支持高度并行,那么就没有必要担心克隆临时表。

调优的关键是:不要猜测。与其他一些DBMS产品不同,Oracle有许多工具,我们可以使用它们来准确地找出时间的去向。它被称为等待接口。它不是完美的,但它比盲目地重新设计数据库模式要好得多。Find out more.

票数 4
EN

Stack Overflow用户

发布于 2010-09-10 07:36:50

如果Q真的是一个临时表(就像在全局临时表中一样),那么每个会话都将有一个单独的物理对象,因此它们不会争用锁或在数据级别。

您更有可能在永久表P或服务器资源(内存和磁盘)上获得争用。

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

https://stackoverflow.com/questions/3679546

复制
相关文章

相似问题

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