如何消除行連結和行遷移
如果資料庫中存在行連結,行遷移,將會嚴重影響資料庫的效能。因此,我們應該想辦法消除行連結和行遷移。請按照下面的步驟消除行連結和行遷移。
STEP1:建立資料字典表CHAINED_ROWS
資料字典表CHAINED_ROWS用於接收ANALYZE...LIST CHAINED ROWS的資料,資料字典表CHAINED_ROWS由指令碼UTLCHAIN.SQL 或者指令碼UTLCHN1.SQL建立。
STEP2:對錶進行分析
ANALYZE TABLE student_infor LIST CHAINED ROWS;
執行這個命令將會把分析的結果寫入表CHAINED_ROWS中
STEP3:查出連結行或者遷移行
SELECT *
FROM CHAINED_ROWS
WHERE TABLE_NAME = 'student_infor';
OWNER_NAME TABLE_NAME CLUST... HEAD_ROWID TIMESTAMP
---------- ---------- -----... ------------------ ---------
TT student_infor ... AAAAluAAHAAAAA1AAA 04-MAR-2008
TT student_infor ... AAAAluAAHAAAAA1AAB 04-MAR-2008
TT student_infor ... AAAAluAAHAAAAA1AAC 04-MAR-2008
從資料字典表中CHAINED_ROWS查詢出連結行或者遷移行。該語句將列出表student_infor中存在的連結行或者遷移行。如果表中存在連結行或者遷移行,請執行下面的步驟;如果該語句沒有任何輸出,說明該表不存在連結行或者遷移行。
STEP4:建立中間表
CREATE TABLE int_student_infor
AS SELECT *
FROM student_infor
WHERE ROWID IN
(SELECT HEAD_ROWID
FROM CHAINED_ROWS
WHERE TABLE_NAME = 'student_infor');
中間表int_student_infor用於臨時存放連結行或者遷移行。該表的結構必須和表student_infor(本例中的表)的結構完全相同。執行完上面的命令,連結行或者遷移行已經被插入到中間表int_student_infor中。
STEP5:從已經存在的表student_infor中刪除連結行和遷移行
DELETE FROM student_infor
WHERE ROWID IN
(SELECT HEAD_ROWID
FROM CHAINED_ROWS
WHERE TABLE_NAME = 'student_infor');
STEP6:把中間表中的資料插入已經存在的表student_infor中
INSERT INTO student_infor
SELECT *
FROM int_student_infor;
這一步使原來的資料行被重新插入,從而消除行遷移。
STEP7:連結行的消除
如果CHAINED_ROWS中存在連結行,只能透過提高資料塊(Data Block)的大小,使一行資料能夠被容納在一個資料塊中。但是,如果列的型別是LONG ,或者是寬度比較大的CHAR,VARCHAR2,行連結將無法避免的。
資料塊大小(Data Block Size)的選擇
通常資料庫塊的大小都是8K,但是 對於不通的應用(OLTP,DSS)應該選擇不通的塊大小。資料庫塊大小的遵循如下的原則。
下面的情況可以選擇小尺寸資料塊:
行的寬度很小,並伴有大量的隨機訪問(Random Access)
減少塊競爭
注:選擇小尺寸資料塊會浪費大量的儲存空間,
下面的情況可以選擇大尺寸資料塊:
行的寬度很大,或者含有LOB欄位
應用中存在大量的順序讀(Sequential Access)
節省I/O,一次可以讀入更多的資料量
節省儲存空間
出自http://tech.it168.com/d/2008-06-13/200806131104507_2.shtml
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-622726/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 行遷移 & 行連結的檢測與消除Oracle
- 模擬Oracle行遷移和行連結Oracle
- [20190120]行連結遷移與dml.txt
- [20180402]行連結行遷移與ITL槽6.txt
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- 使用Mobilenet和Keras進行遷移學習!Keras遷移學習
- 遷移執行緒migration執行緒
- 1.5 使用nvicat和kettle進行全量遷移
- EF Core 小技巧:遷移已經應用到資料庫,如何進行遷移回退操作?資料庫
- 鐵威馬NAS如何進行線上陣列遷移陣列
- [20180327]行遷移與ITL浪費.txt
- 結合S/4HANA和雲遷移:企業如何受益
- 從 Oracle 到 TiDB,全鏈路資料遷移平臺核心能力和杭州銀行遷移實踐OracleTiDB
- [20230425]CBO cost與行遷移關係.txt
- 杉巖資料銀行Documentum遷移方案
- 使用Conda Pack進行環境打包遷移
- 連載一:Oracle遷移文件大全Oracle
- 連載二:Oracle遷移文章大全Oracle
- 【Redis 技術探索】「資料遷移實戰」手把手教你如何實現線上 + 離線模式進行遷移 Redis 資料實戰指南(scan模式遷移)Redis模式
- Kubernetes怎麼進行NFS動態儲存遷移NFS
- Terraform初探:遷移本地專案到Terraform Cloud執行ORMCloud
- 使用dbeaver 用csv 檔案進行資料遷移
- [20180730]exadata與行連結.txt
- Laravel 使用 sql 語句 和 sql 檔案 來建立執行資料庫遷移LaravelSQL資料庫
- “遷移策略+新容器執行時”應對有狀態應用的冷熱遷移挑戰
- 如何凍結excel指定行和列 表格怎麼同時凍結行和列的視窗Excel
- MySQL分割槽如何遷移MySql
- 執行遷移檔案報錯: Syntax error or access violation: 1166 ...Error
- 使用DistCp將Hadoop進行雲遷移時注意事項TCPHadoop
- 資料遷移(1)——通過資料泵表結構批量遷移
- 如何對Wormhole進行連線Worm
- CMake 進行多專案中dll的編譯和連結編譯
- gitlab的遷移和升級Gitlab
- 執行遷移檔案報錯 1071 Specified key was too long.
- Velero系列文章(四):使用Velero進行生產遷移實戰
- 使用Liquibase和Spring Boot進行資料庫遷移的一站式指南 - reflectoringUISpring Boot資料庫
- 將ABAP On-Premises系統連線到中央檢查系統以進行自定義程式碼遷移REM
- 如何用 Python 和深度遷移學習做文字分類?Python遷移學習文字分類
- 單執行緒-非阻塞-長連結執行緒