`
itspace
  • 浏览: 981783 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle事务回滚时间估算

阅读更多
数据库研究版本为
引用

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE    9.2.0.3.0       Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production


通过关联$session和v$transaction可以看到Oracle中会话使用undo block的情况
可以这样理解,当Oracle处于open 状态,当Oracle回滚事务的时候,可以从used_urec,used_ublk数值可以初步估计Oracle回滚事务的速度。
引用
SQL> select a.sid, a.username, b.xidusn, b.used_urec, b.used_ublk
  2  from v$session a, v$transaction b
  3  where a.saddr=b.ses_addr;

       SID USERNAME                           XIDUSN  USED_UREC  USED_UBLK
---------- ------------------------------ ---------- ---------- ----------
        16 TEST                                    8      31536        862



当Oracle非正常关闭(如shutdown abort)时,处于业务繁忙期,再次open时,v$transaction重置,smon进程事务回滚,有以下方法可以估算smon恢复进度
1、查询视图V$FAST_START_TRANSACTIONS中字段UNDOBLOCKSDONE,UNDOBLOCKSTOTAL估算smon恢复进度,这里涉及到参数FAST_START_PARALLEL_ROLLBACK的设置,设置方法可以查看Oracle文档。需要注意的是Oracle在回滚大事务并行回滚参数设置存在bug,这时候你可以查询视图v$fast_start_servers中字段STATE ,如果只有一进城处于RECOVERING,其他进程处于IDLE,则可考虑将FAST_START_PARALLEL_ROLLBACK设置为false,关闭并行恢复。如果所有进程都处于RECOVERING状态,则可以考虑加大恢复进程,将其设置为high。
引用
SQL>set linesize 100
SQL>alter session set NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';
SQL>select usn, state, undoblockstotal "Total", undoblocksdone "Done", undoblockstotal-undoblocksdone "ToDo",decode(cputime,0,'unknown',sysdate+(((undoblockstotal-undoblocksdone) / (undoblocksdone / cputime)) / 86400))
"Estimated time to complete"
from v$fast_start_transactions;

2、dump undo segment head,查看跟踪文件
引用
SQL> select segment_id, file_id,block_id from DBA_ROLLBACK_SEGS;

SEGMENT_ID    FILE_ID   BLOCK_ID
---------- ---------- ----------
         0          1          9
         1          2          9
         2          2         25
         3          2         41
         4          2         57
         5          2         73
         6          2         89
         7          2        105
         8          2        121
         9          2        137
        10          2        153

11 rows selected.

SQL>  alter system dump datafile 2 block 121;

System altered.


显示部分跟踪文件,从state为10可以看出该slot有未提交的事务,占用的block数为0x0000035e,转化为10进制为862个,这和v$transaction中used_ublk字段数值吻合。

引用
  index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num
  ------------------------------------------------------------------------------------------------
   0x00    9    0x00  0x4058  0xffff  0x0000.01143cae  0x00000000  0x0000.000.00000000  0x00000000   0x00000000
   0x01    9    0x00  0x4057  0x0003  0x0000.01143a3b  0x00000000  0x0000.000.00000000  0x00000000   0x00000000
   0x02   10    0x80  0x4058  0x0008  0x0000.01143fa5  0x00800c8c  0x0000.000.00000000  0x0000035e   0x00000000



3、观察Oracle内部表x$ktuxe [k]ernel layer [t]ransaction layer [u]ndo transaction [e]ntry
引用

SQL> desc  x$ktuxe
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ADDR                                               RAW(4)
INDX                                               NUMBER
INST_ID                                            NUMBER
KTUXEUSN                                           NUMBER
KTUXESLT                                           NUMBER
KTUXESQN                                           NUMBER
KTUXERDBF                                          NUMBER
KTUXERDBB                                          NUMBER
KTUXESCNB                                          NUMBER
KTUXESCNW                                          NUMBER
KTUXESTA                                           VARCHAR2(16)
KTUXECFL                                           VARCHAR2(24)
KTUXEUEL                                           NUMBER
KTUXEDDBF                                          NUMBER
KTUXEDDBB                                          NUMBER
KTUXEPUSN                                          NUMBER
KTUXEPSLT                                          NUMBER
KTUXEPSQN                                          NUMBER
KTUXESIZ                                           NUMBER


SQL> select distinct ktuxesiz from x$ktuxe where KTUXESTA='ACTIVE';

  KTUXESIZ
----------
       862


进一步利用该内部表可以查看死事务的恢复进度
引用
select * from x$ktuxe where ktuxecfl = 'DEAD' and ktuxesta = 'ACTIVE';


初步估算事务恢复进度,注意KTUXEUSN,KTUXESLT为变量

引用
declare
l_start number;
l_end    number;
begin
  select ktuxesiz into l_start from x$ktuxe where  KTUXEUSN=12 and KTUXESLT=40;
  dbms_lock.sleep(60);
  select ktuxesiz into l_end from x$ktuxe where  KTUXEUSN=12 and KTUXESLT=40;
  dbms_output.put_line('time est Day:'|| round(l_end/(l_start -l_end)/60/24,2));
end;
/





2
0
分享到:
评论

相关推荐

    Oracle10g对回滚操作时间的准确评估

    例如,在一个回滚事务的例子中,如果已回滚了10,234个数据块(总计20,554个数据块),并且已经花费了77秒,那么可以根据这些信息估算剩余的回滚时间。 此外,视图中的其他列也提供了丰富的信息。`OPNAME` 明确指出...

    Oracle数据库中回滚监视的深入探讨

    Oracle数据库的回滚监视是管理和优化数据库性能的关键组成部分,特别是在处理长时间运行的事务时。在Oracle Database 10g及更高版本中,这一功能得到了显著的增强,使得管理员能够更有效地跟踪和预测回滚操作的完成...

    为用户提供对回滚操作时间准确评估

    在早期版本如Oracle 9i及更低版本,用户需要通过监控V$TRANSACTION视图,观察USED_UREC列的变化来估算回滚进度,但这往往需要手动计算和推断。而在Oracle 10g中,引入了扩展统计信息,特别是针对回滚操作的监控。 *...

    Oracle+Concepts中英文对照版(10g)

    此外,Oracle的回滚段(Rollback Segments)记录事务的改动,以便在事务回滚或系统故障时恢复数据。 在Oracle 10g中,性能优化是一个重要话题。SQL优化器(Optimizer)选择执行查询的最佳路径,通过统计信息和成本...

    ORACLE 19C SQL调优指南 中文版 Oracle DBA

    9. **回滚段优化**:回滚段用于存储事务回滚信息,其大小和数量应根据事务量和并发用户数来调整,以避免资源争抢。 10. **内存结构优化**:包括PGA(程序全局区)、SGA(系统全局区)等,合理设置这些内存结构的...

    ORACLE 优化sql语句提高oracle执行效率 .doc

    如果你没有 COMMIT 事务,ORACLE 会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。而当运用 TRUNCATE 时,回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复。因此,很少...

    Oracle基础知识第九讲.ppt

    Oracle Database Control 提供的Undo Advisory工具可以帮助估算合适的空间大小。 自动回滚管理是Oracle的一项功能,它自动在回滚表空间中管理回滚数据,根据数据库负载动态分配空间。配置自动回滚管理需要设置两个...

    Oracle中死事务的检查语句

    为了估算回滚完成所需的时间,可以编写一个PL/SQL块来计算事务的回滚速度,并预测剩余时间: ```sql DECLARE l_start NUMBER; l_end NUMBER; BEGIN SELECT ktuxesiz INTO l_start FROM x$ktuxe WHERE KTUXEUSN...

    Oracle内核技术揭秘

    事务的提交、回滚、保存点等操作,以及事务隔离级别(读未提交、读已提交、可重复读、串行化)的理解,对于数据库管理员进行故障恢复和并发控制非常重要。 六、数据库备份与恢复 Oracle提供多种备份和恢复策略,如...

    Oracle性能优化技术内幕

    回滚段用于存储事务回滚信息,合理配置能避免性能瓶颈。理解事务隔离级别和事务控制策略对性能的影响,有助于减少锁定冲突和提高并发性能。 七、数据库调优工具 Oracle提供了一系列调优工具,如SQL*Plus的EXPLAIN ...

    ORACLESQL性能优化全PPT教案.pptx

    12. **回滚段和重做日志**:合理配置回滚段和重做日志大小,避免事务回滚和恢复时的性能问题。 13. **数据库设计**:良好的数据库设计是性能优化的基础。规范化、反规范化、物化视图等设计原则需结合实际业务场景...

    oracle SQL优化技巧

    如果你没有 COMMIT 事务,Oracle 会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。而当运用 TRUNCATE 时,回滚段不再存放任何可被恢复的信息。 10. 尽量多使用 COMMIT 只要有可能,在...

    oracle核心技术读书笔记一附件1

    提交(Commit)和回滚(Rollback)操作保证了事务的原子性;并发事务间的隔离级别(Read Uncommitted、Read Committed、Repeatable Read、Serializable)确保了数据的一致性;在系统崩溃或异常情况下,Oracle的重做...

    OracleSQL优化全资料

    - 确保足够的回滚段空间,避免因事务回滚导致的性能下降。 11. **数据库设计优化**: - 正确的数据类型选择,避免过度规范化,适度反规范化以减少JOIN操作。 12. **实时监控与调优工具**: - 使用`V$视图`和`...

    oracle数据库优化大全(面试和学习都适用)

    如果你没有 COMMIT 事务,ORACLE 会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。而当运用 TRUNCATE 时,回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复。因此很少的...

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

    3、查看回滚段名称及大小 select segment_name, tablespace_name, r.status, (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r...

    ORACLE 数据库物理设计

    同时,考虑回滚段(RBS和RBS_2)和临时段(TEMP和TEMP_USER)的分布,以满足并发事务处理和大计算量操作的需求。 在数据库创建前,需要根据预估的I/O负载对数据文件进行权值分配。例如,赋予最活跃的表空间权重100...

    21天学通oracle源码

    源码中这部分涉及事务、回滚段、行版本和锁定机制。 5. 锁和并发:Oracle支持多种锁类型,如行级锁、表级锁、读写锁等,用于控制并发访问。研究源码能帮助我们理解并发控制策略,避免死锁。 6. 复制与备份恢复:...

    基本成本的Oracle优化法则源代码.rar

    10. **回滚段和重做日志**:正确配置回滚段和重做日志,能保证事务的可恢复性,同时避免性能问题,如日志写入阻塞。 11. **数据库参数调优**:Oracle有许多初始化参数可以调整,如PGA、SGA、打开的会话数等。每个...

    Oracle9i帮助(chm)

    通过回滚段和重做日志,它实现了事务的可靠性和故障恢复。 3. **并发控制**:Oracle9i使用多版本并发控制(MVCC),允许多个用户同时访问数据库而不相互干扰。行级锁定和读写锁策略减少了数据冲突。 4. **查询优化...

Global site tag (gtag.js) - Google Analytics