`

Oracle DML产生 REDO SIZE测试

 
阅读更多
--DML redo测试

/*
*普通表的redo size 为insert 5M,delete 18m, update 24M
*临时表redo size 为insert 276096字节, Delete 为15M ,update 为 8M,
*全局临时表与基于事务的临时表 产生的redo size差不多。
*
*/

/*
*另外的备注,若普通表DML每一步,不commit。测试的结果为 insert 5M, update 12M, delete 15M
*/

--需要sysdba权限
SQL> grant all on v_$mystat to admin;

授权成功。

SQL> grant all on v_$statname to admin;

授权成功。
--创建视图,访问当前session 的redo size

admin@ORCL> CREATE VIEW V_USER_REDO
2 AS
3 SELECT NAME,VALUE FROM V$MYSTAT CUR_STAT INNER JOIN V$STATNAME STATE_NAME ON
4 CUR_STAT.STATISTIC# = STATE_NAME.STATISTIC#
5 WHERE STATE_NAME.NAME = 'redo size';

视图已创建。

--创建表结构,不生成数据

admin@ORCL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS WHERE 1=0;

表已创建。

--创建临时表,用于insert 的数据

admin@ORCL> CREATE TABLE TMP_INSERT AS SELECT * FROM DBA_OBJECTS;

表已创建。

--查看当前redo
admin@ORCL> column name for a20
admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;

NAME VALUE
-------------------- ----------
redo size 147500
--执行INSERT,查看产生的redo日志大小
admin@ORCL> INSERT INTO T SELECT * FROM TMP_INSERT;

已创建52373行。

admin@ORCL> COMMIT;

提交完成。
--查看redo,产生了5924328 字节日志,大约5M多大小
admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;

NAME VALUE
-------------------- ----------
redo size 6071828


--查看DELETE产生的日志大小,为18936864字节的redo日志,大小约为18M大小
admin@ORCL> DELETE FROM T;

已删除52373行。

admin@ORCL> COMMIT;

提交完成。

admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;

NAME VALUE
-------------------- ----------
redo size 25008692


--查看UPDATE产生的日志,重新插入数据.
--产生了24160520字节的日志,大约24M
admin@ORCL> DROP TABLE T PURGE;

表已删除。

admin@ORCL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS;

表已创建。

admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;

NAME VALUE
-------------------- ----------
redo size 53034948

admin@ORCL> UPDATE T SET OBJECT_ID = 12;

已更新52373行。

admin@ORCL> COMMIT;

提交完成。

admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;

NAME VALUE
-------------------- ----------
redo size 77195468

--测试临时表DML产生的redo size
--总体来看临时的redo 为 insert 276096字节,update 为 8M, Delete 为15M

--创建基于session的全局临时表
admin@ORCL> CREATE GLOBAL TEMPORARY TABLE T_TMP_SESSION ON COMMIT PRESERVE ROWS
  2  AS
  3  SELECT * FROM DBA_OBJECTS;

表已创建。

--基于事务的全局临时表
admin@ORCL> CREATE GLOBAL TEMPORARY TABLE T_TMP_TRANSACTION ON COMMIT DELETE ROWS
  2  AS
  3  SELECT * FROM DBA_OBJECTS;

表已创建。

--当前的redo size,分析全局临时表插入产生的redo size
admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                             15268

admin@ORCL> insert into T_TMP_SESSION select * from dba_objects;

已创建50779行。

admin@ORCL> COMMIT;

提交完成。
--查看insert后的,全局redo大小为291468-15268 = 276200
admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                            291468

--分析基于transaction insert产生的redo size,为276096-0 = 276096

--打开另一个session
admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                                 0


admin@ORCL>  insert into T_TMP_TRANSACTION select * from dba_objects;

已创建50779行。

admin@ORCL> commit;

提交完成。

admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                            276096

--分析update,全局临时表的redo size 为 8122436,而基于事务的临时表为 8122316

admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                            276060

admin@ORCL> update t_tmp_session set object_id = rownum;

已更新50779行。

admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                           8398496



admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                            276100

admin@ORCL> update t_tmp_transaction set object_id = rownum;

已更新50779行。

admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                           8398416

--delete产生的redo size 全局临时表的redo size 为 15056824 ,而基于事务的临时表为 15061984

admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                           8398644

admin@ORCL> select count(*) from t_tmp_session;

  COUNT(*)
----------
     50779

admin@ORCL> delete t_tmp_session;

已删除50779行。

admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                          23455468


admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                           8398416

admin@ORCL> delete T_tmp_transaction;

已删除50779行。

admin@ORCL> select * from v_user_redo;

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                          23460400

 

分享到:
评论

相关推荐

    Oracle常用技术资料合集.zip

    dml_get fra_get param_get.txt redo_switch.txt segment_size.txt session_kill.txt session_sid.txt session_spid.txt shared_pool_free.txt sql_monitor.txt sql_profile.txt sqlhis_awr.txt sqlinfo_total.txt ...

    oracle11g体系架构学习文档

    3. 重做日志缓冲区(Redo Log Buffer):记录所有对数据库的修改信息,如DML和DDL操作,用于数据库恢复。重做日志缓冲区的大小不能动态修改,需通过修改参数文件并重启生效。 4. 大池(Large Pool,可选):用于大型...

    ORACLE_UNIX易错问题集锦

    - **并行DML无效**:在执行并行DML操作时,有时会发现并行度设置并未生效。例如,创建一个表并尝试使用并行度为4的查询,但在实际执行时并行度并未被利用。这可能是由于表的分区策略、权限问题或者数据库参数未正确...

    高性能动态SQL Oracle数据安全 Oracle 数据库的聚簇技术 等等

    Oracle SQL支持标准SQL语句,如DML(INSERT, UPDATE, DELETE)、DDL(CREATE, ALTER, DROP)和DCL(GRANT, REVOKE)。 22. **GROUPING SETS分组**: GROUPING SETS是聚合函数扩展,用于多级分组,能更灵活地处理...

    oracle awr报告分析

    - **Redosize**:每秒产生的redo大小约为25,568.9字节,换算成MB单位后仅为0.024MB,这表明在此期间DML操作的频率不高。 - **Logical reads**:每秒进行的逻辑读取量为38,048.0,换算为MB单位约为297MB。这表明...

    最全的oracle常用命令大全.txt

    ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。 数据字典里存有用户信息、用户的权限信息、...

    ORACLE9i_优化设计与系统调整

    第一部分 ORACLE系统优化基本知识 23 第1章 ORACLE结构回顾 23 §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1...

    Oracle数据库性能优化.rar

    3. **数据库内存管理**:Oracle的Shared Pool、Buffer Cache和Redo Log Buffer等内存结构的大小和配置直接影响性能。理解如何调整这些参数至关重要。 4. **数据库实例参数调优**:通过调整初始化参数如DB_BLOCK_...

    Oracle提高SQL查询效率(SQL优化).doc

    COMMIT 所释放的资源包括:回滚段上用于恢复数据的信息、被程序语句获得的锁、redo log buffer 中的空间。 十一、用 Where 子句替换 HAVING 子句 避免使用 HAVING 子句,HAVING 只会在检索出所有记录之后才对结果...

    异步CDC_HOTLOG模式 oracle

    为了确保所有DML操作都记录在redo log中,以便异步CDC_HOTLOG模式能够准确捕获变更数据,需要将数据库设置为Force Logging模式: ```sql ALTER DATABASE FORCE LOGGING; ALTER DATABASE ARCHIVELOG; ALTER DATABASE...

    操作 Oracle 9i 数据库

    - **初始化参数**:通过编辑`init.ora`文件,调整参数以优化数据库性能,如`SGA`大小、`DB_BLOCK_SIZE`等。 - **网络配置**:配置`tnsnames.ora`和`listener.ora`文件,确保客户端可以连接到数据库服务器。 2. **...

    Oracle 11g体系-全面详解

    - **Redo Log Buffer**: 记录了数据库的所有修改信息(包括DML和DDL),主要用于数据库恢复。它的大小通常在3M-15M之间,以字节为单位进行记录。 ### 关于SGA组件的深入理解 #### Shared Pool (共享池) - **Library...

    Oracle数据库内存优化配置.pdf

    3. 重做日志缓冲区(Redo Log Buffer)用于存储数据库的改动信息,以防万一系统崩溃时可以恢复数据。其大小由LOG_BUFFER参数设置。对于频繁进行数据修改(DML)的系统,正确设置此缓冲区的大小至关重要。 除了以上...

    Oracle Sql 性能优化技巧总结

    4. **减少访问数据库的次数**:尽可能一次性获取更多数据,例如通过调整ARRAYSIZE参数,增加每次数据库访问的检索数据量。 5. **使用DECODE函数**:DECODE函数可以减少重复扫描或连接,提高查询效率。 6. **整合...

    oracle 优化语句

    `COMMIT`能够释放回滚段上用于恢复数据的信息、被程序语句获得的锁、redolog buffer中的空间以及Oracle用于管理上述资源的内部资源。 #### 十、用WHERE子句替换HAVING子句 避免使用`HAVING`子句,因为`HAVING`只会...

    01_oracle基础

    - **重做日志文件(Redo Log Files):** 记录对数据库所做的所有修改操作的日志文件。 - **控制文件(Control File):** 包含有关数据库物理结构信息的文件。 - **表空间(Tablespace):** 数据库中的逻辑存储...

    oracle9i初始化参数中文说明

    - `REDO_BUFFER_SIZE`: 重做日志缓冲区的大小,用于记录事务的更改。 2. **PGA (Program Global Area) 参数** - `pga_aggregate_target`: 设置PGA的整体大小,用于每个服务器进程的私有内存。 3. **性能优化参数...

    oracle数据库参数.pdf

    - dml_locks:定义DML锁的数量。 - enqueue_resources:定义排队资源的数量。 - gc_defer_time:指定回滚段的延迟时间。 - gc_files_to_locks:指定需要锁定的回滚段文件数量。 - gc_rollback_locks:指定回滚段的...

    ORACLE DBA面试题集

    - **重做日志缓冲区(Redo Log Buffer)**:虽然不是共享池的一部分,但经常与共享池一起被提及,它用于缓存重做日志记录。 在早期版本的Oracle数据库中,共享池可能包括更多的层,例如Java池等。随着版本的演进,...

Global site tag (gtag.js) - Google Analytics