欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle提高空間使用率的方法小結

 更新時間:2024年02月21日 09:10:23   作者:Dnui_King  
這篇文章給大家詳細介紹了Oracle 如何提高空間使用率,文中給大家總結了八種提高Oracle空間使用率的方法,并通過圖文講解的非常詳細,需要的朋友可以參考下

一,行遷移和行鏈接

oracle盡量保證一行的數據能夠放在同一個數據塊當中,有的時候行會發(fā)生行遷移和行鏈接。

行鏈接 :有一個列的字段是大對象(long,longlong)一行占的數據一整個塊都放不下,則oracle會把這行的數據分為兩部分或多部份,存放到不同的數據塊,這種現象叫做行鏈接。

行鏈接的缺陷顯而易見,原本我只需要找到一個塊就能找到所有數據,現在可能讀更多的塊才能夠找到數據,增加了io。

行遷移:原本的行在一個數據塊中,如果我們在這一行進行了update操作,使得這一行的尺寸變大了

oracle在默認情況下,如果這一行發(fā)生了增長,所需的多余空間會從這個塊的可用空間里面去獲取,這是最好的情況。但是如果這個塊可用的空間用滿了,則會發(fā)生行遷移。oracle會把這一行的數據遷移到一個新的數據塊,但是在原來的塊中會保留它的row id。

缺陷也是如此,原來只需要一次io,現在需要兩次io,降低了性能。

二,自動段空間管理(Auto Segment Space Management)

簡稱ASSM

段是oracle管理空間的一種機制

如果表空間是自動管理的,則會用到位圖管理機制。

BMB(bitmap blocks) 在一個段中會有很多個位圖塊,在位圖中記錄了對應塊的信息,如(剩余空間,可用空間,這個機制使得管理更加靈活)

總結一下就是:我們給段分配很多數據塊,oracle會拿出一些數據塊來記錄這些數據塊的使用情況,這些數據塊叫做:BMB(位圖塊)。

三,oracle表空間分配類型

主要分為兩種方式:1.uniform(固定分配)。2.autoallocate(自動分配)

示例:

自動分配:

固定分配:

四,使用 unusable索引

如果把一個索引變成unusable,oracle會把這個索引段刪掉,但是保留索引的定義,節(jié)省了空間,以后需要時可以用rebuild重建索引。

五,使用臨時表

臨時表只有在事務和會話過程中存在數據。

如果我們以后為了測試。表中的數據有沒有無所謂,我們可以基于有數據的表建一個臨時表,我們在臨時表上面進行測試,退出會話時oracle會把這個臨時表刪掉。

臨時表有兩種類型:

Global:建的臨時表的定義所有的會話都可見,內容只有創(chuàng)建臨時表的會話看得見,其它會話不可見

Private:只有創(chuàng)建臨時表的會話可見,其它會話不可見。

臨時表的段只有在進行第一次insert操作時才會分配,

創(chuàng)建全局臨時表:

插入數據后當前會話可見,其它會話不可見。

on commit delete 關鍵字:當事務提交,臨時表數據全部刪除。

創(chuàng)建私有臨時表:

注意:私有臨時表 ,表名必須以  ORA$PTT_開頭。

私有表前綴由private_temp_table_prefix 指定,可以自己指定

六,表壓縮

1.Basic table compression(基礎壓縮) 壓縮率:10倍

2.Advanced row compression(高級行壓縮) 壓縮率:2-4倍

壓縮原理:

Basic table compression 當可用空間 是0 時觸發(fā)壓縮。

Advanced row compression 當可用空間 剩余10% 觸發(fā)壓縮

例如:數據塊可用空間只剩下百分十10,觸發(fā)壓縮,把原來塊的數據進行壓縮,騰出來一部分空間來存放新的數據,再進行insert操作后,可用空間又只剩下百分十10,再一次進行壓縮。

總結:oracle的壓縮原理是逐步壓縮。

basic壓縮:

空間大小比較:

注意如果使用 basic壓縮方式   使用insert方式進行插入則不會進行壓縮。

高級行壓縮:

不壓縮,插入數據十次:

 insert into EMP_NOCMP select * from emp_nocmp; (重復 10 次)

高級行壓縮,插入數據十次:

insert into EMP_CMP select * from emp_cmp; (重復 10 次)

所占空間對比:

比較清晰,高級行壓縮所占空間明顯減少。

表壓縮缺陷:

打開計時器,對表進行update操作,比對壓縮表和非壓縮表效率:

可見非壓縮表 update性能明顯高于壓縮表。

七,通過 shringking 操作回收空間

只能對段空間管理方式為ASSM方式的表空間使用。

如果塊中發(fā)生大量的delete操作,導致塊中的行不緊湊,浪費了大量塊空間,我們可以通過shringking 操作回收空間,降低高水位線,從而高水位線以上的塊就會被回收。

示例:創(chuàng)建一個表,表空間段空間管理為自動管理,即ASSM,插入十五次數據。

insert into emp_shr select * from emp_shr;(執(zhí)行15次)

查看數據字典,該表占用空間情況:

進行刪除操作,導致出現空閑空間。

讓表允許移動行,否則無法使用shrink:

對表進行shrink整理,查看數據字典。

發(fā)現此時空間并沒有被釋放,原因是我們的高水位線并沒有變低,只是把行變的緊湊了,沒有塊被oracle自動回收。

改變高水位線,讓高水位線以上的空閑塊被oracle回收。

此時,查看數據字典。

八,可恢復空間分配。

Oracle 數據庫服務器提供了一種暫停和稍后恢復執(zhí)行的方法空間分配失敗時的大型數據庫 操作。

簡而言之:假如我們的表空間大小不夠了,正常來說會直接報錯,假如我們執(zhí)行了兩個小時的inert操作,到最后因為表空間大小不足而導致操作失敗就很崩潰,所以oracle允許我們有補救措施。

resumable_timeout = 300;

假如我們的操作因為表空間大小不足,設置這個參數后不會立即報錯,而是會把這個事務掛起,在300s中,如果我們有補救措施,如resize表空間,增加了數據文件,使得表空間足夠進行接下來的操作,該操作將繼續(xù)進行。

如果300s之內沒有補救,才會報錯,該操作失敗。

以上就是Oracle提高空間使用率的方法小結的詳細內容,更多關于Oracle提高空間使用率的資料請關注腳本之家其它相關文章!

相關文章

最新評論