日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle数据block默认是,oracleBLOCK(数据块)

發布時間:2024/10/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle数据block默认是,oracleBLOCK(数据块) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

11.4 BLOCK(數據塊)

11.4.1 BLOCK(數據塊)的特點:

BLOCK是Oracle進行存儲空間IO操作的最小單位,BLOCK的管理方法是區的管理和段管理的具體體現:

1、自動管理方式 如創建表空間時區為本地管理方式,并且將段的存儲空間方式設置為AUTO(即ASSM),該表空間的所有塊均采用位圖自動管理方式。這是系統默認的。

2、空閑列表方式(MSSM) 引入FREELIST概念,以及PCTFREE和PCTUSED兩個參數控制可用存儲區的大小,避免行遷移現象的發生。這兩個參數可在創建表空間時設置,也可在建立數據庫的模式對象(表,索引)中設置。模式對象中設置的優先級比表空間的要高。就是說;如表和索引中沒有設置,則按表空間的設置,如表空間也沒設置,則按自動管理方式管理塊。

data block :oracle 11g 標準塊:8k,支持2-32k,有block header 、free space 、data 組成

數據塊頭部:

ITL:事務槽,可以有多個ITL以支持并發事務,每當一個事務要更新數據塊里的數據時,必須先得到一個ITL槽,然后將當前事務ID,事務所用的undo數據塊地址,SCN號,當前事務是否提交等信息寫到ITL槽里。

initrans:初始化事務槽的個數,表默認1, index 默認為2;

maxtrans: 最大的事務槽個數 (默認255)

ROW DIR: 行目錄, 指向空閑行起始和結束的偏移量。

考點:使塊頭增加的可能情況是,row entries增加,增加更多的ITL空間。

空閑列表方式的數據塊的管理:

freelist:空閑列表中登記了可以插入數據的可用塊,位置在段頭,插入表行數據時首先查找該列表。

pctfree:用來為一個塊保留的空間百分比,以防止在今后的更新操作中增加一列或多列值的長度。達到該值,從freelist清除該塊信息。

pctused:一個塊的使用水位的百分比,這個水位將使該塊返回到可用列表中去等待更多的插入操作。達到該值,該塊信息加入freelist

。這個參數在ASSM下不使用。

行鏈接:指一行存儲在多個塊中的情況,這是因為該行的長度超過了一個塊的可用空間大小,即行鏈接是跨越多塊的行。

行遷移:指一個數據行由于update語句導致當前塊被重新定位到另一個塊(那里有充足的空間)中,但在原始塊中保留一個指針的情形(PPT-II-470)。原始塊中的指針是必需的,因為索引的ROWID項仍然指向原始位置。行遷移是update語句當pctfree空間不足時引起的,它與insert和delete語句無關(考點)。

如何能夠知道發生了行鏈接或行遷移?

查看dba_tables的AVG_ROW_LEN列和CHAIN_CNT列,當CHAIN_CNT有值時,看AVG_ROW_LEN,它表示行的平均長度(byte),如果AVG_ROW_LEN塊大小,那么是鏈接行。

查看發生遷移或連接的行,使用analyze table xx list chained rows; 但命令需要將結果插入chained_rows表,創建此表用utlchained.sql或utlchn1.sql腳本。參見sql referenve中的analyze命令。

SQL> create table t1 (c1 varchar2(20));

SQL>

begin

for i in 1..1000 loop

insert into t1 values(null);

end loop;

end;

/

分析t1表確定無行遷移

SQL> analyze table t1 compute statistics;

SQL> select pct_free,pct_used,avg_row_len,chain_cnt from user_tables where table_name='T1';

AVG_ROW_LEN,它表示行的平均長度(byte)

填充這些空列,再分析t1,有了行遷移

SQL> update t1 set c1='timran is my drt';

SQL> analyze table t1 compute statistics;

SQL> select pct_free,pct_used,avg_row_len,chain_cnt from user_tables where table_name='T1';

move表,再分析t1,行遷移消失。 思考:段重組對于行鏈接有效嗎?

SQL> alter table t1 move;

SQL> analyze table t1 compute statistics;

SQL> select pct_free,pct_used,avg_row_len,chain_cnt,blocks from user_tables where table_name='T1';

考點:對于大部分目的而言,應該用DBMS_STATS包中的過程分析表,但要查看行鏈接或行遷移信息,只能通過ANALYZE命令檢測。

11.4.2 表和數據塊(block)的關系

1)什么是高水位線?

高水位線(high-water mark,HWM)

在數據庫中,如果把表想象成從左到右依次排開的一系列塊,高水位線就是曾經包含了數據的最右邊的塊。原則上HWM只會增大, 即使將表中的數據全部刪除,HWM也不會降低。

HWM不是好事,使用全表掃描時通常要讀出HWM以下的所有數據塊(盡管該表中可能僅有少量數據),這將白白耗費大量IO資源。

2)兩個解決辦法可降低HWM:

2.1)移動表,move方法, 將表從一個表空間移動到另一個表空間(也可以在本表空間內move)。

語法:alter table t1 move [tablespace users];

優點:可以清除數據塊中的碎片,降低高水位線。

缺點:move需要額外(一倍)的空間。

move過程中會鎖表,其他用戶不能在該表上做DML或DDL操作。

move之后,相關索引都不可用了,表上的索引需要重建(考點)。

2.2)收縮表,shrink 也叫段重組,表收縮的底層實現的是通過匹配的INSERT和DELETE操作。

它分兩個不同的階段:壓縮階段和降低HWM階段。(PPT-II-491)

語法:alter table t2 shrink space [cascade][compact];

兩個前提:1)表所在的表空間段管理是ASSM方式,因為位圖方法才記錄有關塊實際的滿度信息(考點)。2)表上啟用了row movement。

你發出alter table t2 shrink space compact; 那么只完成了第一階段。這是壓縮階段。在業務高峰時可以先完成第一階段 delete insert

高峰過后,再次alter table t2 shrink space; 因壓縮階段工作大部分已完成,將很快進入第二階段,DML操作會有短暫的鎖等待發生。

測試:

create tablespace timran datafile '/u01/oradata/timran11g/timran01.dbf' size 100m;

create table scott.t2 tablespace timran as select * from dba_objects;

scott:

select max(rownum) from t2;

select table_name, blocks, empty_blocks, num_rows from user_tables where table_name='T2';

analyze table t2 compute statistics;

delete t2 where rownum<=40000;

commit;

analyze table t2 compute statistics for table;

select table_name, blocks, num_rows from user_tables where table_name='T2';

這時候,num_rows已經減掉了40000條, 但 blocks 并沒有減少, 說明HWM沒有下降。

做shrink

alter table t2 enable row movement; //使能行移動

進行第一步----壓縮階段

alter table t2 shrink space compact;

analyze table t2 compute statistics for table;

select table_name, blocks, num_rows from user_tables where table_name='T2';

//HWM不會降低。

進行第二步----降低HWM階段

alter table t2 shrink space;

analyze table t2 compute statistics for table;

select table_name, blocks, num_rows from user_tables where table_name='T2';

//HWM已經降低。

考點:

1,表收縮操作生成undo和redo數據,索引可以得到維護。

2,收縮分為兩個階段 第一階段是壓縮階段,第二階段是降低HWM階段。SHRINK不占用額外的空間。

3,可以單獨完成第一階段,即SHRINK SPACE COMPACT 此階段不降低HWM,DML操作幾乎不受影響。

4,可以級聯相關的段一起收縮,即SHRINK SPACE CASCADE。

5,段必須ASSM管理方式,且使能行移動,否則不能收縮,如果不滿足這兩個前提,MOVE就是重組表的唯一方式。

6,不能收縮MSSM管理,或有LONG列表或是有refresh_on_commit物化視圖的表。

來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/31485142/viewspace-2151295/,如需轉載,請注明出處,否則將追究法律責任。

總結

以上是生活随笔為你收集整理的oracle数据block默认是,oracleBLOCK(数据块)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。