为何insert数据如此的慢?

[复制链接]
查看11 | 回复9 | 2010-10-8 09:31:21 | 显示全部楼层 |阅读模式
DB:10GR2
OS:AIX5.3
insert 后面的内容(select部分仅需要25秒),但是整个语句却需要几个小时,为什么会这样呢?
alter table sta_rb_acct_yldnologging;后做的插入操作,插入过程中并没有发现锁等异常情况
另,该表所在表空间也正常,free空间很多,请大虾赐教为何,谢谢!
sta_rb_acct_yld共有40多个字段,特抽出几个字段插入数据
insert /*+append*/into sta_rb_acct_yld (INTERNAL_KEY,
BRANCH,
CCY,
CLIENT_NO,
CERTIFICATE_NO,
CLIENT_SHORT,
ACCT_OPEN_DATE,
ACCT_STATUS,
ACCT_NO ,
ACCT_TYPE ,
DEPOSIT_TYPE,
OD_FACILITY ,
ACTUAL_BAL,
ACCT_CLOSE_DATE,
BASE_ACCT_NO,
ACCT_NAME,
SYM_RUN_DATE)
selectINTERNAL_KEY,
BRANCH,
CCY,
CLIENT_NO,
CERTIFICATE_NO,
CLIENT_SHORT,
ACCT_OPEN_DATE,
ACCT_STATUS,
ACCT_NO ,
ACCT_TYPE ,
DEPOSIT_TYPE,
OD_FACILITY ,
sum(BAL),
ACCT_CLOSE_DATE,
BASE_ACCT_NO,
ACCT_NAME,
SYM_RUN_DATE from (
select INTERNAL_KEY,
BRANCH,
CCY,
CLIENT_NO,
CERTIFICATE_NO,
CLIENT_SHORT,
ACCT_OPEN_DATE,
ACCT_STATUS,
ACCT_NO ,
ACCT_TYPE ,
DEPOSIT_TYPE,
OD_FACILITY ,
LEDGER_BAL,
-ACTUAL_BAL bal,
ACCT_CLOSE_DATE,
BASE_ACCT_NO,
ACCT_NAME,
SYM_RUN_DATE from sta_rb_acct where sym_run_date=to_date('20081024','yyyymmdd')
union all
SELECT /*+use_hash(tmp acct)*/acct.internal_key, acct.branch, acct.ccy,

acct.client_no, acct.certificate_no, acct.client_short,

acct.acct_open_date, acct.acct_status, acct.acct_no,

acct.acct_type, acct.deposit_type, acct.od_facility,

acct.ledger_bal, b.tran_amount bal,

acct.acct_close_date, acct.base_acct_no,

acct.acct_name, to_date('20081024','yyyymmdd') sym_run_date

FROM sta_bi_yld_nds b,

sta_rb_acct acct,

(SELECT base_acct_no, ccy,

MIN (a.internal_key) internal_key

FROM sta_rb_acct a

WHERE a.sym_run_date = to_date('20081024','yyyymmdd')

GROUP BY base_acct_no, ccy) tmp

WHERE acct.internal_key = tmp.internal_key

AND tmp.base_acct_no = b.nds_account_no

AND tmp.ccy = b.tran_ccy

AND TO_DATE (b.tran_day, 'yyyy-mm-dd') = to_date('20081024','yyyymmdd')

AND b.deposit_start_dateto_date('20081024','yyyymmdd')

AND acct.sym_run_date = to_date('20081024','yyyymmdd'))
group by INTERNAL_KEY,
BRANCH,
CCY,
CLIENT_NO,
CERTIFICATE_NO,
CLIENT_SHORT,
ACCT_OPEN_DATE,
ACCT_STATUS,
ACCT_NO ,
ACCT_TYPE ,
DEPOSIT_TYPE,
OD_FACILITY ,
ACCT_CLOSE_DATE,
BASE_ACCT_NO,
ACCT_NAME,
SYM_RUN_DATE;
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
表上有约束和触发器吗?
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
两者均没有,该表4G
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
把表上的索引拿掉再试试看,可能是维护索引需要大量的时间
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
运行时系统繁忙不
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
查看下等待事件。
或者做trace。
单单看一条sql,看不出来啥。
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
alter table sta_rb_acct_yldnologging;这个设置没有用。
dml语句都不可能没有log记录的。
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
insert /*+append nologging*/into sta_rb_acct_yld
执行计划贴出来。
select 和insert前后的执行计划是否相同
另外insert增加了额外的开销,数据量大约多少?
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
原帖由 ora110 于 2008-11-1 19:53 发表
alter table sta_rb_acct_yldnologging;这个设置没有用。
dml语句都不可能没有log记录的。



回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
看执行insert的session在等待什么?做个10046看看。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行