行遷移和行連結
row migration和row chaining
oracle block由三個部分組成,header,free space,data
資料塊頭head:主要包含資料塊地址的一些基本資訊和段的型別,以及表和包含有資料的實際行的地址。
自由空間free space:是指可以為以後的更新和插入操作分配的空間,其大小受pctfree和pctused兩個引數影響。
實際資料data:是指在行記憶體儲的實際資料。
當建立或者更改任何表和索引的時候,oracle在空間控制方面使用兩個儲存引數:
pctfree:為將來更新已經存在的資料預留空間的百分比。
pctused:用於為插入一新行資料的最小空間的百分比。這個值決定了塊的可用狀態。可用的塊是可以執行插入的塊,不可用狀態的塊只能執行行刪除和修改,可用狀態的塊被放在freelist中。
當表中的資料不能在一個資料block中放入的時候,就會發生行連結和行遷移。
row migration:當一行記錄初始可以儲存在一個block中,由於更新導致行長增加了,而block的自由空間已經完全滿了,就會產生行遷移。由於表的pctfree引數設定太小,而導致沒有空間容納更新的記錄,可以調整和控制清除的。
row chaining:第一次插入資料是,如果一個block不能存放一樣記錄,oracle將使用這個段中其他block儲存,行連結發生在比較大的行上,例如行上有long、long raw、lob等資料型別的欄位,這種情況行連結不可避免的產生。主要由於資料庫的db_block_size不夠大,只有增大db_block_size沒有任何辦法。一般在建庫初期設定好,否則沒有太多可以調整的地方。
監測方法:
利用oracle資料庫自身提供的指令碼utlchain.sql生成chained_rows表,然後利用
analyze table table_name list chained rows into chained_rows命令逐個分析表,將分析結果存入chained_rows中。
清除方法:
對於行遷移一般分兩步,控制行遷移的增長,使其不再增多;清除以前存在的行遷移。
確定pctfree引數的大小,有兩種方法:
1、利用公式來設定pctfree的大小。
analyze table table_name estimate statistics命令來分析要修改pctfree的表,然後檢視user_tables中的avg_row_len列值,avg_row_len1,然後大量對錶操作,執行上面的命令得到avg_row_len2,然後用公式:
100*(avg_row_len2-avg_row_len1)/(avg_row_len2-avg_row_len1+原始avg_row_len)
2、差分微調的方法,一點一點增大,每次不要超過5%,然後使用analyze table table_name list chained rows into chained_rows命令分析每次所有的情況,不要調的過大,一般在40%以下就可以了。
oracle block由三個部分組成,header,free space,data
資料塊頭head:主要包含資料塊地址的一些基本資訊和段的型別,以及表和包含有資料的實際行的地址。
自由空間free space:是指可以為以後的更新和插入操作分配的空間,其大小受pctfree和pctused兩個引數影響。
實際資料data:是指在行記憶體儲的實際資料。
當建立或者更改任何表和索引的時候,oracle在空間控制方面使用兩個儲存引數:
pctfree:為將來更新已經存在的資料預留空間的百分比。
pctused:用於為插入一新行資料的最小空間的百分比。這個值決定了塊的可用狀態。可用的塊是可以執行插入的塊,不可用狀態的塊只能執行行刪除和修改,可用狀態的塊被放在freelist中。
當表中的資料不能在一個資料block中放入的時候,就會發生行連結和行遷移。
row migration:當一行記錄初始可以儲存在一個block中,由於更新導致行長增加了,而block的自由空間已經完全滿了,就會產生行遷移。由於表的pctfree引數設定太小,而導致沒有空間容納更新的記錄,可以調整和控制清除的。
row chaining:第一次插入資料是,如果一個block不能存放一樣記錄,oracle將使用這個段中其他block儲存,行連結發生在比較大的行上,例如行上有long、long raw、lob等資料型別的欄位,這種情況行連結不可避免的產生。主要由於資料庫的db_block_size不夠大,只有增大db_block_size沒有任何辦法。一般在建庫初期設定好,否則沒有太多可以調整的地方。
監測方法:
利用oracle資料庫自身提供的指令碼utlchain.sql生成chained_rows表,然後利用
analyze table table_name list chained rows into chained_rows命令逐個分析表,將分析結果存入chained_rows中。
清除方法:
對於行遷移一般分兩步,控制行遷移的增長,使其不再增多;清除以前存在的行遷移。
確定pctfree引數的大小,有兩種方法:
1、利用公式來設定pctfree的大小。
analyze table table_name estimate statistics命令來分析要修改pctfree的表,然後檢視user_tables中的avg_row_len列值,avg_row_len1,然後大量對錶操作,執行上面的命令得到avg_row_len2,然後用公式:
100*(avg_row_len2-avg_row_len1)/(avg_row_len2-avg_row_len1+原始avg_row_len)
2、差分微調的方法,一點一點增大,每次不要超過5%,然後使用analyze table table_name list chained rows into chained_rows命令分析每次所有的情況,不要調的過大,一般在40%以下就可以了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8570952/viewspace-713655/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 模擬Oracle行遷移和行連結Oracle
- Oracle 行遷移 & 行連結的檢測與消除Oracle
- [20190120]行連結遷移與dml.txt
- [20180402]行連結行遷移與ITL槽6.txt
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- 使用Mobilenet和Keras進行遷移學習!Keras遷移學習
- 遷移執行緒migration執行緒
- 1.5 使用nvicat和kettle進行全量遷移
- [20180327]行遷移與ITL浪費.txt
- 從 Oracle 到 TiDB,全鏈路資料遷移平臺核心能力和杭州銀行遷移實踐OracleTiDB
- [20230425]CBO cost與行遷移關係.txt
- 杉巖資料銀行Documentum遷移方案
- 使用Conda Pack進行環境打包遷移
- EF Core 小技巧:遷移已經應用到資料庫,如何進行遷移回退操作?資料庫
- 連載一:Oracle遷移文件大全Oracle
- 連載二:Oracle遷移文章大全Oracle
- Kubernetes怎麼進行NFS動態儲存遷移NFS
- Terraform初探:遷移本地專案到Terraform Cloud執行ORMCloud
- 使用dbeaver 用csv 檔案進行資料遷移
- [20180730]exadata與行連結.txt
- Laravel 使用 sql 語句 和 sql 檔案 來建立執行資料庫遷移LaravelSQL資料庫
- “遷移策略+新容器執行時”應對有狀態應用的冷熱遷移挑戰
- 執行遷移檔案報錯: Syntax error or access violation: 1166 ...Error
- 使用DistCp將Hadoop進行雲遷移時注意事項TCPHadoop
- 鐵威馬NAS如何進行線上陣列遷移陣列
- 資料遷移(1)——通過資料泵表結構批量遷移
- CMake 進行多專案中dll的編譯和連結編譯
- gitlab的遷移和升級Gitlab
- 結合S/4HANA和雲遷移:企業如何受益
- 執行遷移檔案報錯 1071 Specified key was too long.
- Velero系列文章(四):使用Velero進行生產遷移實戰
- 使用Liquibase和Spring Boot進行資料庫遷移的一站式指南 - reflectoringUISpring Boot資料庫
- 將ABAP On-Premises系統連線到中央檢查系統以進行自定義程式碼遷移REM
- 單執行緒-非阻塞-長連結執行緒
- GCC 使用庫檔名進行連結GC
- TensorFlow Hub--用一行程式碼完成遷移學習行程遷移學習
- QEMU-KVM中的多執行緒壓縮遷移技術執行緒
- 網站進行伺服器遷移前應做好哪些準備?網站伺服器
- 【Redis 技術探索】「資料遷移實戰」手把手教你如何實現線上 + 離線模式進行遷移 Redis 資料實戰指南(scan模式遷移)Redis模式