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

[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很高.
--看来要看v$session_event可以知道每一次有多少次TOTAL_WAITS,TOTAL_TIMEOUTS.

3.再重复测试看看.
回话1,rollback.
回话2,退出,在进入:
SQL2> select * from v$mystat 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看到的基本一致.

时间: 2024-09-20 12:19:16

[20120801]11g下Oracle Index rebuild online之3.txt的相关文章

[20120712]10g下Oracle Index rebuild online.txt

[20120712]10g下Oracle Index rebuild online.txt oracle rebuild online时要建立一张IOT表,为了保证事务依旧能操作,需要记录索引rebuild期间的DML操作.但是10g与11g下rebuild的机制有一些不同. index online rebuild 前先建立一张IOT表跟踪后续DML操作,然后merge全部的改变到索引中. 下面通过例子来说明: BANNER ----------------------------------

windows 7下Oracle 11g安装图文教程_oracle

今天安装了下Oracle,下面说下步骤吧.ps 我也是跟网上学习了一些,加上自己的理解,我自己把安装的全部过程详细的截图了,希望 能帮助你顺利安装上. 然后解压 点击setup.exe 我用的是默认安装D盘 数据库口令用的是susu 下一步 首先在自己的Windows 7旗舰版上,Oracle 11g在"产品特定的先觉条件检查"时,提示错误: 在上图中,我们可以看到在Oracle在检查操作系统兼容性时,没有通过检查,此时,我们在点击"下一步"进行安装时,是不能安装的

[20131017]11G下truncate的新特性.txt

[20131017]11G下truncate的新特性.txt http://www.askmaclean.com/archives/know-high-water-mark-truncate.html 11.2.0.2中出现truncate的新特性,截断表目前有了新选项:即drop all storage. 测试看看:SCOTT@test> @verBANNER--------------------------------------------------------------------

solaris X86-64下ORACLE打11.2.0.3.8补丁遇到的问题

solaris X86-64下ORACLE打11.2.0.3.8补丁: 正确步骤: 1.BUG6880880 ,OPATCH的补丁 2.BUG16902043,11.2.0.3.8补丁 感慨就是要实践啊看着容易的事也一波三折--像OPATCH的版本问题在安装11.2.0.3.8补丁前有提示的,要细心唉. MOS还是很好用的哈哈. 安装过程: 1.环境检查 -bash-3.2$ ls 16902043                           alert_byssolaris.log D

oracle-linux下Oracle安装之后重启监听失败。具体情况见下 、还往大家帮忙

问题描述 linux下Oracle安装之后重启监听失败.具体情况见下 .还往大家帮忙 我的操作是安装oracle之后.尝试连接 [oracle@linux64 ~]$ sqlplus / as sysdba Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing

Oracle Index 的三个问题_oracle

正在看的ORACLE教程是:Oracle Index 的三个问题. 索引( Index )是常见的数据库对象,它的设置好坏.使用是否得当,极大地影响数据库应用程序和Database 的性能.虽然有许多资料讲索引的用法, DBA 和 Developer 们也经常与它打交道,但笔者发现,还是有不少的人对它存在误解,因此针对使用中的常见问题,讲三个问题.此文所有示例所用的数据库是 Oracle 8.1.7 OPS on HP N series ,示例全部是真实数据,读者不需要注意具体的数据大小,而应注

LINUX下Oracle数据导入导出的方法详解_oracle

本文讲述了LINUX下Oracle数据导入导出的方法.分享给大家供大家参考,具体如下: 一. 导出工具 exp 1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移   它有三种模式: a.  用户模式: 导出用户所有对象以及对象中的数据: b.  表模式: 导出用户所有表或者指定的表: c.  整个数据库: 导出数据库中所有对象. 2. 导出工具exp交互式命令行方式的使用的例子: $ex

[20121004]11G下编译bbed.txt

[20121004]11G下编译bbed.txt cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed $ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed Linking BBED utility (bbed)rm -f /u01/app/oracle11g/product/11.2.0/db_1/rdbms/lib/bbedgcc -o /u01/a

[20140529]11g下参数audit_trail的修改.txt

[20140529]11g下参数audit_trail的修改.txt --前一天看了11g下审计的内容,因为要修改参数audit_trail,又遇到一些奇怪的问题,自己做一个记录. --主要问题是可能今年要上11G,11G下缺省audit_trail=DB,打开了许多审计,其中比如用户登录审计可能是不需要的,需要关闭. --我遇到问题做一个简单记录: SYS@test> @ver BANNER ---------------------------------------------------