前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle insert优化「建议收藏」

oracle insert优化「建议收藏」

作者头像
全栈程序员站长
发布2022-09-16 16:47:36
1.6K0
发布2022-09-16 16:47:36
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

author:skate time:2010/10/19


insert优化

要想提高insert的速度,首先要知道什么影响insert慢,在执行insert的过程中产生redo和undo,要想提高insert的速度,在充分利用系统资源的条件下就要尽量减少insert产生的redo和undo,undo的大小没办法改变,但是我们可以改变redo的量。下面是提高insert方法。

1. 增加hint /*+ append */ –不用在高水位下查找可insert的空间,直接在高水位之上insert 2. 增加hint /*+ parallel(tab,4) */ 或者alter session enable/disable parallel dml; —充分利用系统硬件资源 3. alter table tablename nologging/logging —-关闭表的log服务,减少redo产生 4. 如果业务允许的话,可以先删除索引,insert之后再重建. —减少在insert时维护索引的开销 5. 可以增加临时中间表 —-减少此事务对undo的使用 6. 增大sort_area_size或PGA —-增加排序空间,避免磁盘操作 7. 优化sql语句本身 8. pl/sql批处理 —化整为零,把大事务变成零散的小事务

说明:tb_order_detail_his :7000W记录 tb_order_detail :2000W记录

优化前: INSERT INTO /*+ append */ tablename_his SELECT * FROM tablename PARTITION (TB_ORDER_DE_WAREID40) WHERE ID NOT IN ( SELECT tcc.id FROM tablename PARTITION (TB_ORDER_DE_WAREID40) tcc , tablename_his tcch WHERE tcc.id=tcch.id )

在做数据归档时,需要做大数据量的insert,对于insert内容少还是可以胜任的,可当要把200多万的数据归档,2个小时都没有成功, 于是对其优化改造,利用append,parallel,分批处理,nologging方法,使这个200W的数据归档在15分钟就完成

优化后:

通过 mod(tcc.id,10)把内容分10部分提交归档

INSERT INTO /*+ append */ tablename_his SELECT * FROM tablename PARTITION (TB_ORDER_DE_WAREID40) tcc WHERE NOT EXISTS ( SELECT /*+ parallel(tcch,7) parallel(tcc,7) */ tcch.id FROM tablename_his tcch WHERE tcc.id=tcch.id ) AND mod(tcc.id,10)=9

—–end—–

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160947.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档