insert /*+append*/为什么会提高性能
在上一篇的blog中 做了下使用,在归档和非归档下,做数据插入http://blog.csdn.net/guogang83/article/details/9219479。结论是在非归档模式下表设置为nologging用insert /*+append*/速度最快。那为什么快呢,原理是什么?下面我们来一起做一个实验:
SQL> create or replace view m_undo_redo as
select v$statname.name,value
from v$mystat, v$statname
where v$mystat.statistic# =v$statname.statistic#
and (v$statname.name ='redo size'
or v$statname.name = 'undo change vector size');
视图已创建。
SQL> create table t (x int);
表已创建。
SQL> set timing on
SQL> select * from m_undo_redo;
NAME VALUE
---------------------------------------------------------------- ----------
redo size 22644
undo change vector size 7484
SQL> insert into t select rownum from dual connect by level <=1000000;
已创建1000000行。
已用时间: 00: 00: 01.03
SQL> commit;
提交完成。
SQL> select * from m_undo_redo;
NAME VALUE
---------------------------------------------------------------- ----------
redo size 15722456
undo change vector size 2380000
SQL> select (2380000-7484) undo,(15722456-22644) redo from dual;
UNDO REDO
---------- ----------
2372516 15699812
SQL> truncate table t;
表被截断。
SQL> select * from m_undo_redo;
NAME VALUE
---------------------------------------------------------------- ----------
redo size 15781532
undo change vector size 2396672
SQL> insert /*+append*/ into t select rownum from dual connect by level <=1000000;
已创建1000000行。
已用时间: 00: 00: 00.96
SQL> commit;
提交完成。
SQL> select * from m_undo_redo;
NAME VALUE
---------------------------------------------------------------- ----------
redo size 15871640
undo change vector size 2419196
SQL> select (2419196-2396672) undo,(15871640-15781532) redo from dual;
UNDO REDO
---------- ----------
22524 90108
两次的对比:
| 模式 |
生成undo |
生成redo |
| 普通insert | 2372516 | 15699812 |
| insert /*+append*/ | 22524 | 90108 |
分析结论:两次对比的结果表示用insert /*+append*/后,数据的undo和redo没有生成。因为HWM 在移动的过程中,这些block是不能被其他process使用的,那么意味着,只要记录下该次direct insert所涉及到的空间的redo 和 undo ,在失败回滚的时候,只需要把这些空间修改为原来的状态就可以,而不用逐个记录去delete。
来源:http://blog.csdn.net/stevendbaguo/article/details/9241481
insert /*+append*/为什么会提高性能的更多相关文章
- FMDB官方使用文档-GCD的使用-提高性能(翻译)
FMDB官方使用文档-GCD的使用-提高性能(翻译) 发布于:2013-08-19 10:01阅读数:13395 由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此 ...
- 使用SQL Server 2000索引视图提高性能
什么是索引视图? 许多年来,Microsoft? SQL Server? 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某 ...
- 转:使用WITH AS提高性能简化嵌套SQL
使用WITH AS提高性能简化嵌套SQL 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片 ...
- 22 mysql有那些”饮鸩止渴”提高性能的方法?
22 mysql有那些”饮鸩止渴”提高性能的方法? 正常的短连接模式是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候再重新连接.如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然 ...
- 千万级MySQL数据库建立索引,提高性能的秘诀
实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...
- ASP.NET MVC之如何看待内置配置来提高性能优化(四)
前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...
- CSS性能分析,如何优化CSS提高性能
不负十年后的自己,共勉! 前端性能优化一直是一个比较热门的话题,我们总是在尽我们最大的努力去,提高我们的页面性能,比如减少HTTP请求,利用工具对资源进行合并压缩,脚本置底,避免重复请求,css sp ...
- 对于大批量赋值功能,使用if判断是否能提高性能
场景: 如果对某变量进行赋值,是否需要判断一下,如果相等就不用赋值,这样会不会提高性能. 代码如下: "; "; , x2=, x3=; Stopwatch w = new Sto ...
- Java编程提高性能时需注意的地方
1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...
随机推荐
- python之GIL release (I/O open(file) socket time.sleep)
0.目录 2.线索 C源代码 Py_BEGIN_ALLOW_THREADS Py_END_ALLOW_THREADS3.open(name[, mode[, buffering]]) -> fi ...
- 修改tomcat的默认访问日志信息
修改前:
- Hbase的写入负载均衡
在写Hbase的时候,会担心数据分布在各个region上不均匀(与预分区无关): 这个时候可能想到的方式:hash.加盐等(当然是可以的,但是读取的时候咋办呢? 哪天写一个这样的文章) 本文采用新方式 ...
- js隐藏元素
js隐藏元素 $("#serviceType").css('display','none'); js显示元素 $("#serviceType3").css('d ...
- 050 Kafka的引入介绍
高吞吐量的分布式订阅消息系统 1.官网 http://kafka.apache.org/ 2.官网的介绍 3.结构 这个是版本1.0之后的版本. In Kafka the communication ...
- day65 request对象,以及方法,response对象,render,redirect
这里的都是我们会频繁使用到的,用得多了自然就会了,我们写项目都是少不了这些用法的,所以这就把老师的博客粘过来就好了, Request对象 官方文档 属性 所有的属性应该被认为是只读的,除非另有说明. ...
- spring的webutils包。适用于访问httpservletrequest和httpservletresponse
WebUtils位 于 org.springframework.web.util 包中的 WebUtils 是一个非常好用的工具类,它对很多 Servlet API 提供了易用的代理方法,降低了访问 ...
- oracle获取某个月份的最后一天
select last_day(to_date('1992-10','yyyy-mm')) from dual; 输出:1992/10/31
- Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have APPEND_SLASH set.
Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and ...
- 笔记-JS高级程序设计-BOM篇
BOM提供了很多对象,用于访问浏览器的功能.这些功能与任何网页无关. 1BOM的核心对象是window,它代表浏览器的一个实例,它是通过JS访问浏览器窗口的一个借口,同时又是ECMAScript规定的 ...