观察11g/12c环境下的对表与临时表进行insert,update,delete操作生成的redo比较
来源:互联网 发布:ubuntu安装完重启黑屏 编辑:程序博客网 时间:2024/06/06 18:17
--观察11g环境下的对表与临时表进行insert,update,delete操作生成的redo比较EODA@PROD1> select * from v$version; --11g环境BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ProductionPL/SQL Release 11.2.0.3.0 - ProductionCORE11.2.0.3.0ProductionTNS for Linux: Version 11.2.0.3.0 - ProductionNLSRTL Version 11.2.0.3.0 - ProductionElapsed: 00:00:00.06EODA@PROD1> set echo on;EODA@PROD1> create table perm 2 ( x char(2000) , 3 y char(2000) , 4 z char(2000) ) 5 /Table created.Elapsed: 00:00:00.09EODA@PROD1> EODA@PROD1> create global temporary table temp 2 ( x char(2000) , 3 y char(2000) , 4 z char(2000) ) 5 on commit preserve rows 6 /Table created.Elapsed: 00:00:00.01EODA@PROD1> EODA@PROD1> create or replace procedure do_sql( p_sql in varchar2 ) 2 as 3 l_start_redo number; 4 l_redo number; 5 begin 6 l_start_redo := get_stat_val( 'redo size' ); 7 8 execute immediate p_sql; 9 commit; 10 11 l_redo := get_stat_val( 'redo size' ) - l_start_redo; 12 13 dbms_output.put_line 14 ( to_char(l_redo,'99,999,999') ||' bytes of redo generated for "' || 15 substr( replace( p_sql, chr(10), ' '), 1, 25 ) || '"...' ); 16 end; 17 /Procedure created.Elapsed: 00:00:00.09EODA@PROD1> EODA@PROD1> set serveroutput on format wrappedEODA@PROD1> begin 2 do_sql( 'insert into perm 3 select 1,1,1 4 from all_objects 5 where rownum <= 500' ); 6 7 do_sql( 'insert into temp 8 select 1,1,1 9 from all_objects 10 where rownum <= 500' ); 11 dbms_output.new_line; 12 13 do_sql( 'update perm set x = 2' ); 14 do_sql( 'update temp set x = 2' ); 15 dbms_output.new_line; 16 17 do_sql( 'delete from perm' ); 18 do_sql( 'delete from temp' ); 19 end; 20 / 3,305,492 bytes of redo generated for "insert into perm "... --大量生成的redo数据 68,492 bytes of redo generated for "insert into temp "... --临时表不记录redo数据 5,070,804 bytes of redo generated for "update perm set x = 2"... --生成的redo和记录undo的redo 1,775,736 bytes of redo generated for "update temp set x = 2"... --记录undo的redo 3,247,464 bytes of redo generated for "delete from perm"... --大量记录undo的redo 3,241,980 bytes of redo generated for "delete from temp"... --大量记录undo的redoPL/SQL procedure successfully completed.Elapsed: 00:00:02.41--如果表上有索引的情况。 12,353,928 bytes of redo generated for "insert into perm "... 3,355,824 bytes of redo generated for "insert into temp "... 9,576,992 bytes of redo generated for "update perm set x = 2"... 5,496,428 bytes of redo generated for "update temp set x = 2"... 4,416,420 bytes of redo generated for "delete from perm"... 4,384,000 bytes of redo generated for "delete from temp"...PL/SQL procedure successfully completed.增加的开销都是维护索引的生成的undo。
--观察12c环境下的对表与临时表进行insert,update,delete操作生成的redo比较--12c新特性TEMP_UNDO_ENABLED--TEMP_UNDO_ENABLED determines whether transactions within a particular session can have a temporary undo log. The default choice for database transactions has been to have a single undo log per transaction. This parameter, at the session level / system level scope, lets a transaction split its undo log into temporary undo log (for changes on temporary objects) and permanent undo log (for changes on persistent objects).--这个特性将对于临时表的UNDO信息分离出去,独立存储在临时表空间中,这就减少了对于UNDO段的使用。SQL> select banner from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit ProductionPL/SQL Release 12.1.0.2.0 - ProductionCORE12.1.0.2.0ProductionTNS for Linux: Version 12.1.0.2.0 - ProductionNLSRTL Version 12.1.0.2.0 - Production 0SQL> create table perm 2 ( x char(2000) , 3 y char(2000) , 4 z char(2000) ) 5 /Table created.SQL> SQL> create global temporary table temp 2 ( x char(2000) , 3 y char(2000) , 4 z char(2000) ) 5 on commit preserve rows 6 /Table created.SQL> SQL> create or replace procedure do_sql( p_sql in varchar2 ) 2 as 3 l_start_redo number; 4 l_redo number; 5 begin 6 l_start_redo := get_stat_val( 'redo size' ); 7 8 execute immediate p_sql; 9 commit; 10 11 l_redo := get_stat_val( 'redo size' ) - l_start_redo; 12 13 dbms_output.put_line 14 ( to_char(l_redo,'99,999,999') ||' bytes of redo generated for "' || 15 substr( replace( p_sql, chr(10), ' '), 1, 25 ) || '"...' ); 16 end; 17 /Procedure created.SQL> SQL> set serveroutput on format wrappedSQL> begin 2 do_sql( 'insert into perm 3 select 1,1,1 4 from all_objects 5 where rownum <= 500' ); 6 7 do_sql( 'insert into temp 8 select 1,1,1 9 from all_objects 10 where rownum <= 500' ); 11 dbms_output.new_line; 12 13 do_sql( 'update perm set x = 2' ); 14 do_sql( 'update temp set x = 2' ); 15 dbms_output.new_line; 16 17 do_sql( 'delete from perm' ); 18 do_sql( 'delete from temp' ); 19 end; 20 / 3,317,208 bytes of redo generated for "insert into perm "...384 bytes of redo generated for "insert into temp "... 5,048,932 bytes of redo generated for "update perm set x = 2"...340 bytes of redo generated for "update temp set x = 2"... 3,355,096 bytes of redo generated for "delete from perm"...384 bytes of redo generated for "delete from temp"...PL/SQL procedure successfully completed.--很明显临时表操作产生的redo都微乎其微。
--参考来源《Oracle编程艺术深入理解数据库体系结构(第三版)》
0 0
- 观察11g/12c环境下的对表与临时表进行insert,update,delete操作生成的redo比较
- mysql的insert/replace/update/delete & insert,update,delete多表操作
- MERGE 解决 当目标表 与原始表 比较异同,判断insert,update,delete 操作
- SQL 表的Insert ,update ,delete 触发器
- SQLite的insert、delete、update操作
- MySQL表操作 insert-delete-update-select
- 根据表名自动生成INSERT,UPDATE,DELETE,SELECT的SQL语句
- 根据表名自动生成INSERT,UPDATE,DELETE,SELECT的SQL语句
- 根据表名自动生成INSERT,UPDATE,DELETE,SELECT的SQL语句
- 根据表名自动生成INSERT,UPDATE,DELETE,SELECT的SQL语句
- 自动生成数据库表的insert,update,delete存储过程工具
- 临时表真的不生成redo日志吗?
- 表的三种基本操作:插入(insert)、删除(delete)、更新(update)
- 数据库SQL 表的基本操作(create,drop,alter,insert,update,delete,select)
- [C#] 数据库操作 - Insert, Read, Delete, Update
- MYSQL学习笔记----表的insert、update、delete语句
- insert、update、delete的用法
- Insert,Update,Delete操作
- DrawerLayout的使用
- MATLAB使用过程遇见的问题记录
- 《合体三国》主公战力排名活动公告
- 原码, 反码, 补码 详解
- 高仿QQ运动的周报界面
- 观察11g/12c环境下的对表与临时表进行insert,update,delete操作生成的redo比较
- 网络体系结构
- Spring中bean的生命周期
- selenium爬取大学图书馆资料论文
- Android 数据库 删除记录后 _id正常指向记录位置
- String源码解析
- 自治系统中单个路由表的构造
- Windows设计原理分析
- HTML第六章课后作业4