高水位線、行遷移行連結
高水位線
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 高水位線及如何有效的降低高水位線Oracle
- ORACLE 高水位線(HWM)Oracle
- oracle 回收高水位線Oracle
- Oracle 降低高水位線Oracle
- oracle回收高水位線Oracle
- oracle高水位線處理Oracle
- Oracle之降低高水位線Oracle
- oracle 高水位線詳解Oracle
- oracle的高水位線HWMOracle
- oracle的高水位線(HWM)Oracle
- 一、oracle 高水位線詳解Oracle
- 降低Oracle高水位線的方法Oracle
- delete與高水位線HWM回收delete
- Oracle的高水位線介紹Oracle
- 關於高水位線和deletedelete
- 行遷移和行連結
- Oracle 高水位線的一點研究Oracle
- oracle表碎片以及整理(高水位線)Oracle
- 清除行遷移和行連結
- ORACLE資料庫降低高水位線方法Oracle資料庫
- Oracle delete 高水位線處理問題Oracledelete
- Oracle高水位線(HWM)及效能優化Oracle優化
- 對Oracle高水位線的研究實踐Oracle
- Oracle表段中的高水位線HWMOracle
- 行遷移_行連結的介紹
- 如何消除行連結和行遷移
- Oracle高水位Oracle
- Oracle案例10——HWM(高水位線)效能優化Oracle優化
- 模擬Oracle行遷移和行連結Oracle
- pctused, pctfree, pctincrease , 行遷移 & 行連結
- 行遷移和行連結的檢測
- oracle回收高水位Oracle
- Oracle 高水位(HWM)Oracle
- 【備份恢復】行遷移與行連結
- 排除表中的行連結和行遷移
- 關於行連結和行遷移和消除
- Oracle 行遷移 & 行連結的檢測與消除Oracle
- oracle高水位問題Oracle