天萃荷净
Oracle研究中心学习笔记:数据库abort-restart或事务被异常终止时,SMON需要回滚未提交的事务,fast_start_parallel_rollback用于控制SMON恢复操作的并行度。
本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger 的Oracle技术博客
本文链接地址: 关于parallel rollback的一点总结
Oralce parallel rollback有重大关系的一个参数:
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 ROLLBACK
NAME 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> SHOW USER
USER IS "ROGER"
SQL> SELECT COUNT(*) FROM ht1;
COUNT(*)
----------
999
SQL> 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
++++++ 在当前SESSION执行全表的DELETE操作,如下:++++++
SQL> DELETE FROM ht1;
1022976 ROWS deleted.
++++++ 时间大约1分钟左右 ++++++
###### 在另一窗口进行如下查询:######
SQL> SHOW USER
USER IS "SYS"
SQL> SET LINES 200
SQL> SELECT XIDUSN,XIDSLOT,XIDSQN,NAME,START_UBASQN,START_UBAREC
2 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 K
本文发布于:2024-02-01 08:33:41,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170674762135280.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |