关于生产库上索引碎片收集的问题 <整理 from askmaclean >
问题描述:
环境:oracle10.2.0.5 RAC+HP-UX
用analyze index <index_name> validate structure这个语句可以验证索引的碎片程度,然后通过index_stats视图来查询,请问这个语句在生产库上对于比较大的索引使用这个语句,对系统的影响有多大?
FYI:
analyze index <index_name> validate structure
SQL> create table ttab(t1 int);
Table created.
SQL> create index ind_tab on ttab(t1);
Index created.
SQL> oradebug setmypid
Statement processed.
SQL> oradebug event 10704 trace name context forever,level 10;
Statement processed.
SQL> analyze index ind_tab validate structure;
Index analyzed.
SQL> oradebug tracefile_name
/s01/admin/G10R25/udump/g10r25_ora_25784.trc
[root@vrh8 ~]# grep "ksqgtl \*\*\*" /s01/admin/G10R25/udump/g10r25_ora_25784.trc
ksqgtl *** TX-00030007-000071e6 mode=6 flags=0x401 timeout=0 ***
ksqgtl *** TM-00010183-00000000 mode=4 flags=0x401 timeout=0 ***
analyze index <index_name> validate structure 要在table上加 TM mode=4的share lock,会block dml
second:
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> oradebug setmypid
Statement processed.
SQL> oradebug event 10704 trace name context forever,level 10;
Statement processed.
SQL> analyze index ind_tab validate structure online;
Index analyzed.
SQL> oradebug tracefile_name
/s01/admin/G10R25/udump/g10r25_ora_25830.trc
[root@vrh8 ~]# grep "ksqgtl \*\*\*" /s01/admin/G10R25/udump/g10r25_ora_25830.trc
ksqgtl *** TX-0009002d-000072d7 mode=6 flags=0x401 timeout=0 ***
SQL> select * from index_stats;
no rows selected
analyze index ind_tab validate structure online ==> 不要求 表上的 share lock,但是不填充index_stats 视图, 所以 validate structure online 只能用来验证索引上是否存在讹误