1.测试准备

----从1分15秒优化到31秒

----create public database link dblinkname connect to username identified by passwd using 'tnsname';

----select count(1) from user_tables@dl_11g2;

----SQL> set timing on

----SQL> create table t_zhong as select * from t_news_info@qianlong_link where 1=2;

Table created.

Elapsed: 00:00:00.13

---- truncate table t_zhong;

----SQL> set autot off

----SQL> drop table t_zhong purge;

----SQL> set autot trace stat

SQL> insert into t_zhong select * from qdata.T_NEWS_INFO@qianlong_link where seq>10400000;

114747 rows created.

Elapsed: 00:26:31.62

Statistics

----------------------------------------------------------

973  recursive calls

453767  db block gets

67045  consistent gets

29  physical reads

428009340  redo size

837  bytes sent via SQL*Net to client

837  bytes received via SQL*Net from client

3  SQL*Net roundtrips to/from client

58  sorts (memory)

0  sorts (disk)

114747  rows processed

SQL> create table t_test1 as select * from t_zhong where 1=2;

SQL> insert into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:01:15.87

Statistics

----------------------------------------------------------

214  recursive calls

303118  db block gets

95308  consistent gets

25749  physical reads

427150268  redo size

843  bytes sent via SQL*Net to client

794  bytes received via SQL*Net from client

3  SQL*Net roundtrips to/from client

1  sorts (memory)

0  sorts (disk)

114747  rows processed

SQL> truncate table t_test1;

SQL> analyze table t_test1 compute statistics;

SQL> analyze table t_zhong compute statistics;

SQL> select TABLE_NAME, BLOCKS , EMPTY_BLOCKS from dba_tables where table_name='T_TEST1';

TABLE_NAME                         BLOCKS EMPTY_BLOCKS

------------------------------ ---------- ------------

T_TEST1                                 0            7

SQL> select TABLE_NAME, BLOCKS , EMPTY_BLOCKS from dba_tables where table_name='T_ZHONG';

TABLE_NAME                         BLOCKS EMPTY_BLOCKS

------------------------------ ---------- ------------

T_ZHONG                             21968          559

2.优化之前插入测试

SQL>  set timing on

SQL>  set autot trace stat

SQL> insert into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:01:15.21

Statistics

----------------------------------------------------------

217  recursive calls

303099  db block gets

95226  consistent gets

47717  physical reads

427226232  redo size

844  bytes sent via SQL*Net to client

794  bytes received via SQL*Net from client

3  SQL*Net roundtrips to/from client

1  sorts (memory)

0  sorts (disk)

114747  rows processed

SQL> truncate table t_test1;

3.优化1:将表修改为nologging

----设置表或索引为nologging,执行dml操作时就不会产生大量的redo咯

------注意:nologging在归档模式下有效,非归档下不起作用。库处在FORCE LOGGING模式下,此时的nologging方式是无效的

SQL> set autot  off

SQL> select owner,table_name,TABLESPACE_NAME,LOGGING,BLOCKS,EMPTY_BLOCKS from dba_tables where table_name='T_TEST1;

SQL> select NAME,LOG_MODE,OPEN_MODE,FORCE_LOGGING from v$database;

NAME      LOG_MODE     OPEN_MODE            FOR

--------- ------------ -------------------- ---

ORCL      ARCHIVELOG   READ WRITE           NO

SQL> select table_name,logging from dba_tables where table_name='T_TEST1';

TABLE_NAME                     LOG

------------------------------ ---

T_TEST1                        YES

SQL> alter table t_test1 nologging;

 

SQL> select table_name,logging from dba_tables where table_name='T_TEST1';

TABLE_NAME                     LOG

------------------------------ ---

T_TEST1                        NO

SQL> set autot trace stat

SQL> insert into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:01:01.21

Statistics

----------------------------------------------------------

209  recursive calls

303076  db block gets

95257  consistent gets

47719  physical reads

427269008  redo size

845  bytes sent via SQL*Net to client

794  bytes received via SQL*Net from client

3  SQL*Net roundtrips to/from client

1  sorts (memory)

0  sorts (disk)

114747  rows processed

SQL> truncate table t_test1;

SQL> alter table t_test1 logging;

SQL> insert /*+nologging*/ into t_test1 select * from t_zhong;

4.优化2:将索引修改为nologging

select owner,index_name,index_type,table_name,logging,status from dba_indexes where table_name='T_ZHONG';

select * from dba_ind_columns where table_name='T_ZHONG';

select * from dba_objects where object_name='SYS_IL0000088940C00001$$';

SQL> select index_name, index_type,table_name,logging from dba_indexes where table_name='T_ZHONG';

INDEX_NAME          INDEX_TYPE   TABLE_NAME                     LOG

----------                     ------------             -------- ---

SYS_IL0000088940C00001$$       LOB   T_ZHONG                        YES

----注意,lob字段索引不能alter和drop,所以也就不能做nologging操作咯

----如果有索引可以设置nologging

alter index ind_name nologging;

----如果可以,可以直接删除索引,insert之后在重建

5.优化3:插入的采用append方式

SQL> truncate table t_test1;

----增加hint /*+append*/ 表示不用在高水位下查找可insert的空间,直接在高水位之上插入

SQL>  insert /*+append*/ into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:00:49.75

Statistics

----------------------------------------------------------

297  recursive calls

128430  db block gets

71998  consistent gets

47650  physical reads

255286784  redo size

833  bytes sent via SQL*Net to client

807  bytes received via SQL*Net from client

3  SQL*Net roundtrips to/from client

1  sorts (memory)

0  sorts (disk)

114747  rows processed

SQL> truncate table t_test1;

SQL> insert /*+append nologging*/ into t_test1 select * from t_zhong;

Elapsed: 00:00:46.72

a非归档模式下,只需append就能大量减少redo的产生;归档模式下,只有/*+append nologging*/ 才能大量减少redo。

binsert /*+ append */ 时会对表加锁(排它锁),会阻塞表上的除了select以外所有DML语句;传统的DML在TM enqueue上使用模式3(row exclusive),其允许其他DML在相同的模式上获得TM enqueue。但是直接路径加载在TM enqueue使用模式6(exclusive),这使其他DML在直接路径加载期间将被阻塞。

cinsert /*+ append */ 直接路径加载,速度比常规加载方式快。因为是从HWM的位置开始插入,也许会造成空间浪费。

6.优化4:采用parallel并行

SQL> truncate table t_test1;

----增加hint /*+parallel(tab,4)*/ 增加之前最好先开启会话并行 alter session enable/disable parallel dml;  表示充分利用系统硬件资源

----如果disable关闭并行会话时报ORA-12841错误,那就先做commit或者rollback在关闭并行

SQL> insert /*+parallel(t_test1,2)*/ into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:01:07.09

Statistics

----------------------------------------------------------

216  recursive calls

303106  db block gets

95170  consistent gets

47718  physical reads

427238808  redo size

848  bytes sent via SQL*Net to client

818  bytes received via SQL*Net from client

3  SQL*Net roundtrips to/from client

1  sorts (memory)

0  sorts (disk)

114747  rows processed

SQL> truncate table t_test1;

SQL> alter session enable parallel dml;

SQL> insert /*+parallel(t_test1,2)*/ into t_test1 select * from t_zhong;

Elapsed: 00:01:03.46

SQL> truncate table t_test1;

SQL> insert /*+append parallel(t_test1,2)*/ into t_test1 select * from t_zhong;

Elapsed: 00:00:52.04

------另外在插入后面跟的select查询语句,也可以进行优化,比如加一下hint /*+paralle*/等等。    加parallel的hint来提高其并发,这里需要注意的是最大并发度受到初始化参数parallel_max_servers的限制,并发的进程可以通过v$px_session查看,或者ps -ef |grep ora_p查看。

7.优化5:增大sort_area或PGA

show parameter sort_area_size

----检查sort_area_size初始大小为:65536  默认64k。以字节为单位

查看workarea_size_policy的值

SQL> show parameter workarea_size_policy

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

workarea_size_policy                 string      AUTO

设置workarea_size_policy的值

----SQL> alter system set workarea_size_policy=MANUAL scope=spfile;

System altered.

设置sort_area_size的值

----SQL> alter system set sort_area_size=65535000 scope=spfile;

System altered.

重启db service生效。

-------这里不修改系统参数,只是在会话中调整

----注意,这里的table还是处于nologging模式

SQL>  truncate table t_test1;

SQL> alter session set workarea_size_policy=manual;

SQL> alter session set sort_area_size=50240000;    ----改为50m

SQL> insert into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:00:44.15

SQL>  truncate table t_test1;

SQL>  insert /*+parallel*/ into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:00:43.06

SQL>  truncate table t_test1;

SQL>  insert /*+append*/ into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:00:39.85

SQL>  truncate table t_test1;

SQL>  insert /*+append parallel(t_test1,2)*/ into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:00:35.44

SQL> truncate table t_test1;

SQL>  insert /*+append parallel*/ into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:00:33.39

SQL>  truncate table t_test1;

SQL>  insert /*+append nologging*/ into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:00:31.79

SQL>  truncate table t_test1;

SQL>  insert /*+append nologging parallel*/ into t_test1 select * from t_zhong;

114747 rows created.

Elapsed: 00:00:29.72

----未开归档的情况下,最快貌似能达到21秒

Elapsed: 00:00:21.05

reference    http://blog.itpub.net/26736162/

http://blog.csdn.net/wyzxg/article/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30130773/viewspace-2139988/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30130773/viewspace-2139988/

insert into 优化测试相关推荐

  1. JDBC批量Insert深度优化(有事务)

    JDBC批量Insert深度优化(有事务) 环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池 测试的方案: ...

  2. MySQL系列之优化——1.优化哲学、2. 优化工具的使用、3. 优化思路分解、4. MySQL参数优化测试、5.1 参数优化、6. 参数优化结果、7. 锁的监控及处理、8. 主从优化

    文章目录 1.优化哲学 1.1 为什么优化? 1.2 优化风险 1.3 谁参与优化 1.4 优化方向 1.5 优化的范围及思路 优化效果和成本的评估: 2. 优化工具的使用 2.1 系统层面的 2.1 ...

  3. 前端性能优化--测试工具

    前端性能优化–测试工具 文章目录 前端性能优化--测试工具 前言 前端性能测试工具 1. `LightHouse` `LightHouse测试结果` Performance中各类别的含义: 2. Fr ...

  4. 【Linux 系统启动优化测试工具的使用——grabserial 】

    Linux 系统启动优化测试工具的使用--grabserial Linux 系统启动优化测试工具的使用--grabserial 1.grabserial工具安装 2.grabserial工具使用 3. ...

  5. STM32F407 STM32F407 LWIP速度优化测试速度可以达到1万kb每秒 相当于80兆的网络速度

    STM32F407 LWIP速度优化测试 使用的板子是正点原子的探索者 STM32F407ZGT6. STM32F407 LWIP速度优化,测试速度可以达到1万kb每秒, 相当于80兆的网络速度. 差 ...

  6. 多目标优化-测试问题及其Pareto前沿

    多目标进化算法系列 多目标进化算法(MOEA)概述 多目标优化-测试问题及其Pareto前沿 多目标进化算法详述-MOEA/D与NSGA2优劣比较 多目标进化算法-约束问题的处理方法 基于C#的多目标 ...

  7. zz:Android 内存优化测试

    Android 内存优化测试 今天做了个内存优化的小测试,包括两点 1,  比较Drawable与Bitmap占用内存大小 2,  比较BitmapFactory类的decodeResource方法与 ...

  8. IDEA使用单元测试对数据库的insert语句进行测试,出现添加多条问题的解决方案

    在使用IDEA中的单元测试对mapper文件中的insert语句进行测试时,出现了明明只要增加一条,数据库却增加多条的现象. 解决方法: 将圈住的勾勾点上,问题即可解决. 但出现的原因还有待探讨.

  9. 2016关键词SEO排名优化测试

    2016关键词SEO排名优化测试 by - 宝神 目前百度排名作弊方式只剩少部分人掌控,目前黑帽技术还是之前的老技术,只是实现方式不同而已,白帽优化方式需要大量时间沉淀,无法满足大量需求. 作弊方式有 ...

最新文章

  1. 实例介绍,如何在开发中将各层日志归类输出.
  2. Select SQL查询效率优化原则
  3. Mongodb学习(安装篇): 在centos下的安装
  4. soap php 分开类,将请求处理到同一PHP SOAP服务器中的多个类
  5. 决策树(一)--ID3
  6. 记录 PHP 缓存区ob
  7. 网站建设中做到需求分析细致,网站优化也就顺理成章了
  8. 蚂蚁金服java二面_蚂蚁金服Java开发二面
  9. 放弃OneNote,拥抱 Obsidian
  10. BUPT Summer Journey #test6 D
  11. 2019QS世界大学学科排名重磅发布!
  12. 新建一个html代码页面,三分钟教你创建一个简单的网页
  13. nginx之30分钟搞定nginx反向代理和负载均衡
  14. 电脑主板DEBUG指示灯的提示
  15. Python前世今生
  16. 流浪动物救助服务网站设计与实现(J2EE)
  17. SQL server学习日志(二)创建表!手把手教你创建表,修改表,了解数据类型!超详细!
  18. linux提取基因名称和序列,一种批量提取基因组基因信息并翻译比对分析序列的方法与流程...
  19. 机器学习 基础理论 学习笔记 (6)异常值检测和处理
  20. 前端基础面试题,菜鸟必备

热门文章

  1. 小米 13/13 Pro / MIX 4 手机可开通数字人民币硬钱包
  2. 内存、CPU、显存、GPU
  3. CMD命令行Chrome自动网页截图到文件,截图完后自动退出浏览器
  4. 《JVM系列,Java实战视频下载
  5. docker搭建git远程服务器
  6. UVA-133 The Dole Queue 救济金发放
  7. 详解可重入函数与不可重入函数
  8. mysql time类型数据_MySQL数据类型
  9. 登录oracle命令行,[新手教程]Oracle数据库登录命令
  10. HRBUST 1314 火影忍者之~纲手【MAP】