关于redo(二)插入更新数据时的效率比较
继续昨天的问题。我曾经面对一个工作,要把一张很大的表中,3个月前的数据删掉,转储到历史表中。这将是一个很大的工程,需要在一周内完成,而且只能在夜里进行工作。这就需要考虑到性能问题了,考虑到网上很多人说nologging会很快,我就做个试验,比较一下效率。
实验环境:windows7 x64。oracle11g,11.2.0.1.0。归档模式,实验表:test1(create table test1 as select * from dba_objects;)。
实验步骤:
实验之前记录的 redo size:35580568
insert的比较:
insert into test1 (select * from dba_objects);
commit;
直接插入,redo size:49178876 产生的redo size:13598308
nologging插入,redo size:65167892 产生的redo size:15989016
append插入,redo size:78455764 产生的redo size:13287872
更改表为nologging,记录当前的redo size:78626484
直接插入,redo size:92136040 产生的redo size:13509556
append插入,redo size:99624700 产生的redo size:7488660
update的比较
update test1 set object_id = XXXX;
commit;
记录redo size: 107764388
直接更新,redo size:212615144 产生的redo size:104850756
nologging更新,redo size:319452512 产生的redo size:106837368
append更新,redo size:425422288 产生的redo size:105969776
更改表为nologging,redo size:621576604
直接更新,redo size: 726667444 产生的redo size:105090840
append更新,redo size:827687192 产生的redo size:101019748
综上,可以看到联合使用nologging和append可以很有效的提高insert的效率,但是对于update就不是这么灵光了。
查询oracle11gR2的官方帮助文档中关于append的部分,发现如下:
Conventional INSERT is the default in serial mode. In serial mode, direct path can be used only if you include the APPEND hint.
Direct-path INSERT is the default in parallel mode. In parallel mode, conventional insert can be used only if you specify the NOAPPEND hint.
In direct-path INSERT, data is appended to the end of the table, rather than using existing space currently allocated to the table. As a result, direct-path INSERT can be considerably faster than conventional INSERT.
由上述说明可以看出,append只是对insert起作用,直接将数据插入表的表尾,而不是去插入表中空闲的区域。但是这样提升效率我却有点不安,是不是会有些连带的问题现在还没有展现出来。接下来我会关于这个继续研究。
转载于:https://www.cnblogs.com/wingsless/archive/2011/12/07/2279222.html
关于redo(二)插入更新数据时的效率比较相关推荐
- 向mysql表中插入/更新数据时自动添加创建时间/更新时间
目录 处理方式一:修改数据库字段类型 测试插入数据: 测试更新数据: 处理方式二:配置生成策略 [MySQL版本] 8.x 处理方式一:修改数据库字段类型 自动添加创建时间: 将字段类型设置为TIME ...
- oracle更新数据没反应,ORACLE更新数据时如果有就更新没有就插入
SQL写法: begin update table_name set salary = 10000 where emp_id = 5; if sql%notfound then insert into ...
- oracle 数据有引号,oracle插入字符串数据时字符串中有'单引号问题
使用insert into(field1,field2...) values('val1','val2'...)时,若值中有单引号时会报错. 处理方法:判断一下val1,val2中是否含有单引号,若含 ...
- 在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案[转]
在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案 病症表现为:主要表现为用T-sql语句插入中文数据时数据库显示全是问号"???" 解决办法: 第一种办法 ...
- mysql并发_MySQL并发更新数据时的处理方法
UPDATE是否会加锁? SQL语句为如下时,是否会加锁? UPDATE table1 SET num = num + 1 WHERE id=1; 答案是不会 实际上MySQL是支持给数据行加锁(In ...
- 数据库插入大量数据时不要忘记先删除索引(小技巧)
数据库插入大量数据时不要忘记先删除索引,插入完成后再重新建立索引,索引会非常影响插入数据的速度.
- java数据库的优化_用Java向数据库中插入大量数据时的优化
使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试: public void ex ...
- kettle 插入更新 数据增量_kettle基于时间戳增量更新
思路1: 1.提前建好ts时间表,设置两个字段分别为current_t和load_t,current用于比较原表中日期的上限,load_t则为上次加载的日期,几位原表中日期的下限. 1 create ...
- kettle 插入更新 数据增量_使用Kettle实现数据实时增量同步
2018-09-28: 示例job已上传至github,地址见文末 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法. ...
最新文章
- 【剑指offer-Java版】23从上往下打印二叉树
- PHP学习之没有权限修改hosts文件
- linux下rpm方式安装mysql5.6及问题解决
- 附件文件无法保存到服务器,可能是目录属性设置问题,请与管理员联系,Discuz不能上传过大文件的解决办法...
- P4424-[HNOI/AHOI2018]寻宝游戏【结论】
- 19个AI热门应用领域,你确定不了解一下?
- 接口可以继承多个接口总结
- 开源矿工 - 记一个完整的软件是如何开发和运行的
- Mybatis分页查询(通过SQL分页实现)
- 1620:质因数分解
- ALC662 在Mac中的安装
- jenkins:Failed to get hostnam执行启动脚本不执行
- Android基础学习笔记14:安卓手势编程
- 电脑主板为什么不取消电池?
- Java网课基础笔记(20)19-08-02
- 计算器算贝塞尔公式_绝版应用!超级好用的计算器!
- #pragma DATA_SECTION的使用
- 论文解读:《XG‑ac4C:使用带有电子离子相互作用假电位的eXtreme梯度增强技术鉴定mRNA中的N4-乙酰胞苷(ac4C)》
- 电脑安装Win10 + Linux 双系统
- 中国联通3g上网设置
热门文章
- 快速连续点击两次出现相同内容的解决方法
- 【总结】栈溢出StacOverflowError
- 启动MySQL出错: Starting MySQL….. ERROR! The server quit with
- PostgreSQL在何处处理 sql查询之五十二
- windows8不能更新?
- 分布式文件系统Hadoop
- Linux系统运维工程师PDF文档精选
- 戴尔坐拥100亿现金 收购目标剑指何方?
- linux的passwd命令的作用,Linux passwd 命令的使用
- 全文搜索引擎有哪些?_搜索引擎工作原理是什么?seo蜘蛛抓取会受到哪些因素影响?...