- 浏览: 981783 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
孤星119:
好熟悉的数据库字段啊, 上家公司做的项目每天都跟这些字段打招呼 ...
Oracle exp compress参数引起的空间浪费 -
itspace:
quxiaoyong 写道遇到个问题,网上一搜,全他妈这篇文章 ...
数据库连接错误ORA-28547 -
quxiaoyong:
遇到个问题,网上一搜,全他妈这篇文章。你转来转去的有意思吗?
数据库连接错误ORA-28547 -
hctech:
关于version count过高的问题,不知博主是否看过ey ...
某客户数据库性能诊断报告 -
itspace:
invalid 写道写的不错,我根据这个来安装,有点理解错误了 ...
AIX 配置vncserver
数据库研究版本为
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回滚事务的速度。
当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。
2、dump undo segment head,查看跟踪文件
显示部分跟踪文件,从state为10可以看出该slot有未提交的事务,占用的block数为0x0000035e,转化为10进制为862个,这和v$transaction中used_ublk字段数值吻合。
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
进一步利用该内部表可以查看死事务的恢复进度
初步估算事务恢复进度,注意KTUXEUSN,KTUXESLT为变量
引用
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
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;
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.
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
------------------------------------------------------------------------------------------------
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;
/
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;
/
发表评论
-
buffer cache 的内部结构
2020-03-18 14:21 584BUFFER CACHE作为数据块的 ... -
Oracle OMC介绍
2020-03-18 13:19 495Oracle管理云服务(OMC)的大数据平台,自动收集的企业 ... -
参加Oracle勒索病毒防范专题培训会议
2019-09-27 17:15 5312019年7月22日,受邀参加Oracle勒索病毒防范专题培训 ... -
记一次内存换IO的Oracle优化
2019-09-27 16:50 835某客户数据库从P595物理 ... -
如何定位Oracle SQL执行计划变化的原因
2019-07-03 14:49 1471性能优化最难的是能够 ... -
如何定位Oracle SQL执行计划变化的原因
2018-10-30 09:24 1185性能优化最难的是能够 ... -
数据库性能优化目标
2018-10-08 10:59 528从数据库性能优化的场 ... -
数据库无法打开的原因及解决办法
2018-10-05 20:45 2145数据库的启动是一个相当复杂的过程。比如,Oracle在启动之前 ... -
怎么样彻底删除数据库?
2018-09-18 11:10 608Oracle提供了drop database命令用来删除数据库 ... -
Oracle减少日志量的方法
2018-09-10 10:17 871LGWR进程将LOG BUFFER中的 ... -
如何快速关闭数据库
2018-09-09 13:14 1240“一朝被蛇咬,十年怕井绳”。在没被“蛇”咬之前,很多DBA喜欢 ... -
关于《如何落地智能化运维》PPT
2018-05-17 10:19 1137在DTCC 2018发表《如何落地智能化运维》演讲,主要内容如 ... -
记录在redhat5.8平台安装oracle11.2容易忽视的几个问题
2018-05-11 19:58 587问题一:ping不通问题 在虚拟机上安装好linux系统后, ... -
《Oracle DBA实战攻略》第一章
2018-05-11 10:42 954即日起,不定期更新《OracleDBA实战攻略》一书电子版,请 ... -
Oracle 12c新特性
2018-05-11 10:33 907查询所有pdb [oracle@gj4 ~]$ sqlplu ... -
关于修改memory_target的值后数据库无法启动的问题
2017-02-28 12:24 3990操作系统:RHEL6.5 数据库版本:11.2.0.4 ... -
10g rac安装error while loading shared libraries libpthread.so.0 问题
2017-02-28 12:22 70311g rac安装在二节点跑脚本一般会报此错误: 解决这个问 ... -
记一次Oracle会话共享模式故障处理过程
2017-02-27 19:16 805故障简述 XXX第八人民医院HIS数据库7月13日11点左右从 ... -
RESMGR:cpu quantum等待事件处理过程
2017-02-27 18:23 2656由于数据库上线过程中出现大量的RESMGR:cpu quant ... -
谈谈log file sync
2014-03-19 14:18 1776数据库中的log file sync等待事件指的是,当user ...
相关推荐
例如,在一个回滚事务的例子中,如果已回滚了10,234个数据块(总计20,554个数据块),并且已经花费了77秒,那么可以根据这些信息估算剩余的回滚时间。 此外,视图中的其他列也提供了丰富的信息。`OPNAME` 明确指出...
Oracle数据库的回滚监视是管理和优化数据库性能的关键组成部分,特别是在处理长时间运行的事务时。在Oracle Database 10g及更高版本中,这一功能得到了显著的增强,使得管理员能够更有效地跟踪和预测回滚操作的完成...
在早期版本如Oracle 9i及更低版本,用户需要通过监控V$TRANSACTION视图,观察USED_UREC列的变化来估算回滚进度,但这往往需要手动计算和推断。而在Oracle 10g中,引入了扩展统计信息,特别是针对回滚操作的监控。 *...
此外,Oracle的回滚段(Rollback Segments)记录事务的改动,以便在事务回滚或系统故障时恢复数据。 在Oracle 10g中,性能优化是一个重要话题。SQL优化器(Optimizer)选择执行查询的最佳路径,通过统计信息和成本...
9. **回滚段优化**:回滚段用于存储事务回滚信息,其大小和数量应根据事务量和并发用户数来调整,以避免资源争抢。 10. **内存结构优化**:包括PGA(程序全局区)、SGA(系统全局区)等,合理设置这些内存结构的...
如果你没有 COMMIT 事务,ORACLE 会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。而当运用 TRUNCATE 时,回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复。因此,很少...
Oracle Database Control 提供的Undo Advisory工具可以帮助估算合适的空间大小。 自动回滚管理是Oracle的一项功能,它自动在回滚表空间中管理回滚数据,根据数据库负载动态分配空间。配置自动回滚管理需要设置两个...
为了估算回滚完成所需的时间,可以编写一个PL/SQL块来计算事务的回滚速度,并预测剩余时间: ```sql DECLARE l_start NUMBER; l_end NUMBER; BEGIN SELECT ktuxesiz INTO l_start FROM x$ktuxe WHERE KTUXEUSN...
事务的提交、回滚、保存点等操作,以及事务隔离级别(读未提交、读已提交、可重复读、串行化)的理解,对于数据库管理员进行故障恢复和并发控制非常重要。 六、数据库备份与恢复 Oracle提供多种备份和恢复策略,如...
回滚段用于存储事务回滚信息,合理配置能避免性能瓶颈。理解事务隔离级别和事务控制策略对性能的影响,有助于减少锁定冲突和提高并发性能。 七、数据库调优工具 Oracle提供了一系列调优工具,如SQL*Plus的EXPLAIN ...
12. **回滚段和重做日志**:合理配置回滚段和重做日志大小,避免事务回滚和恢复时的性能问题。 13. **数据库设计**:良好的数据库设计是性能优化的基础。规范化、反规范化、物化视图等设计原则需结合实际业务场景...
如果你没有 COMMIT 事务,Oracle 会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。而当运用 TRUNCATE 时,回滚段不再存放任何可被恢复的信息。 10. 尽量多使用 COMMIT 只要有可能,在...
提交(Commit)和回滚(Rollback)操作保证了事务的原子性;并发事务间的隔离级别(Read Uncommitted、Read Committed、Repeatable Read、Serializable)确保了数据的一致性;在系统崩溃或异常情况下,Oracle的重做...
- 确保足够的回滚段空间,避免因事务回滚导致的性能下降。 11. **数据库设计优化**: - 正确的数据类型选择,避免过度规范化,适度反规范化以减少JOIN操作。 12. **实时监控与调优工具**: - 使用`V$视图`和`...
如果你没有 COMMIT 事务,ORACLE 会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)。而当运用 TRUNCATE 时,回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复。因此很少的...
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...
同时,考虑回滚段(RBS和RBS_2)和临时段(TEMP和TEMP_USER)的分布,以满足并发事务处理和大计算量操作的需求。 在数据库创建前,需要根据预估的I/O负载对数据文件进行权值分配。例如,赋予最活跃的表空间权重100...
源码中这部分涉及事务、回滚段、行版本和锁定机制。 5. 锁和并发:Oracle支持多种锁类型,如行级锁、表级锁、读写锁等,用于控制并发访问。研究源码能帮助我们理解并发控制策略,避免死锁。 6. 复制与备份恢复:...
10. **回滚段和重做日志**:正确配置回滚段和重做日志,能保证事务的可恢复性,同时避免性能问题,如日志写入阻塞。 11. **数据库参数调优**:Oracle有许多初始化参数可以调整,如PGA、SGA、打开的会话数等。每个...
通过回滚段和重做日志,它实现了事务的可靠性和故障恢复。 3. **并发控制**:Oracle9i使用多版本并发控制(MVCC),允许多个用户同时访问数据库而不相互干扰。行级锁定和读写锁策略减少了数据冲突。 4. **查询优化...