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.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...
随机推荐
- selenium相关:通过location 和 size 获取元素所在像素位置和尺寸,截取图片ROI
1.实验 #https://captcha.luosimao.com/demo/ chrome default: location 不滚动,直接返回相对整个html的坐标 {'x': 15.0, 'y ...
- 强大的xargs
xargs 命令是最重要的 Linux 命令行技巧之一.你可以使用这个命令将命令的输出作为参数传递给另一个命令.例如,搜索 png 文件然后对其进行压缩或者其它操作: find. -name *.pn ...
- 线程、进程、协程 异步io
https://www.cnblogs.com/wupeiqi/articles/6229292.html
- js自定义滚动样式
<!DOCTYPE html> <html lang="en"> <head> <style type='text/css'> ht ...
- python--异常捕获
#异常捕获---指定异常类型 try: #尝试 fi=open(r'D:\Users\4399-3046\Desktop\test.txt',mode='wb'); fi.write('写入文字'); ...
- POJ3041 Asteroids 二分图匹配 匈牙利算法
原文链接http://www.cnblogs.com/zhouzhendong/p/8229200.html 题目传送门 - POJ3041 题意概括 有一个n*n的矩阵,有些点是障碍物. 现在每次可 ...
- java项目打包生成MD5文件
之所以发出这篇博客,因为我前几天搞这个问题搞了几天,各种百度居然都没有找到相关的案例,虽然很简单的事件.可是百度博客上面居然都搜不到案例o(* ̄︶ ̄*)o觉得奇怪!!! 新总监来了,项目要上线,以前都 ...
- 051 Kafka的安装
后来重新复习的时候,发现这篇文章不错:https://www.cnblogs.com/z-sm/p/5691760.html 一:前提 1.安装条件 Java Scala zookeeper Ka ...
- Ubuntu 硬盘分区只读,重新挂载为读写分区之后,文件依然创建出错
原因: 分区只读,可能是windows没有正常关机,或者使用了混合休眠模式. 解决方案: sudo mount -o remount,rw /dev/sdaX 若重新挂载后,创建文件以及文件夹失败: ...
- Sudoku POJ - 3076 (dfs+剪枝)
Description A Sudoku grid is a 16x16 grid of cells grouped in sixteen 4x4 squares, where some cells ...