fast_start_parallel_rollback 该参数是oracle 8i引入的,详细信息如下表所示:Version Parameter Type Modifiable 11.1.0.7 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 11.1.0.6 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 10.2.0.4 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 10.2.0.3 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 10.1.0.5 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 10.1.0.4 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 9.2.0.8 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 9.0.1.4 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 8.1.7.4 fast_start_parallel_rollback STRING ALTER SYSTEM (IMMEDIATE) 该参数如下3种属性值:false --即是关闭parallel rollback功能 low --也是10g的默认值,该值含有是最大的rollback 进程为 2*cpu_count个 high --当设置为该值时,最大的rollback 进程为4*cpu_count个当然其最大值是要受参数parallel_max_servers的影响的,如果是rac环境,那么还跟参数 parallel_threads_per_cpu有关系,这里需要说明一点的是,该参数跟recovery_parallelism不同的, recovery_parallelism参数是指在进行instance crash recovery时的并行恢复进程个数。关于并行rollback 操作,我们可以通过观察几个试图来进行判断其回滚的时间,如下的几个试图就是 我们需要进行查询的: v$fast_start_transactions V$FAST_START_SERVERS 或x$ktuxe下面我们通过例子来进行说明. SQL> show parameter rollbackNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ _cleanup_rollback_entries integer 100 _corrupted_rollback_segments string _max_cr_rollbacks integer 0 _offline_rollback_segments string _rollback_segment_count integer 0 _rollback_segment_initial integer 1 _rollback_stopat integer 0 fast_start_parallel_rollback string LOW --10g中的默认值 rollback_segments string transactions_per_rollback_segment integer 5 SQL>SQL> show user USER is "ROGER" SQL> select count(*) from ht1;COUNT(*) ---------- 999SQL> begin 2 for i in 1 .. 1000 loop 3 insert /*+ append */ 4 into ht1 5 select * from ht1; 6 commit; 7 end loop; 8 end; 9 / begin * ERROR at line 1: ORA-01653: unable to extend table ROGER.HT1 by 1024 in tablespace ROGER ORA-06512: at line 3 SQL> select count(*) from ht1;COUNT(*) ---------- 1022976 SQL> ----在当前session执行全表的delete操作,如下: SQL> delete from ht1; 1022976 rows deleted. SQL> ---时间大约1分钟左右----在另一窗口进行如下查询: SQL> show user USER is "SYS" SQL> set lines 200 SQL> select XIDUSN,XIDSLOT,XIDSQN,NAME,START_UBASQN,START_UBAREC from v$transaction; XIDUSN XIDSLOT XIDSQN NAME START_UBASQN START_UBAREC ---------- ---------- ---------- ------------------------- ------------ ------------ 6 31 234 221 1 SQL> select KTUXEUSN, KTUXESLT, KTUXESQN, KTUXECFL, KTUXESIZ, sysdate 2 from x$ktuxe 3 where KTUXEUSN = 6 4 and KTUXESLT = 31; KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- --------- 6 31 234 NONE 38912 07-OCT-11SQL>---下面进行rollback time计算 SQL> show user USER is "ROGER" SQL> set timing on SQL> SQL> rollback; Rollback complete. Elapsed: 00:00:46.53 SQL>---该rollback操作花费了46.53秒。---另外窗口 SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered.Elapsed: 00:00:00.04 SQL> select KTUXEUSN, KTUXESLT, KTUXESQN, KTUXECFL, KTUXESIZ, sysdate 2 from x$ktuxe 3 where KTUXEUSN = 6 4 and KTUXESLT = 31; KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 6 31 234 NONE 3616 2011-10-07 06:32:45Elapsed: 00:00:00.00 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 6 31 234 NONE 2479 2011-10-07 06:32:47Elapsed: 00:00:00.01 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 6 31 234 NONE 0 2011-10-07 06:32:52Elapsed: 00:00:00.01 SQL> SQL> select 38912/((3616-2479)/2) from dual; 38912/((3616-2479)/2) --------------------- 68.4467898 Elapsed: 00:00:00.01 SQL>通过我计算发现,应该是需要68.44s才能完成rollback操作,但是为什么实际上46.53s就完成了呢?#####再次进行相同的测试 SQL> delete from ht1; 1022976 rows deleted. Elapsed: 00:01:31.96 SQL> rollback; Rollback complete. Elapsed: 00:00:36.51 SQL>---另一session窗口 SQL> select XIDUSN,XIDSLOT,XIDSQN,NAME,START_UBASQN,START_UBAREC from v$transaction; XIDUSN XIDSLOT XIDSQN NAME START_UBASQN START_UBAREC ---------- ---------- ---------- ------------------------- ------------ ------------ 2 13 217 207 55Elapsed: 00:00:00.01 SQL> select KTUXEUSN, KTUXESLT, KTUXESQN, KTUXECFL, KTUXESIZ, sysdate 2 from x$ktuxe 3 where KTUXEUSN = 2 4 and KTUXESLT = 13; KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 38913 2011-10-07 06:55:36Elapsed: 00:00:00.01 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 32721 2011-10-07 06:55:54Elapsed: 00:00:00.00 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 29825 2011-10-07 06:55:55Elapsed: 00:00:00.00 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 29195 2011-10-07 06:55:57Elapsed: 00:00:00.01 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 25293 2011-10-07 06:56:00Elapsed: 00:00:00.00 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 22288 2011-10-07 06:56:02Elapsed: 00:00:00.00 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 21288 2011-10-07 06:56:04Elapsed: 00:00:00.00 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 18512 2011-10-07 06:56:05Elapsed: 00:00:00.01 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 17643 2011-10-07 06:56:07Elapsed: 00:00:00.00 SQL> / KTUXEUSN KTUXESLT KTUXESQN KTUXECFL KTUXESIZ SYSDATE ---------- ---------- ---------- ------------------------ ---------- ------------------- 2 13 217 NONE 16880 2011-10-07 06:56:08Elapsed: 00:00:00.00 SQL> select * from v$fast_start_transactions; no rows selected Elapsed: 00:00:00.00 SQL> select * from v$fast_start_servers; no rows selectedElapsed: 00:00:00.00 SQL> /no rows selected Elapsed: 00:00:00.00根据前面的时间数据,我分别计算出2个值如下1238和1102,然后再根据该值取平均值,如下; SQL> select 1238+1102 from dual; 1238+1102 ---------- 2340 SQL> select 2340/2 from dual; 2340/2 ---------- 1170 SQL> select 38913/1170 from dual; 38913/1170 ---------- 33.2589744 SQL>我们来看看此次的rollback时间,如下: SQL> show user USER is "ROGER" SQL> SQL> delete from ht1; 1022976 rows deleted. Elapsed: 00:01:31.96 SQL> rollback;Rollback complete. Elapsed: 00:00:36.51 我们可以看到,已经非常的接近了,因为前面的时间计算,其实还存在一定的误差,从数学的角度来说, 要想更加精确,需要把时间扩大,进行多次采集然后计算平均值,那样可能就更加接近实际值了。最后需要做一点补充的是,关于x$ktuxe大家可以参考我以前的一个笔记,简略信息如下: ktuxc,其实并不神秘,跟一个x$表相关,即如下x$表:x$ktuxe [K]ernel [T]ransaction [U]ndo transaction [E]ntry我们知道,在平常所遇到的数据库故障中,跟undo相关的太多了,基本上ora-4xxx ~都跟undo有种很紧密的联系比如大家所熟知的ora-4193、ora-4000、ora-4194等等。 这里我主要简单的分析下ktuxe的结构,其实关于ktuxe, 还有一个很重要的地方,那就是无法通过v$tranactions查到的死事物,我们可以通过x$ktuxe来获取。那么ktuxe,ktuxc结构到底多大呢?换句话说,在整个block中,占据了多个个byte呢? 如下:COMPONEN TYPE DESCRIPTION TYPE_SIZE -------- -------- -------------------------------- ---------- S EWORD EITHER WORD 4 S EB1 EITHER BYTE 1 1 S EB2 EITHER BYTE 2 2 S EB4 EITHER BYTE 4 4 S UWORD UNSIGNED WORD 4 S UB1 UNSIGNED BYTE 1 1 S UB2 UNSIGNED BYTE 2 2 S UB4 UNSIGNED BYTE 4 4 S SWORD SIGNED WORD 4 S SB1 SIGNED BYTE 1 1 S SB2 SIGNED BYTE 2 2 S SB4 SIGNED BYTE 4 4 S BOOLEAN BOOLEAN 4 S FLOAT FLOAT 4 S DOUBLE DOUBLE 8 S SIZE_T SIZE_T 4 S DSIZE_T DSIZE_T 4 S PTR_T PTR_T 4 K KDBA DATABASE BLOCK ADDRESS 4 K KTNO TABLE NUMBER IN CLUSTER 1 K KSCN SYSTEM COMMIT NUMBER 8 K KXID TRANSACTION ID 8 K KUBA UNDO ADDRESS 8 KCB KCBH BLOCK COMMON HEADER 20 KTB KTBIT TRANSACTION VARIABLE HEADER 24 KTB KTBBH TRANSACTION FIXED HEADER 48 KTB KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT 8 KDB KDBH DATA HEADER 14 KDB KDBT TABLE DIRECTORY ENTRY 4 KTE KTECT EXTENT CONTROL 44 KTE KTECH EXTENT CONTROL 72 KTE KTETB EXTENT TABLE 8 KTS KTSHC SEGMENT HEADER 8 KTS KTSFS SEGMENT FREE SPACE LIST 20 KTS KTSPHW PAGE TABLE SEGMENT HWM 60 KTS KTSPHC PAGE TABLE SEGMENT HEADER 112 KTS KTSPFHC LEVEL 1 BITMAP BLOCK HEADER 184 KTS KTSPSHC LEVEL 2 BITMAP BLOCK HEADER 96 KTS KTSPTHC LEVEL 3 BITMAP BLOCK HEADER 88 KTU KTUBH UNDO HEADER 16 KTU KTUXE UNDO TRANSACTION ENTRY 40 ---- 跟ktuxc相关 KTU KTUXC UNDO TRANSACTION CONTROL 104 ---- 这里是我们这里需要关注的地方 (占据了104个byte) KDX KDXCO INDEX HEADER 16 KDX KDXLE INDEX LEAF HEADER 32 KDX KDXBR INDEX BRANCH HEADER 24 BBED> p ktuxc struct ktuxc, 104 bytes @4148 (通过bbed我们可以发现,确定是占据了104个byte) struct ktuxcscn, 8 bytes @4148 ub4 kscnbas @4148 0x001564b5 ---scn值 ub2 kscnwrp @4152 0x0000 struct ktuxcuba, 8 bytes @4156 --UBA值 (有如下3部分组成) ub4 kubadba @4156 0x00400181 --dba(转换后为file 1 block 385) ub2 kubaseq @4160 0x0068 ub1 kubarec @4162 0x0f --Last Entry in UNDO record map sb2 ktuxcflg @4164 1 (KTUXCFSK) --表示inactive ub2 ktuxcseq @4166 0x0068 sb2 ktuxcnfb @4168 1 ub4 ktuxcinc @4172 0x00000000 sb2 ktuxcchd @4176 30 sb2 ktuxcctl @4178 22 ---这里的部分内容 目前我还没搞清楚是啥意思 ub2 ktuxcmgc @4180 0x8002 ub4 ktuxcopt @4188 0x7ffffffe struct ktuxcfbp[0], 12 bytes @4192 struct ktufbuba, 8 bytes @4192 ub4 kubadba @4192 0x00400181 ub2 kubaseq @4196 0x0068 ub1 kubarec @4198 0x0f sb2 ktufbext @4200 2 sb2 ktufbspc @4202 4280 struct ktuxcfbp[1], 12 bytes @4204 struct ktufbuba, 8 bytes @4204 ub4 kubadba @4204 0x00000000 ub2 kubaseq @4208 0x0065 ub1 kubarec @4210 0x02 sb2 ktufbext @4212 5 sb2 ktufbspc @4214 7886 struct ktuxcfbp[2], 12 bytes @4216 struct ktufbuba, 8 bytes @4216 ub4 kubadba @4216 0x00000000 ub2 kubaseq @4220 0x003e ub1 kubarec @4222 0x25 sb2 ktufbext @4224 2 sb2 ktufbspc @4226 464 struct ktuxcfbp[3], 12 bytes @4228 struct ktufbuba, 8 bytes @4228 ub4 kubadba @4228 0x00000000 ub2 kubaseq @4232 0x003e ub1 kubarec @4234 0x08 sb2 ktufbext @4236 2 sb2 ktufbspc @4238 7130 struct ktuxcfbp[4], 12 bytes @4240 struct ktufbuba, 8 bytes @4240 ub4 kubadba @4240 0x00000000 ub2 kubaseq @4244 0x0000 ub1 kubarec @4246 0x00 sb2 ktufbext @4248 0 sb2 ktufbspc @4250 0 从上面信息,我们可以发现最后一次使用的undo block是 file 1 block 385。 下面来看看ktuxe的情况下面我们来看看x$ktuxe的结构: SQL> desc x$ktuxe Name Null? Type ------------------ -------- ---------------------------- ADDR RAW(4) INDX NUMBER INST_ID NUMBER KTUXEUSN NUMBER --undo seq number KTUXESLT NUMBER --slot 即为事务槽号 KTUXESQN NUMBER --sequence号 KTUXERDBF NUMBER --文件号 即为file id KTUXERDBB NUMBER --block 号 KTUXESCNB NUMBER --SCN base for prepare/commit KTUXESCNW NUMBER --SCN wrap for prepare/commit KTUXESTA VARCHAR2(16) --事务状态 (我所知道的应该是有3种 action,inaction,dead) KTUXECFL VARCHAR2(24) --事务标志 KTUXEUEL NUMBER --这里根据我猜测,应该是指用于存放事务的一个列表 KTUXEDDBF NUMBER --file id KTUXEDDBB NUMBER --block number KTUXEPUSN NUMBER --parent usn number KTUXEPSLT NUMBER --parent solt number KTUXEPSQN NUMBER --parent seq# KTUXESIZ NUMBER --用于该事务有多少个undo block(单位是block)这里我只想说明一点的是,注意KTUXESIZ的单位是block,而不是byte。 本文的重点不是来讲述这个x$表的用途,而是像详细说明parallel rollback 的一些东西, 这里有点要说明的是,rollback分为两种,如下: 1. parallel rollback 即并行回滚 2. Serial rollback 即串行回滚当初始化参数fast_start_parallel_rollback设置为false以后,即为串行回滚,否则为并行回滚。 我们知道并行回滚是oracle 8i引入的一个特性,那么必然就有它的优势,但是我google了一下, 找到了老白的帖子,说某些情况下并行恢复会非常的慢,但是没有说具体是那些情况下,这点较为 遗憾。我这里由于是单表所以模拟的时候没没有发现parallel rollback进程,虽然说参数是默认值。 总的来说,不管是使用并行回滚还是串行回滚,我们都可以通过上面的方法来进行估算具体的回滚时间。通过所掌握的知识来看,我猜测可能在如下的情况下parallel rollback可能会更慢: 1. 相关的操作正常情况下走index,而如果是parallel,那么将走全表扫描,所以会更慢; 2. 存在相关争用的情况下。当时,另外我们还可以同调整_cleanup_rollback_entries来加快恢复进度,在某些情况下。
parallel rollback参数总结
来源:这里教程网
时间:2026-03-03 12:59:07
作者:
编辑推荐:
- parallel rollback参数总结03-03
- [20190227]简单探究tab$的bojb#字段.txt03-03
- Oracle ORA-14148问题03-03
- [20190228]Backup Restore Throttle sleep.txt03-03
- 在登录数据库的使用!sql03-03
- Oracle用户密码重置03-03
- [20190221]sql patch 问题.txt03-03
- Oracle ASSM表空间存储结构03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle的SCN显示问题
Oracle的SCN显示问题
26-03-03 - WRH$_ACTIVE_SESSION_HISTORY未自动清理导致SYSAUX空间过度增长的处理方法
- Debian监控业务指标配置(手把手教你用Prometheus+Grafana搭建Debian系统性能监控平台)
- 【kingsql分享】Oracle跨版本迁移之XTTS_V4版本的实施
【kingsql分享】Oracle跨版本迁移之XTTS_V4版本的实施
26-03-03 - PLSQL Developer 提示字段名,回车后卡顿解决
PLSQL Developer 提示字段名,回车后卡顿解决
26-03-03 - oracle 正则表达式4个主要函数
oracle 正则表达式4个主要函数
26-03-03 - 数据泵:expdp/impdp
数据泵:expdp/impdp
26-03-03 - 用listagg函数分组实现列转行
用listagg函数分组实现列转行
26-03-03 - Debian网络身份认证详解(手把手教你配置Debian系统下的企业级WiFi与有线网络身份验证)
- Oracle Exadata 存储服务器原理探究
Oracle Exadata 存储服务器原理探究
26-03-03
