求助,两个接近千万级表优化

[复制链接]
查看11 | 回复9 | 2010-3-1 11:20:05 | 显示全部楼层 |阅读模式
create table A
(id varchar2(18) primary key
, ........
)tablespace users;
create tableB
(id varchar2(18) primary key
, ........
)tablespace users;
B中数据都是从A中得来,table A和table B基本上一一对应。table A和table B各有3个索引。
应用程序是先检索A中符合条件的数据,然后update刚从表A中检索出来的数据,计算后插入B表。这个过程处理非常慢,而之前数据库没有经过任何优化,使用的是oracle最初始的设置。
我先drop原table A和table B的索引,并新建索引在indx表空间(目前这6个索引已占用超过1G的磁盘空间),速度急速提升(之前处理一个情况需要30分钟左右,分开表和索引后处理10个类似情况只需要1分钟左右),但执行几次操作后速度又很快下降,恢复到之前的水平。
硬件环境:很普通的小型机
数据库环境:Oracle 9ir2
求助,如何来优化这两个表?原则上不考虑应用程序的优化。
[ 本帖最后由 ldl196 于 2010-6-4 07:19 编辑 ]
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
不考虑应用程序优化
如果楼主描述准确的话(重建索引后性能上升,运行一段时间后性能下降),那就定期重建索引呗。
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
不到30分钟效率又下来了,这个job周期也太短了。。。
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
A表要索引,B表不要。
更新好之后在建B表的索引。
另外:表的行数达千万级并不算多。中量。
[ 本帖最后由 XQKA 于 2010-6-1 13:40 编辑 ]
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
千万级别算小的了 。。。为啥30分钟后就会很慢?
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
原帖由 huanhuanlove 于 2010-6-1 19:33 发表
千万级别算小的了 。。。为啥30分钟后就会很慢?

我也很奇怪的是为何30分钟左右就又会慢下来,index不至于30分钟rebuild一次吧。
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
B如果只是插入,就不要index了。
建议作个10046 level 8的trace吧
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
mark
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
性能呈现周期性的退化,建议楼主跟踪一下数据库的活动。在处理过程变慢的时候看一下OS性能记数器有什么变化。
回复

使用道具 举报

千问 | 2010-3-1 11:20:05 | 显示全部楼层
建议将更新列、索引列的情况大概描述一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行