--日常维护命令对性能的影响已经上锁的注意事项
--1 create index 是4级锁
SQL>Create Index index_CONTACT_NAME On t_to_order_info(CONTACT_NAME)
SQL>Select * From V$LOCK Where Type='TM'
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
00000000D941FAB0 00000000D941FAD8 114 TM 112775 0 4 0 11 0
00000000D941FBB0 00000000D941FBD8 114 TM 18 0 3 0 11 0
SQL>Select aa.OBJECT_NAME,aa.OBJECT_ID,aa.OWNER From dba_objects aa Where aa.OBJECT_ID In (112775,18)
OBJECT_NAME OBJECT_ID OWNER
------------ --------- ------
OBJ$ 18 SYS
T_TO_ORDER_INFO 112775 GCBB
--2 create index online 是2级锁
SQL>Create Index index_CONTACT_NAME On t_to_order_info(CONTACT_NAME) Online
SQL> Select * From V$LOCK Where Type='TM' ;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000D941FAB0 00000000D941FAD8 155 TM 68 0 3 0 60 0
00000000D941FBB0 00000000D941FBD8 60 TM 237 0 3 0 60 0
00000000D941FCB0 00000000D941FCD8 114 TM 112775 0 2 0 40 0
00000000D941FDB0 00000000D941FDD8 114 TM 18 0 3 0 40 0
00000000D941FEB0 00000000D941FED8 160 TM 8779 0 3 0 28 0
SQL> Select aa.OBJECT_NAME,aa.OBJECT_ID,aa.OWNER From dba_objects aa Where aa.OBJECT_ID In (68,237,112775,18,8779);
OBJECT_NAME OBJECT_ID OWNER
-------------------------------------------------------------------------------- ---------- ------------------------------
WRI$_ALERT_OUTSTANDING 8779 SYS
JOB$ 237 SYS
SEQ$ 68 SYS
OBJ$ 18 SYS
T_TO_ORDER_INFO 112775 GCBB
--3 rebuild index 是4级锁
SQL>Alter Index IDX_T_TO_ORDER_1 Rebuild
SQL> Select * From V$LOCK Where Type='TM';
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000D941FAB0 00000000D941FAD8 155 TM 68 0 3 0 0 0
00000000D941FBB0 00000000D941FBD8 114 TM 112775 0 4 0 18 0
--4 rebuild index online 是2级锁
SQL> Alter Index TICKETORDER_MEMBERINFO_FK Rebuild Online
SQL> Select * From V$LOCK Where Type='TM';
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000D941FAB0 00000000D941FAD8 114 TM 116055 0 4 0 11 0
00000000D941FBB0 00000000D941FBD8 114 TM 112775 0 2 0 11 0
00000000D941FCB0 00000000D941FCD8 155 TM 68 0 3 0 0 0
Online的时候会多出一个临时的对象,在v$lock里面能看见
-----------------------------------------------------------------------
--5 shrink Space Compact 是3级锁
SQL>Alter t_to_order_info shrink Space Compact
SQL> Select * From V$LOCK Where Type='TM' ;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000D941FAB0 00000000D941FAD8 114 TM 106582 0 3 0 27 0
SQL> Select aa.OBJECT_NAME,aa.OBJECT_ID,aa.OWNER From dba_objects aa Where aa.OBJECT_ID In (106582);
OBJECT_NAME OBJECT_ID OWNER
-------------------------------------------------------------------------------- ---------- ------------------------------
T_TO_ORDER_INFO 106582 GCAA
--6 shrink Space开始的时候还是3级锁,在第二部调整HWM位置的时候上6级锁
SQL> Alter table t_to_order_info shrink Space;
SQL> Select * From V$LOCK Where Type='TM' ;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
00000000D941FAB0 00000000D941FAD8 114 TM 106582 0 3 0 15 0
--7 exec dbms_stats.gather_table_stats 这个命令不会上锁,只是非常消耗i/o资源
Sql> exec dbms_stats.gather_table_stats('gcaa','t_to_order_info');
SQL> Select * From V$LOCK Where Type='TM' ;
ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
备注:
segment shrink分为两个阶段:
1、数据重组(compact):通过一系列insert、delete操作,将数据尽量排列在段的前面。
在这个过程中需要在表上加RX锁,即只在需要移动的行上加锁。由于涉及到rowid的改
变,需要enable row movement.同时要disable基于rowid的trigger.这一过程对业务影
响比较小。
2、HWM调整:第二阶段是调整HWM位置,释放空闲数据块。此过程需要在表上加X锁,
会造成表上的所有DML语句阻塞。在业务特别繁忙的系统上可能造成比较大的影响。
shrink space compact只执行第一个阶段。 --这是3级锁
shrink space语句两个阶段都执行。 --这是6级锁
如果系统业务比较繁忙,可以先执行shrink space compact重组数据,然后在业务不忙
的时候再执行shrink space降低HWM释放空闲数据块。
作用:压缩释放空闲空间,加快全表扫描的速度