现在有两台服务器一台是150,一台是144
昨天用150服务器上的plsql登录144的数据库并执行导入操作aa_distancehost_log,tmp_aa_distancehost_log均在144服务器上。
insert into tmp_aa_distancehost_log(log_datetime索引已建)
select *
from aa_distancehost_log t
where t.log_datetime between
to_date('2008-10-01 00:00:00 ', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2008-10-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss');
commit;在执行了大概1个小时后还在执行,不得已直接在plsql上中断连接,直到今早还是没有中断。不得已直接中断144服务器上的oracle进程。
但是现在150服务器上的oracle CPU占用一直在50%以上。
并且我现在把时间分一天天执行。insert 一天的数据就commit虽然非常慢但是总算导入了。
请高手分析下为什么144的服务器执行insert操作如此的慢,才200多万的数据。
还有150的机器为什么现在cpu占用率一直在50%以上
昨天用150服务器上的plsql登录144的数据库并执行导入操作aa_distancehost_log,tmp_aa_distancehost_log均在144服务器上。
insert into tmp_aa_distancehost_log(log_datetime索引已建)
select *
from aa_distancehost_log t
where t.log_datetime between
to_date('2008-10-01 00:00:00 ', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2008-10-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss');
commit;在执行了大概1个小时后还在执行,不得已直接在plsql上中断连接,直到今早还是没有中断。不得已直接中断144服务器上的oracle进程。
但是现在150服务器上的oracle CPU占用一直在50%以上。
并且我现在把时间分一天天执行。insert 一天的数据就commit虽然非常慢但是总算导入了。
请高手分析下为什么144的服务器执行insert操作如此的慢,才200多万的数据。
还有150的机器为什么现在cpu占用率一直在50%以上
可以通过alter system kill session ‘sid,serial#’来杀掉会话
SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
以下的语句可以查询到谁锁了表,而谁在等待。
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC
alter system kill session ‘sid,serial#’来杀掉会话 ,
我杀掉后再执行插入仍然很慢。现在我分段一天天插还要1个小时才能执行完毕,但数据量只有250万条。我想问下是不有没有其他原因导致数据库执行非常缓慢的原因。
BlueskyWide已经把看家的代码发给我了哈哈。我试下,现在得出去了,明天结贴。不行写过程50条commit一次。
SQL> show parameter cursor_sharing;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing string EXACTSQL> show parameter shared_pool_size;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 16MSQL> show parameter shared_pool_reserved_size;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_reserved_size big integer 15938355SQL> show parameter java_pool_size;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_pool_size big integer 0SQL> show parameter large_pool_size;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
large_pool_size big integer 0SQL> show parameter pga_aggregate_target;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 809MSQL> show parameter sga_max_size;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 2432MSQL> 帮忙分析下。哪个地方不合理,谢谢BlueskyWide大侠
脚本:
create table tmp_aa_distancehost_log_temp as
select *
from aa_distancehost_log t
where t.log_datetime between
to_date('2008-10-01 00:00:00 ', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2008-10-31 00:00:00', 'yyyy-mm-dd hh24:mi:ss');
commit;
2.insert /*+ append */ into tmp_aa_distancehost_log
3.启用索引
执行完毕估计在3分钟内完成
通过v$session_longops监视,里面会显示所有执行超过6秒的操作,包括已经插入的记录数量