问题描述

执行脚本sqlldr导入oracle导致某个表特别慢,就是没有数据,然后执行select也很慢,大概要十几秒。

解决

1. 杀死导入进程

# ps -aux|grep sqlldr
# kill -9 xxx(sqlldr导入的进程号)

2. 删除锁表

查出哪个语句导致的锁表,并且把会话结束掉:

select l.session_id, s."SERIAL#", a.sql_text from v$sqlarea a, v$session s, v$locked_object l where l.sesssion_id=s.sid and s.prev_sql=a.address;

-- 杀死会话
alter system kill session '结果中的session_id,结果中的serial#';
-- 例如:
alter system kill session '2891,52508';

3. truncate优化

如果你是删除大量数据的话,比如几千万条,如果按delete from的话,会导致占用表空间并且会让表变得很慢。正确的删除方法:

truncate table bcpdcardinfo;

4. 多执行commit

在mysql中,我们很少执行commit,但是在oracle中,执行了修改,删除,更新之后,记得commit。否则,可能导致你的结果和别人的结果不一样,也可能导致表变得很慢。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐