您的位置:首页 > 其它

行链接和行迁移

2014-04-10 21:55 351 查看
CHAIN_CNT:虽然行链接和行迁移的概念不同,但在ORACLE里其实不太分这个,CHAIN_CNT是总的数量

PCTFREE:
PCTFREE:为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被用于update;即:

当使用一个block时,在达到pctfree之前,该block是一直可以被插入的,这个时候处在上升期。

create table TEST_1
(
OWNER          VARCHAR2(30),
OBJECT_NAME    VARCHAR2(128),
SUBOBJECT_NAME VARCHAR2(30),
OBJECT_ID      NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE    VARCHAR2(19),
CREATED        DATE,
LAST_DDL_TIME  DATE,
TIMESTAMP      VARCHAR2(19),
STATUS         VARCHAR2(7),
TEMPORARY      VARCHAR2(1),
GENERATED      VARCHAR2(1),
SECONDARY      VARCHAR2(1),
NAMESPACE      NUMBER,
EDITION_NAME   VARCHAR2(30)
)
tablespace USERS
pctfree 0
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);

SQL> select
owner              ,
table_name         ,
pct_free           ,
pct_used           ,
avg_row_len        ,
num_rows           ,
chain_cnt          ,
chain_cnt/num_rows
from
dba_tables
where
table_name='TEST_1'
order by
chain_cnt desc;  2    3    4    5    6    7    8    9   10   11   12   13   14   15

OWNER			       TABLE_NAME			PCT_FREE   PCT_USED AVG_ROW_LEN   NUM_ROWS  CHAIN_CNT CHAIN_CNT/NUM_ROWS
------------------------------ ------------------------------ ---------- ---------- ----------- ---------- ---------- ------------------
SCOTT			       TEST_1				       0

pct_free=0  稍微update一下就产生hang迁移

DECLARE
CURSOR cur IS
SELECT
a.ROWID from test_1 a ;
V_COUNTER NUMBER;
BEGIN
V_COUNTER := 0;
FOR row IN cur LOOP
UPDATE test_1
SET OBJECT_ID = 9999

,OBJECT_NAME='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
WHERE ROWID = row.ROWID ;
V_COUNTER := V_COUNTER + 1;
IF (V_COUNTER >= 10000) THEN
COMMIT;
V_COUNTER := 0;
END IF;
END LOOP;
COMMIT;
END;

批量update

SQL> analyze table TEST_1 compute statistics;

SQL> set linesize 200
SQL>  select
owner              ,
table_name         ,
pct_free           ,
pct_used           ,
avg_row_len        ,
num_rows           ,
chain_cnt          ,
chain_cnt/num_rows
from
dba_tables
where
table_name='TEST_1'
order by
chain_cnt desc;
2    3    4    5    6    7    8    9   10   11   12   13   14   15
OWNER			       TABLE_NAME			PCT_FREE   PCT_USED AVG_ROW_LEN   NUM_ROWS  CHAIN_CNT CHAIN_CNT/NUM_ROWS
------------------------------ ------------------------------ ---------- ---------- ----------- ---------- ---------- ------------------
SCOTT			       TEST_1				       0		    170    8886376    5059910	      .569400845
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: