move和shrink的原理和redo的產生 ,利用rowid的含義實用block個數
前幾篇blog中整理了關於HWM和delete drop truncate的一些關係。補充一下HWM的另外一些東東。
首先減少HWM的方法上次提到了move和shrink
Alter table test09 move
透過move移動物件,但是move之後,需要重建索引,而且move的過程中會影響線上使用
Alter index indexName rebuild
Move原理是建立一個新表,所以需要兩倍的空間,然後將原表的資料插入新的表中,然後在刪除原來的表和資料,釋放空間。可以看出move的過程中資料行的rowid改變了,所以需要重構索引。
利用shrink線上收縮表內的HWM
Alter table test09 enable row movement
Alter table test09 shrink space
因為使用線上收縮空間shrink space是利用了一系列的dML操作來實現,主要是把HWM最後的塊放在HWM最前端。
需要說明的是shrink space需要在表空間自動段空間管理,所以system等表空間無法shrink。
降低HWM shrink需要行遷移:
剛開始不清楚shrink的具體細節,主要是移動資料所在的block,要改變資料行所在的block地址,所以肯定需要行遷移來完成。
閃回也需要行遷移
同樣在10g中閃回表也需要開啟行遷移,閃回也是利用回滾段進行一系列的dml操作,可能改變rowid地址,此時也需要行遷移來保證rowid不會改變。
Move需要重建index shrink不需要:
Alter table test09 shrink space;此時還對索引進行了維護。如果table的index數量較多,維護起來也需要消耗成本,在業務不繁忙時shrink space。
收縮表時一起收縮索引:
Alte table test09 shrink space cascade;
還有一些降低HWM的方法:
1 rename需要回收表,建立test09同名表然後insert進去
2 匯出,truncate,匯入
上述方法都是利用重建新段時HWM為0然後插入資料來回收的,適用性有限。
檢視資料行實際使用了多少資料塊,eygle的提供的sql:
Select count(distinct(substr(rowid,1,15))) from test04
來分析下rowid的東東:rowid由4部分組成。
資料物件編號 檔案編號 塊編號 行編號
OOOOOO FFF BBBBBB RRR
所以rowid的前15位就可以唯一決定資料行是屬於某個資料塊,上述sql就可以檢視錶中資料行實際佔用的資料塊個數。
測試下shrink space生成的redo
SQL> select name,value from v$statname a,v$mystat b
2 where a.statistic#=b.statistic# and a.name='redo size';
NAME VALUE
---------------------------------------------------------------- ----------
redo size 42568
SQL> alter table test09 shrink space;
Table altered
SQL>
SQL> select name,value from v$statname a,v$mystat b
2 where a.statistic#=b.statistic# and a.name='redo size';
NAME VALUE
---------------------------------------------------------------- ----------
redo size 150236
在測試過程中發現
alter table test09 enable row movement
analyze table test09 compute statistics
開啟行遷移和分析表也會產生少量redo。
這兩天開始接觸了ASM和RAC,本本買了效能不錯裝個虛擬機器,然後裝下linux系統來實現下rac和ASM。有心得了跟大家分享!要學習linux了!
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25362835/viewspace-1055213/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle rowid 的含義Oracle
- alter table move 和 alter table shrink space的區別
- ALTER TABLE MOVE和SHRINK SPACE區別
- 線上非rman備份產生和普通操作產生的redo大小比較
- Oracle move和shrink釋放高水位空間Oracle
- table move 與 shrink 的區別
- Redo wastage產生的原因AST
- 深入研究Block捕獲外部變數和__block實現原理BloC變數
- 應用伺服器的含義和用途伺服器
- 應用伺服器的含義和作用伺服器
- innobackupex中--slave-info引數的含義和適用場景
- C++中&和*的含義C++
- mysql 下的提示和含義MySql
- MySQL 5.6修改REDO日誌的大小和個數MySql
- SMART原則的定義和含義
- 插入相同的資料量普通表和臨時表產生的redo對比
- alter table move 與shrink space的區別
- alter table move跟shrink space的區別
- ROWID的含義與塊地址rdba深入分析
- php引數3個點的含義PHP
- 轉roger大師_計算sql語句產生的redo和undo大小SQL
- 類圖各個箭頭和符號的含義符號
- async 函式的含義和用法函式
- Thunk 函式的含義和用法函式
- alter table move跟shrink space的區別(轉)
- recursive calls ,db block gets , consistent gets的含義BloC
- 生產裝置點巡檢的工作原理和使用流程
- LMT更新file header bitmap不產生redo和undo ?Header
- 數字簽名的原理和應用
- 用C語言的rand()和srand()產生偽隨機數的方法總結C語言隨機
- mysql中的編碼各個變數的含義MySql變數
- mysql explain用法和結果的含義MySqlAI
- co 函式庫的含義和用法函式
- Redo的原理
- 插曲:Kafka的生產者案例和消費者原理解析Kafka
- oracle常用包之dbms_rowid oracle rowid含義分析Oracle
- SAP R/3系統的R和3分別代表什麼含義,負載均衡的實現原理負載
- oracle的redo和undoOracle