insert优化

news/2024/7/8 11:17:54 标签: insert, 优化, parallel, session, table, 磁盘

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-----


http://www.niftyadmin.cn/n/683155.html

相关文章

oracle碎片

author:skate time:2010-05-31 我们在使用windows的时候,都知道要定期整理磁盘碎片,因为磁盘碎片会影响性能,给管理上带来额外的 负担。那oracle更是如此,当随着数据增加,oracle处理海量数据本…

BLE基本状态与事件

1、 BLE广播事件: 在一个广播事件中,广播包会分别在三个广播通道中被发送一次(37,38,39); 2、BLE广播间隔: 是指两次广播事件之间的最小时间间隔,一般取值范围在20ms-10.24S之间,…

HAproxy centos7安装配置

1. haproxy 官网 http://www.haproxy.org/#doc1.8 2. 最新稳定版下载: http://www.haproxy.org/download/1.8/src/haproxy-1.8.14.tar.gz 3. 安装 tar -zxvf haproxy-1.8.14.tar.gz cd haproxy-1.8.14 uname -r 查看内核版本 cat README 可以查看安装说明&#xf…

ubuntu 16.04安装windows 7虚拟机

安装virtualbox sudo apt-get install virtualbox使用IOS文件安装Windows。 (1)在高级选项下可以自定义分配的硬盘大小。 (2)建立好运行环境之后,把IOS文件放入模拟的驱动盘,点击启动,即可自…

block 内部结构分解

Oracle block 的详细物理结构图: 本文主要说明oracle block 的物理结构,它是oracle 的最小存储单元,由多个os 数据块组成。主要由三个逻辑层组成(通过c 语言描绘的结构,如下图一所示):the ca…

深入分析Spring 与 Spring MVC容器

Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext,使得拥有web功能。那么,Spring MVC是如何在web环境中创建IoC容器呢?web环境中的IoC容器的结构又是什么结构呢?web环境…

内存管理--你的数据放在哪里

未初始化的全局变量(.bss) Bss段用来存放那些没有初始化和初始化为0的全局变量。此种类型只占运行时的内存空间,而不占用code代码的文件空间。作为全局变量,在整个程序的运行周期内,bss数据是一直存在的。初始化过的全…

oracle一个事务的完整流程

服务进程如何处理用户进程的请求服务器进程在完成用户进程的请求过程中,主要完成如下7个任务:0.sql语句的解析1.数据块的读入db buffer2.记日志3.为事务建立回滚段4.本事务修改数据块5.放入dirty list6.用户commit或rollback 0.sql语句的解析下面要讲or…