--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
相关推荐
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 ...
3. 重做日志缓冲区(Redo Log Buffer):记录所有对数据库的修改信息,如DML和DDL操作,用于数据库恢复。重做日志缓冲区的大小不能动态修改,需通过修改参数文件并重启生效。 4. 大池(Large Pool,可选):用于大型...
- **并行DML无效**:在执行并行DML操作时,有时会发现并行度设置并未生效。例如,创建一个表并尝试使用并行度为4的查询,但在实际执行时并行度并未被利用。这可能是由于表的分区策略、权限问题或者数据库参数未正确...
Oracle SQL支持标准SQL语句,如DML(INSERT, UPDATE, DELETE)、DDL(CREATE, ALTER, DROP)和DCL(GRANT, REVOKE)。 22. **GROUPING SETS分组**: GROUPING SETS是聚合函数扩展,用于多级分组,能更灵活地处理...
- **Redosize**:每秒产生的redo大小约为25,568.9字节,换算成MB单位后仅为0.024MB,这表明在此期间DML操作的频率不高。 - **Logical reads**:每秒进行的逻辑读取量为38,048.0,换算为MB单位约为297MB。这表明...
ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。 数据字典里存有用户信息、用户的权限信息、...
第一部分 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...
3. **数据库内存管理**:Oracle的Shared Pool、Buffer Cache和Redo Log Buffer等内存结构的大小和配置直接影响性能。理解如何调整这些参数至关重要。 4. **数据库实例参数调优**:通过调整初始化参数如DB_BLOCK_...
COMMIT 所释放的资源包括:回滚段上用于恢复数据的信息、被程序语句获得的锁、redo log buffer 中的空间。 十一、用 Where 子句替换 HAVING 子句 避免使用 HAVING 子句,HAVING 只会在检索出所有记录之后才对结果...
为了确保所有DML操作都记录在redo log中,以便异步CDC_HOTLOG模式能够准确捕获变更数据,需要将数据库设置为Force Logging模式: ```sql ALTER DATABASE FORCE LOGGING; ALTER DATABASE ARCHIVELOG; ALTER DATABASE...
- **初始化参数**:通过编辑`init.ora`文件,调整参数以优化数据库性能,如`SGA`大小、`DB_BLOCK_SIZE`等。 - **网络配置**:配置`tnsnames.ora`和`listener.ora`文件,确保客户端可以连接到数据库服务器。 2. **...
- **Redo Log Buffer**: 记录了数据库的所有修改信息(包括DML和DDL),主要用于数据库恢复。它的大小通常在3M-15M之间,以字节为单位进行记录。 ### 关于SGA组件的深入理解 #### Shared Pool (共享池) - **Library...
3. 重做日志缓冲区(Redo Log Buffer)用于存储数据库的改动信息,以防万一系统崩溃时可以恢复数据。其大小由LOG_BUFFER参数设置。对于频繁进行数据修改(DML)的系统,正确设置此缓冲区的大小至关重要。 除了以上...
4. **减少访问数据库的次数**:尽可能一次性获取更多数据,例如通过调整ARRAYSIZE参数,增加每次数据库访问的检索数据量。 5. **使用DECODE函数**:DECODE函数可以减少重复扫描或连接,提高查询效率。 6. **整合...
`COMMIT`能够释放回滚段上用于恢复数据的信息、被程序语句获得的锁、redolog buffer中的空间以及Oracle用于管理上述资源的内部资源。 #### 十、用WHERE子句替换HAVING子句 避免使用`HAVING`子句,因为`HAVING`只会...
- **重做日志文件(Redo Log Files):** 记录对数据库所做的所有修改操作的日志文件。 - **控制文件(Control File):** 包含有关数据库物理结构信息的文件。 - **表空间(Tablespace):** 数据库中的逻辑存储...
- `REDO_BUFFER_SIZE`: 重做日志缓冲区的大小,用于记录事务的更改。 2. **PGA (Program Global Area) 参数** - `pga_aggregate_target`: 设置PGA的整体大小,用于每个服务器进程的私有内存。 3. **性能优化参数...
- dml_locks:定义DML锁的数量。 - enqueue_resources:定义排队资源的数量。 - gc_defer_time:指定回滚段的延迟时间。 - gc_files_to_locks:指定需要锁定的回滚段文件数量。 - gc_rollback_locks:指定回滚段的...
- **重做日志缓冲区(Redo Log Buffer)**:虽然不是共享池的一部分,但经常与共享池一起被提及,它用于缓存重做日志记录。 在早期版本的Oracle数据库中,共享池可能包括更多的层,例如Java池等。随着版本的演进,...