oracle insert 语句卡死

yeyueliulang 2016-02-24 05:21:20
最近碰到一个关于oracle数据库方面的问题。
一个insert into B select... 语句,select时涉及多个表的关联、查询、运算,单独运行select部分成功;整体执行时卡死;测试过select结果为20行数据insert时依旧卡死;测试其他表的简单insert语句,几千行没问题。
数据库安装在虚拟机上,经常出现cup使用达到100%,但应该跟这个没关系吧?
卡死跟索引有关么?select部分虽然inner join 多表,但会对整体造成影响么?希望有大神能给出几个方向,我逐一排查。万分感激!
...全文
1483 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hoyuleds 2016-03-03
  • 打赏
  • 举报
回复
是不是几个源表和目的表数据太大了,建议把需要的数据创建临时表试试。注意连接和条件,以前遇到过一次因为连接没关联完造成笛卡尔积。
yeyueliulang 2016-03-02
  • 打赏
  • 举报
回复
引用 2 楼 pobaby 的回复:
Alter session force parallel query;
Alter session force parallel DML;
INSERT /*+ PARALLEL(tbl_ins,2) */ INTO tbl_ins;
这是关于并行查询的语句么?我不懂并行之类的机制,还有什么DML。。。
zengjc 2016-03-02
  • 打赏
  • 举报
回复
是select部分查询结果较大,运行效率低下导致的。 当你单独运行select时,无论取出20条还是1000条,都并没有把所有数据取完。 你可以尝试一下把select部分进行count计数,初步估计运行时间。 建议你把执行计划发出来看一看。 解决方法么,就是优化select部分效率。
yeyueliulang 2016-03-02
  • 打赏
  • 举报
回复
引用 7 楼 hupeng213 的回复:
可以考虑把SELECT结果先放到一个中间视图中, 然后一句话把视图结果INSERT进到TARGET表就成了;最后记得把中间视图删了就成。
我试试看
yeyueliulang 2016-03-02
  • 打赏
  • 举报
回复
引用 6 楼 lzb03228 的回复:
直接insert into values('aaa','bbbb')这样看慢不慢,先排除是insert 问题还是select问题
试过insert,速度不慢
yeyueliulang 2016-03-02
  • 打赏
  • 举报
回复
引用 5 楼 kingkingzhu 的回复:
insert后面的sql整体查询的时候慢么 方便的话贴下sql吧
select 结果2000行需要近1分钟时间
hupeng213 2016-03-02
  • 打赏
  • 举报
回复
可以考虑把SELECT结果先放到一个中间视图中, 然后一句话把视图结果INSERT进到TARGET表就成了;最后记得把中间视图删了就成。
藏北 2016-02-29
  • 打赏
  • 举报
回复
直接insert into values('aaa','bbbb')这样看慢不慢,先排除是insert 问题还是select问题
kingkingzhu 2016-02-28
  • 打赏
  • 举报
回复
insert后面的sql整体查询的时候慢么 方便的话贴下sql吧
非典型宅男c 2016-02-26
  • 打赏
  • 举报
回复
有没有锁表的可能?
xiaobluesky 2016-02-25
  • 打赏
  • 举报
回复
后面的sql卡住了吧??关联的有问题?后面的select看执行计划对不对把
pobaby 2016-02-25
  • 打赏
  • 举报
回复
Alter session force parallel query;
Alter session force parallel DML;
INSERT /*+ PARALLEL(tbl_ins,2) */ INTO tbl_ins;
yeyueliulang 2016-02-24
  • 打赏
  • 举报
回复
整体执行时的cup使用情况:

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧