行链接和行迁移案例
行鏈接和行遷移案例
兩則之間的區別:
???????????? 行鏈接是指一個行存儲在多個塊中的情況,因為一個該行的長度超過了一個塊的可用空間大小。(Insert)
???????????? 行遷移是指一個數據行不適合放入當前塊而被重新定位到另一個塊,但在原始塊中保留一個指針,原始塊中的指針是必需的,因為索引的rowid項仍然指向原始位置.(update)?????????
??????????? 行鏈接通常與行的長度和oracle數據庫塊中的大小有關,而行遷移通常是當一個更新操作的長度增加且又要保持該行在同一塊中,而該塊又缺少可用空間時產生的問題,oracle在決定行連接之前先試圖進行行遷移。
行連接
1、建立表
04:50:36 SQL> show user;
USER is "SCOTT"
04:50:39 SQL>? create table t_row_chaining (x char(2000), y char(2000), z char(2000), q char(2000));
Table created.
04:50:51 SQL> insert into t_row_chaining values('x','y','z','q');
1 row created.
04:51:05 SQL> commit;
Commit complete.
2、執行腳本,建立行鏈接和行遷移視圖
04:51:10 SQL> @?/rdbms/admin/utlchain.sql
Table created.
04:51:32 SQL> select * from tab;
TNAME????????????????????????? TABTYPE? CLUSTERID
------------------------------ ------- ----------
DEPT?????????????????????????? TABLE
EMP??????????????????????????? TABLE
BONUS????????????????????????? TABLE
SALGRADE?????????????????????? TABLE
EMP1?????????????????????????? TABLE
EMP5?????????????????????????? TABLE
SALES????????????????????????? TABLE
SYS_IOT_OVER_12021???????????? TABLE
SALES_INFO???????????????????? TABLE
DEPT_EMP_CLU?????????????????? CLUSTER
DEPARTMENT???????????????????? TABLE??????????? 1
EMPLOYEE?????????????????????? TABLE??????????? 2
TMP1?????????????????????????? TABLE
TMP2?????????????????????????? TABLE
T_ROW_CHAINING???????????????? TABLE
CHAINED_ROWS?????????????????? TABLE
16 rows selected.
04:51:40 SQL> desc CHAINED_ROWS
?Name??????????????????????????????????????????????????????????????????????????????? Null???? Type
?----------------------------------------------------------------------------------- -------- --------------------------------------------------------
?OWNER_NAME?????????????????????????????????????????????????????????????????????????????????? VARCHAR2(30)
?TABLE_NAME?????????????????????????????????????????????????????????????????????????????????? VARCHAR2(30)
?CLUSTER_NAME???????????????????????????????????????????????????????????????????????????????? VARCHAR2(30)
?PARTITION_NAME?????????????????????????????????????????????????????????????????????????????? VARCHAR2(30)
?SUBPARTITION_NAME??????????????????????????????????????????????????????????????????????????? VARCHAR2(30)
?HEAD_ROWID?????????????????????????????????????????????????????????????????????????????????? ROWID
?ANALYZE_TIMESTAMP???
?
?3、分析表的行鏈接信息???????????????????????????????????????????????????????????????????????? DATE
04:51:50 SQL> ANALYZE TABLE t_row_chaining LIST CHAINED ROWS;
Table analyzed.
04:52:09 SQL>
04:52:09 SQL> select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
OWNER_NAME???????????????????? TABLE_NAME???????????????????? HEAD_ROWID???????? ANALYZE_T
------------------------------ ------------------------------ ------------------ ---------
SCOTT????????????????????????? T_ROW_CHAINING???????????????? AAAC9KAAEAAAAB3AAA 25-MAR-12
-------由于插入的記錄長度超過了block的free space ,發生行鏈接
行遷移
1、建立表
04:53:06 SQL>? create table t_row_migrating (x varchar2(2000), y varchar2(2000), z varchar2(2000), q varchar2(2000));
Table created.
04:54:01 SQL> insert into t_row_migrating values ('x','y','z','q');
1 row created.
04:54:12 SQL> commit;
Commit complete.
04:54:20 SQL> delete chained_rows;
1 row deleted.
04:54:42 SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;
Table analyzed.
04:54:54 SQL>? select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
no rows selected
2、對表做update 實驗
04:55:03 SQL>? update t_row_migrating set (x,y,z,q)=(select * from t_row_chaining);
1 row updated.
04:57:17 SQL> commit;
Commit complete.
04:57:33 SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;
Table analyzed.
04:57:41 SQL>? select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
OWNER_NAME???????????????????? TABLE_NAME???????????????????? HEAD_ROWID???????? ANALYZE_T
------------------------------ ------------------------------ ------------------ ---------
SCOTT????????????????????????? T_ROW_MIGRATING??????????????? AAAC9MAAEAAAACGAAA 25-MAR-12
04:57:53 SQL>
no rows selected
04:55:03 SQL>
----------更新后的記錄變長,在block free space 無法存放,發生行遷移
本文轉自 客居天涯 51CTO博客,原文鏈接:http://blog.51cto.com/tiany/816715,如需轉載請自行聯系原作者
總結
- 上一篇: 事件绑定
- 下一篇: 软件开发中IT用语-日文和英文对照版