高水位線、行遷移行連結
高水位線
HWM是一個標記,用來說明已經有多少資料塊分配給這個segment。DBA_TABLES.BLOCKS即HWM。HWM通常增長的幅度為一次5個資料塊(11g開始預設一次性分配1M的block大小了,見create table storged的NEXT引數),原則上HWM只會增大,不會縮小,即使將表中的資料全部刪除,HWM還是為原值,由於這個特點,使HWM很象一個水庫的歷史最高水位,這也就是HWM的原始含義,當然不能說一個水庫沒水了,就說該水庫的歷史最高水位為0。但是如果我們在表上使用了truncate命令,則該表的HWM會被重新置為0。
a) 全表掃描通常要讀出直到HWM標記的所有的屬於該表資料庫塊,即使該表中沒有任何資料。
b) 即使HWM以下有空閒的資料庫塊,鍵入在插入資料時使用了append關鍵字,則在插入時使用HWM以上的資料塊,此時HWM會自動增大。如果插入資料時沒有append關鍵字,則插入時會在HWM以內找空閒的塊,這樣HWM就不會增大
高水位線內的塊分4種,一種是滿了的塊,一種沒滿的塊,一種是extents擴充套件的空塊,一種是刪除資料後的空塊
DBA_SEGMENTS.BLOCKS=DBA_TABLES.BLOCKS+ DBA_TABLES.EMPTY_BLOCKS
DBA_TABLES.BLOCKS代表該表中曾經使用過得資料庫塊的數目,即高水位線內的塊。 DBA_TABLES.EMPTY_BLOCKS 代表分配給該表,但是在高水位線以上的資料庫塊。(This column is populated only if you collect statistics on the table using the DBMS_STATS package)因為每一次對錶進行擴充都是以extent為單位的,所以會出現空資料塊。
DBA_SEGMENTS.BLOCKS=DBA_TABLES.BLOCKS+ DBA_TABLES.EMPTY_BLOCKS
Delete操作的時候,dba_segments.Blocks、 user\dba_tables.Blocks、 user\dba_tables.empty_blocks三者都不會減小
insert /*+ append */ into XXX values(XXX);
使用append提示進行insert時系統不去查詢freelist連結串列中的空閒塊,直接在高水標記位以上插入資料,因此速度比較快。但若是對於經常delete的表,浪費磁碟空間太大。
行遷移(產生原因:update)
當某一行發生update操作時導致記錄行長度有增加引發當前的資料不能在容納在當前塊,就會產生行遷移。行遷移時rowid不會改變,就是整行資料將會移動到新的塊上,舊的塊僅僅保留的是指向新塊的地址資訊,發生行遷移會對效能產生影響,因為讀這條記錄會讀兩個BLOCK。
行遷移和索引分裂的一些異同,可以互相理解
行連結(產生原因:insert)
當一行資料太大而不能在一個單資料塊容納時,行連結由此產生。舉例來說,當你使用了4kb的Oracle 資料塊大小,而你需要插入一行資料是8k, Oracle則需要使用3個資料塊分成片來儲存。因此,引起行連結的情形通常是,表上行記錄的大小超出了資料庫Oracle塊的大小。行連線同樣會影響效能,因為讀一條記錄至少會讀兩個BLOCK。
表上使用了LONG 或 LONG RAW資料型別的時候容易產生行連結。其次表上多於255列時Oracle會將這些過寬的表分片而產生行連結
檢視行遷移或行連結的表
select * From dba_tables where nvl(chain_cnt,0)<>0
chain_cnt :Number of rows in the table that are chained from one data block to another or that have migrated to a new block, requiring a link to preserve the old rowid. This column is updated only after you analyze the table.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2122477/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE 高水位線(HWM)Oracle
- oracle高水位線處理Oracle
- 一、oracle 高水位線詳解Oracle
- ORACLE資料庫降低高水位線方法Oracle資料庫
- 模擬Oracle行遷移和行連結Oracle
- Oracle案例10——HWM(高水位線)效能優化Oracle優化
- [20190120]行連結遷移與dml.txt
- Oracle 行遷移 & 行連結的檢測與消除Oracle
- 聊聊flink水位線
- [20180402]行連結行遷移與ITL槽6.txt
- oracle 高水位分析處理Oracle
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- 關於高水位的知識
- flink 中的水位線(Watermark)
- Ooracle 高水位線(high water mask)在不同段管理模式下的推進Oracle模式
- ORACLE 如何診斷高水位爭用(enq: HW – contention)OracleENQ
- Oracle 高水位查詢和處理方法彙總Oracle
- 線性表——連結串列
- mysql活躍連線打高的案例MySql
- 線性結構 陣列與連結串列陣列
- 資料結構-線性表、連結串列資料結構
- Vue 高德地圖 API Loca 如何使用 連線線圖層、脈衝連線圖層Vue地圖API
- Redis Cluster高可用叢集線上遷移操作記錄Redis
- 軟連線、硬連結 和 i節點(inode)
- ssh遠端連結(簡易連線linux命令)Linux
- 前端資料結構--線性結構-連結串列前端資料結構
- 如何對Wormhole進行連線Worm
- 去掉超連結的下劃線
- 去掉超連結下方的橫線
- C語言線性連結串列C語言
- 【資料結構】線性表-單連結串列資料結構
- Oracle資料庫管理——表資料庫高水位及shrink操作Oracle資料庫
- [20180730]exadata與行連結.txt
- 內連線、左連線、右連線
- 行連線的處理方式指引
- Apache Spark SQL的高階Join連線技術ApacheSparkSQL
- Smack 開發總結(一)管理連線Mac
- 百勝現場連結線上火熱
- FileZilla 連結伺服器提示 20 秒連線超時伺服器