问题描述:
环境: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 只能用来验证索引上是否存在讹误