Oracle NoLogging Append 方式减少批量insert的redo_size
业务处理中,很多时候使用实表临时表处理中间结果,而实表的Insert操作缺省会记录redo log,针对此问题收集相关测试总结信息如下:
【转】 常见dml、ddl语句使用nologging选项所生成的redo和undo大小比较
|
DDL/DML Operations |
Direct-path |
nologging |
parallel |
Noarchivelog Redo |
Noarchivelog Undo |
Archivelog Redo |
Archivelog Undo |
|
|
Insert into XXX select * from YYY |
N |
N |
N |
19076324 |
627240 |
18938620 |
612980 |
|
|
Alter table XXX nologging; Insert into XXX select * from YYY; |
N |
Y |
N |
19085860 |
631584 |
18935548 |
612912 |
|
|
Insert /*+ append */ into XXX select * from YYY |
Y |
N |
N |
26628 |
4048(only metadata) |
19145656 |
4048 |
|
|
Alter table XXX nologging; Insert /*+ append */ into XXX select * from YYY |
Y |
Y |
N |
26868 |
4048(only metadata) |
26836 |
4048 |
|
|
Create table XXX as select * from YYY |
Y |
N |
N |
77624 |
18500 |
19162220 |
15468 |
|
|
Create table XXX nologging as select * from YYY |
Y |
Y |
N |
52160 |
11176 |
52408 |
11248 |
|
|
Alter table XXX move nologging; |
N |
Y |
N |
36288 |
6208 |
36576 |
6208 |
|
|
Alter table XXX move; |
N |
N |
N |
39788 |
7288 |
19154024 |
5972 |
|
|
Create index XXX |
N |
N |
N |
21280 |
1864 |
3093616 |
1888 |
|
|
Create index XXX nologging |
N |
Y |
N |
22264 |
2208 |
22620 |
2232 |
|
|
update XXX set |
N |
N |
N |
122903212 |
47987880 |
122403692 |
47786680 |
|
|
Update /*+ parallel(5) */ XXX set |
N |
N |
Y(Queries) |
121629928 |
46706296 |
120818336 |
46466056 |
|
|
Alter table XXX nologging; update XXX set |
N |
Y |
N |
123155288 |
48006404 |
110396512 |
41617700 |
|
|
Alter table XXX nologging; update /*+ parallel(5) */ XXX set |
N |
Y |
Y(Queries) |
119748064 |
46152324 |
120205036 |
46261536 |
|
|
Alter session enable parallel dml Update /*+ parallel(5) */ XXX set |
N |
N |
Y(DML) |
59846488 |
24680220 |
59740516 |
24611672 |
|
|
Alter table XXX nologging; Alter session enable parallel dml Update /*+ parallel(5) */ XXX set |
N |
Y |
Y(DML) |
59831756 |
24673396 |
59717116 |
24602628 |
|
|
delete XXX; |
N |
N |
N |
60684720 |
37650208 |
61770472 |
38254648 |
|
|
delete /*+parallel(5) */ XXX; |
N |
N |
Y(Queries) |
60685416 |
37650436 |
61988568 |
38461832 |
|
|
Alter table XXX nologging; delete XXX; |
N |
Y |
N |
60684956 |
37650216 |
61989984 |
38460424 |
|
|
Alter table XXX nologging; delete /*+parallel(5) */ XXX; |
N |
Y |
Y(Queries) |
60685092 |
37650224 |
61986156 |
38459172 |
|
|
Alter session enable parallel dml delete /*+parallel(5) */ aabbn; |
N |
N |
Y(DML) |
65072896 |
40990412 |
61979216 |
38457372 |
|
|
Alter table XXX nologging; Alter session enable parallel dml delete /*+parallel(5) */ aabbn; |
N |
Y |
Y(DML) |
65073828 |
40998048 |
62022668 |
38500548 |
|
结论:
1、insert into:非direct方式下noarchivelog和archivelog两种模式均产生大量undo、redo;direct方式下noarchivelog模式均产生少量undo、redo;direct+logging方式下archivelog模式产生少量undo、大量redo;direct+nologging方式下archivelog模式产生少量undo、少量redo
2、create table as:CTAS本身就是一种direct的操作,CTAS+logging方式下noarchivelog模式产生少量redo、少量undo;CTAS+nologging方式下noarchivelog模式产生更少量redo、更少量undo;CTAS+logging方式下archivelog模式产生少量undo、大量redo;CTAS+nologging方式下archivelog模式产生少量undo、少量redo;
3、alter table ... move:nologging方式下noarchivelog模式产生少量undo、少量redo;nologging方式下archivelog模式产生少量undo、少量redo;logging方式下archivelog模式产生少量undo、大量redo
4、create index:logging+nologging方式下noarchivelog模式产生少量undo、少量redo;logging方式下archivelog模式产生少量undo、大量redo;nologging方式下archivelog模式产生少量undo、少量redo
5、update:enable parallel方式下,noarchivelog+ archivelog模式生成少量undo、少量redo;非enable parallel方式下,noarchivelog+ archivelog模式生成大量undo、大量redo
6、delete:任何组合都会生成大量undo、大量redo
其他参考列表:
1) Nologging到底何时才能生效? http://www.eygle.com/faq/Nologging&append.htm
非归档模式下:append能大量减少redo量。
归档模式下:在表空间和数据库级非force logging模式下,表如果是nologging,则append能大量减少redo量。
Oracle NoLogging Append 方式减少批量insert的redo_size的更多相关文章
- Oracle中append与Nologging
快速向表中插入大量数据Oracle中append与Nologging 2017-05-05 / VIEWS: 304 来源于:http://blog.sina.com.cn/s/blog_61cd89 ...
- 快速向表中插入大量数据Oracle中append与Nologging
来源于:http://blog.sina.com.cn/s/blog_61cd89f60102e7gi.html 当需要对一个非常大的表INSERT的时候,会消耗非常多的资源,因为update表的时候 ...
- mybatis oracle两种方式批量插入数据
mybatis oracle两种方式批量插入数据 注意insert,一定要添加: useGeneratedKeys="false" ,否者会报错. <insert id=&q ...
- Mybatis + Oracle 批量insert的问题
这个问题真的太坑了 之前用ibatis+sql server 的foreach 很容易就写出来批量insert数据,但是测试后报错:SQL结束格式错误 现在换到银行工作,数据库也换成Oracle了 特 ...
- oracle+mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert
最近做项目遇到一个挺操蛋的问题,由于业务的关系,DB的数据表无法确定,在使用过程中字段可能会增加,这样在insert时给我造成了很大的困扰. 先来看一下最终我是怎么实现的: <insert id ...
- oracle nologging用法
一.oracle日志模式分为(logging,force logging,nologging) 默认情况是logging,就是会记录到redo日志中,force logging是强制记录日志,nolo ...
- oracle nologging用法(转)
一.oracle日志模式分为(logging,force logging,nologging) 默认情况是logging,就是会记录到redo日志中,force logging是强制记录日志,nolo ...
- ORACLE NOLOGGING研究
熟悉oracle的人都知道.通过设置oracle的nologging选项,能够使某些操作高速完毕,风险是数据库备份可能失效.能够使用nologging的操作有非常多,搜集资料整理例如以下: 1.索引的 ...
- JDBC批量Insert深度优化(有事务)
环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池 测试的方案: 执行10万次Insert语句,使用不同方 ...
随机推荐
- Android动态Java代码调整window大小
Android调整window大小 举一个例子,设置当前的APP所需要的屏幕高度为设备高度的一半: Window window = getActivity().getWindow(); WindowM ...
- Dynamic Animator 、 CollectionViewLayout
1 给视图添加重力效果 1.1 问题 当给某个视图加上UIGravityBehavior重力行为之后,这个视图就具有重力,会如同掉入了无底洞,不断地下坠,不断的加速,本案例使用UIGravityBeh ...
- Http权威指南(二)---读书笔记
Chart4 ====连接管理==== 一.TCP连接 1. Http和Https的网络协议栈: 2. Http在TCP/IP传输中的位置: 3. Http怎么利用TCP传输: 二.Http ...
- LeetCode Ugly Number (简单题)
题意: 判断是一个数的质因子仅含有2,3,5这3个. 思路: 因子2比较容易解决,num/=num-(num&num-1)就可以了.3和5的需要通过循环来另判. C++ class Solut ...
- UI学习笔记---第十六天XML JSON解析
一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML ...
- 快速对字符转义,避免跨站攻击XSS
XSS已经成为非常流行的网站攻击方式,为了安全起见,尽量避免用户的输入.可是有些情况下不仅不避免,反而要求鼓励输入,比如写博客.博客园开放性很高,可以运行手写的JS.之前比较著名的例子就是,凡是看到某 ...
- SQLITE SUBSTR
insert into t_user values(4,'u1234567890'); sqlite> select substr(username,1,1) from t_user where ...
- My97DatePickerBeta 时间选择控件用法
用法说明:只需要调用一个js<script language="javascript" type="text/javascript" src=" ...
- Qt 串口学习3
1.怎样将选择波特率 1)使用if else 的方法 if(ui->BaudRate->currentText()==tr("9600")) //根据组合框 ...
- 工作中遇到的问题--实现程序运行时就加载CustomerSetting的第二种方法
写一个自定义注解 @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})@Retention(Retention ...