消除行鏈結

2021-07-02 04:14:35 字數 1192 閱讀 1124

行鏈結

當第一次插入行時,由於行太長而不能容納在乙個資料塊中時,就會發生行鏈結。在這種情況下,oracle會使用與該塊鏈結的一塊或多塊資料塊來容納該行的資料。行連線經常在插入比較大的行時才會發生,如包含long, long row, lob等型別的資料。在這些情況下行鏈結是不可避免的。

行遷移

當修改不是行鏈結的行時,當修改後的行長度大於修改前的行長度,並且該資料塊中的空閒空間已經比較小而不能完全容納該行的資料時,就會發生行遷移。在這種情況下,oracle會將整行的資料遷移到乙個新的資料塊上,而將該行原先的空間只放乙個指標,指向該行的新的位置,並且該行原先空間的剩餘空間不再被資料庫使用,這些剩餘的空間我們將其稱之為空洞,這就是產生表碎片的主要

少量的行鏈結不會對效能有很大的影響,乙個大致準則是如果表中超過15%的資料行是行鏈結的,那麼就要注意了

可以再move同時設定更高的pctfree

alter

table emp move picture 40

使用analyze命令檢視行鏈結情況

@?/rdbms/admin/utlchain.sql
上面的指令碼建立了名為chained_rows的表,現在可以執行analyze命令,填充該錶

analyze table emp list chain rows;
接下來查詢chain_rows表

select

count(*) from chained_rows where table_name=『emp』;

create

table temp_emp as

select * from emp where rowid in(select headword from chained_rows where table_name=『emp』);

delete

from emp where rowid in(select headword from chained_rows where table_name=『emp』);

insert

into emp select * from temp_emp;

行鏈結與行遷移

行遷移 行遷移一般產生在更新操作中,當更新操作導致行長增加了,而block的自由空間已經沒有,這時oracle把整行記錄遷移到乙個新的block中,並在原來block中存放新block的鏈結,行遷移產生。2.行鏈結與行遷移的檢測 1 建立chained rows表 利用oracle資料庫自身提供的指...

行鏈結與行遷移

行鏈結與行遷移這兩種情況下,表中的行可能對乙個資料塊來說太大了,在第一中情況下,當第一次插入的時候,行對資料塊來說太大了,這種情況下,oracle儲存資料在一系列的資料塊中 乙個或多個 行鏈結通常會在有大的行,就是行中包含long或long raw的列中,在這種情況下,行鏈結不可避免。在第二種情況下...

行遷移和行鏈結

oracle會將整行的資料遷移到乙個新的資料塊上,而將該行原先的空間只放乙個指標,指向該行的新的位置,並且該行原先空間的剩餘空間不再被資料庫使用,這些剩餘的空間我們將其稱之為空洞,這就是產生表碎片的主要原因,表碎片基本上也是不可避免的,但是我們可以將其降到乙個我們可以接受的程度。注意,即使發生了行遷...