[20120801]11g下Oracle Index rebuild online之3.txt

简介: [20120801]11g下Oracle Index rebuild online之3.txt接着昨天的测试继续:昨天在索引rebuild online时,按ctrl+c中断时,要等很长时间,不想一些dml语句如果挂起,按ctrl+c很快退出.
[20120801]11g下Oracle Index rebuild online之3.txt

接着昨天的测试继续:

昨天在索引rebuild online时,按ctrl+c中断时,要等很长时间,不想一些dml语句如果挂起,按ctrl+c很快退出.
今天继续测试看看..

SQL> select * from v$version ;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

create table t (id number,name varchar2(10));
create index i_t_id on t(id);
insert into t  select rownum id ,'test' name from dual connect by level 
commit ;


1.测试,插入记录后在rebuild online:
会话1插入1行:
SQL1> select * from v$mystat where rownum
       SID STATISTIC#      VALUE
---------- ---------- ----------
       133          0          0

insert into t values (101,'a');

会话2插入1行:
SQL2> select * from v$mystat where rownum

       SID STATISTIC#      VALUE
---------- ---------- ----------
       192          0          0
SQL2> set timing on
SQL2> alter index i_t_id rebuild online ;
--挂起!

回到回话1执行:

SQL1> exec scott.print_table('select * from v$session_wait where sid=192');
SID                           : 192
SEQ#                          : 33
EVENT                         : enq: TX - row lock contention
P1TEXT                        : name|mode
P1                            : 1415053316
P1RAW                         : 0000000054580004
P2TEXT                        : usn
P2                            : 589838
P2RAW                         : 000000000009000E
P3TEXT                        : sequence
P3                            : 7179
P3RAW                         : 0000000000001C0B
WAIT_CLASS_ID                 : 4217450380
WAIT_CLASS#                   : 1
WAIT_CLASS                    : Application
WAIT_TIME                     : 0
SECONDS_IN_WAIT               : 3
STATE                         : WAITING
WAIT_TIME_MICRO               : 2684547
TIME_REMAINING_MICRO          : -1
TIME_SINCE_LAST_WAIT_MICRO    : 0
-----------------

PL/SQL procedure successfully completed.

--可以发现出现的等待事件是enq: TX - row lock contention.

2.回到回话2,按ctrl+c中断rebuild online.回到回话1执行:

SQL1> exec scott.print_table('select * from v$session_wait where sid=192');
SID                           : 192
SEQ#                          : 67
EVENT                         : index (re)build online cleanup
P1TEXT                        : object
P1                            : 101584
P1RAW                         : 0000000000018CD0
P2TEXT                        : mode
P2                            : 4
P2RAW                         : 0000000000000004
P3TEXT                        : wait
P3                            : 0
P3RAW                         : 00
WAIT_CLASS_ID                 : 4166625743
WAIT_CLASS#                   : 3
WAIT_CLASS                    : Administrative
WAIT_TIME                     : 0
SECONDS_IN_WAIT               : 0
STATE                         : WAITING
WAIT_TIME_MICRO               : 7931
TIME_REMAINING_MICRO          : 92069
TIME_SINCE_LAST_WAIT_MICRO    : 0
-----------------

PL/SQL procedure successfully completed.

--可以发现等待事件是 index (re)build online cleanup.测试大约3:27.08出现:
--也就是大约3*60+27=207秒后退出.

SQL2> alter index i_t_id rebuild online ;
alter index i_t_id rebuild online
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation

Elapsed: 00:03:27.08

SQL1> exec scott.print_table('select * from v$session_wait where sid=192');
SID                           : 192
SEQ#                          : 2103
EVENT                         : SQL*Net message from client
P1TEXT                        : driver id
P1                            : 1650815232
P1RAW                         : 0000000062657100
P2TEXT                        : #bytes
P2                            : 1
P2RAW                         : 0000000000000001
P3TEXT                        :
P3                            : 0
P3RAW                         : 00
WAIT_CLASS_ID                 : 2723168908
WAIT_CLASS#                   : 6
WAIT_CLASS                    : Idle
WAIT_TIME                     : 0
SECONDS_IN_WAIT               : 65
STATE                         : WAITING
WAIT_TIME_MICRO               : 64925947
TIME_REMAINING_MICRO          : -1
TIME_SINCE_LAST_WAIT_MICRO    : 0
-----------------

PL/SQL procedure successfully completed.

查看一下v$system_event视图:

SQL> exec scott.print_table('select * from v$system_event where event =''index (re)build online cleanup''');
EVENT                         : index (re)build online cleanup
TOTAL_WAITS                   : 43143
TOTAL_TIMEOUTS                : 43143
TIME_WAITED                   : 435750
AVERAGE_WAIT                  : 10.1
TIME_WAITED_MICRO             : 4357497403
TOTAL_WAITS_FG                : 43135
TOTAL_TIMEOUTS_FG             : 43135
TIME_WAITED_FG                : 435669
AVERAGE_WAIT_FG               : 10.1
TIME_WAITED_MICRO_FG          : 4356691014
EVENT_ID                      : 3507172204
WAIT_CLASS_ID                 : 4166625743
WAIT_CLASS#                   : 3
WAIT_CLASS                    : Administrative
-----------------

PL/SQL procedure successfully completed.

--我测试执行多次.TOTAL_WAITS很高.
--看来要看vsessioneventTOTALWAITS,TOTALTIMEOUTS.3..1,rollback.2,退,:SQL2>selectfromvmystat where rownum
       SID STATISTIC#      VALUE
---------- ---------- ----------
       192          0          0

--SID依旧是192.

打开新回话2(sys用户),执行:
DECLARE
  isClean BOOLEAN;
BEGIN
  isClean := FALSE;
    isClean := DBMS_REPAIR.ONLINE_INDEX_CLEAN(101585,0);
  EXCEPTION
   WHEN OTHERS THEN
   RAISE;
END;
/


在回话2执行:
SQL2> alter index i_t_id rebuild online ;

回到回话1执行:
SQL1>  exec print_table(q'[select * from v$session_event where event ='index (re)build online cleanup' and sid=192]');
SID                           : 192
EVENT                         : index (re)build online cleanup
TOTAL_WAITS                   : 23
TOTAL_TIMEOUTS                : 23
TIME_WAITED                   : 232
AVERAGE_WAIT                  : 10.08
MAX_WAIT                      : 10
TIME_WAITED_MICRO             : 2319401
EVENT_ID                      : 3507172204
WAIT_CLASS_ID                 : 4166625743
WAIT_CLASS#                   : 3
WAIT_CLASS                    : Administrative
-----------------

PL/SQL procedure successfully completed.

SQL>  exec print_table(q'[select * from v$session_event where event ='index (re)build online cleanup' and sid=192]');
SID                           : 192
EVENT                         : index (re)build online cleanup
TOTAL_WAITS                   : 298
TOTAL_TIMEOUTS                : 298
TIME_WAITED                   : 3009
AVERAGE_WAIT                  : 10.1
MAX_WAIT                      : 10
TIME_WAITED_MICRO             : 30087538
EVENT_ID                      : 3507172204
WAIT_CLASS_ID                 : 4166625743
WAIT_CLASS#                   : 3
WAIT_CLASS                    : Administrative
-----------------

PL/SQL procedure successfully completed.

--可以发现TOTAL_WAITS次数不断增加.最后如下:

SQL>  exec print_table(q'[select * from v$session_event where event ='index (re)build online cleanup' and sid=192]');
SID                           : 192
EVENT                         : index (re)build online cleanup
TOTAL_WAITS                   : 2000
TOTAL_TIMEOUTS                : 2000
TIME_WAITED                   : 20199
AVERAGE_WAIT                  : 10.1
MAX_WAIT                      : 10
TIME_WAITED_MICRO             : 201988369
EVENT_ID                      : 3507172204
WAIT_CLASS_ID                 : 4166625743
WAIT_CLASS#                   : 3
WAIT_CLASS                    : Administrative
-----------------

PL/SQL procedure successfully completed.

--可以推出,按ctrl+c后,oracle不断尝试index (re)build online cleanup,总共2000次,平均时间是10cs(厘秒).
--TIME_WAITED_MICRO的单位应该是us,201988369/1e6约等于202秒,基本于set timing on看到的基本一致.


目录
打赏
0
0
0
0
36
分享
相关文章
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
Oracle 11G数据库安装步骤及截图操作2
Oracle 11G数据库安装步骤及截图操作
97 0
Oracle 11G数据库安装步骤及截图操作1
Oracle 11G数据库安装步骤及截图操作
146 0
手把手教你安装Oracle——以oracle 11g为例
手把手教你安装Oracle——以oracle 11g为例
docker 方式安装ORACLE 11g
docker 方式安装ORACLE 11g
763 5
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
在Flink CDC中,使用Oracle 11g数据库的NUMBER类型作为主键
196 1
Oracle - Spool导出数据到TXT文件
Oracle - Spool导出数据到TXT文件
139 0
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
175 28
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。