重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
Oracle
十余年的東安網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網營銷的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整東安建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯從事“東安網站設計”,“東安網站推廣”以來,每個客戶項目都認真落實執行。
中壓縮數據節省空間和提高速度
添加時間
:2007-4-22
使用表壓縮來節省空間并提高查詢性能
很多決策支持系統通常都涉及到存儲于幾個特大表中的大量數據。隨著這些系統的發展,對磁盤空間
的需求也在快速增長。在當今的環境下,存儲著數百
TB
(太字節)的數據倉庫已經變得越來越普遍。
為了幫助處理磁盤容量問題,
在
Oracle9i
第
2
版中引入了表壓縮特性,
它可以極大地減少數據庫表所
需要的磁盤空間數量,并在某些情況下提高查詢性能。
在本文中,我將向你說明表壓縮是如何工作的,以及在構建和管理數據庫時如何配置表空間。我還將
基于一些示例測試結構討論一些性能問題,以幫助你了解使用表壓縮預計能獲得多大好處。
表壓縮是如何工作的
在
Orcle9i
第
2
版中,表壓縮特性通過刪除在數據庫表中發現的重復數據值來節省空間。壓縮是在數
據庫的數據塊級別上進行的。當確定一個表要被壓縮后,數據庫便在每一個數據庫數據塊中保留空間,以
便儲存在該數據塊中的多個位置上出現的數據的單一拷貝。這一被保留的空間被稱作符號表(
symbol
table
)
。被標識為要進行壓縮的數據只存儲在該符號表中,而不是在數據庫行本身內。當在一個數據庫行
中出現被標識為要壓縮的數據時,該行在該符號表中存儲一個指向相關數據的指針,而不是數據本身。節
約空間是通過刪除表中數據值的冗余拷貝而實現的。
對于用戶或應用程序開發人員來說,表壓縮的效果是透明的。無論表是否被壓縮,開發人員訪問表的
方式都是相同的,
所以當你決定壓縮一個表時,
不需要修改
SQL
查詢。
表壓縮的設置通常由數據庫管理人
員或設計人員進行配置,幾乎不需要開發人員或用戶參與。
如何創建一個壓縮的表
要創建一個壓縮的表,可在
CREATE TABLE
語句中使用
COMPRESS
關鍵字。
COMPRESS
關鍵字
指示
Oracle
數據庫盡可能以壓縮的格式存儲該表中的行。
下面是
CREATE TABLE COMPRESS
語句的一
個實例:
CREATE
TABLE
SALES_HISTORY_COMP
(
PART_ID
VARCHAR2(50)
NOT
NULL,
STORE_ID
VARCHAR2(50) NOT NULL,
SALE_DATE
DATE NOT NULL,
QUANTITY
NUMBER(10,2) NOT NULL
)
COMPRESS
;
或者,你可以用
ALTER TABLE
語句來修改已有表的壓縮屬性,如下所示:
ALTER TABLE SALES_HISTORY_COMP COMPRESS;
為了確定是否已經利用
COMPRESS
對一個表進行了定義,可查詢
USER_TABLES
數據字典視圖并
查看
COMPRESSION
列,如下面的例子所示:
SELECT TABLE_NAME, COMPRESSION FROM USER_TABLES;
TABLE_NAME
COMPRESSION
------------------
-----------
SALES_HISTORY
DISABLED
SALES_HISTORY_COMP
ENABLED
Create table me(shengao int32,tizhong
int ,zhangxiang verchar2(60)) compress;
Select table_name, compression from user_tables;
Select tablespace_name,def_tab_compression from user_tablespaces;
也可以在表空間級別上定義
COMPRESS
屬性,
既可以在生成時利用
CREATE TABLESPACE
來定義,
也可以稍后時間利用
ALTER TABLESPACE
來定義。與其他存儲參數類似,
COMPRESS
屬性也具有一些
繼承特性。當在一個表空間中創建一個表時,它從該表空間繼承
COMPRESS
屬性。為了確定是否已經利
用
COMPRESS
對一個表空間進行了定義,可查詢
USER_TABLESPACES
數據字典視圖并查看
DEF_TAB_COMPRESSION
列,如下面的例子所示:
SELECT
TABLESPACE_NAME,
DEF_TAB_COMPRESSION
FROM
DBA_TABLESPACES;
TABLESPACE_NAME
DEF_TAB_COMPRESSION
---------------
-------------------
DATA_TS_01
DISABLED
INDEX_TS_01
DISABLED
正如你所預計的那樣,你可以在一個表空間直接壓縮或解壓縮一個表,而不用考慮表空間級別上的
COMPRESS
屬性
刪除數據不能縮小表空間,只是可再利用的多了.
要實際縮小,讓操作系統可以利用,需要先把表move tablespace
也可以在原來的tablespace上move一遍,再縮小tablespace就可以了.
例如:
alter table your_table move tablespace yourtablespace;
隨著數據量的不斷海量 CPU的不斷強勁 雙核四核的叫個不停 一種叫做時間換空間的優化技術應該會越來越流行 所以 數據壓縮對于今后的數據庫來說 應該會從核武器變成常規武器 Oracle從 i開始羞羞答答的引入表級壓縮 一直以來都是像中國的核電站一樣 宣傳的用處大 論實際的貢獻就不怎么樣了
Oracle g似乎是正兒八經的要推廣數據壓縮技術了 專門推出了一個叫做Advance Compression的組件 全面支持普通表壓縮 非結構化數據壓縮(SecureFile數據壓縮) Data Pump數據壓縮 以及RMAN備份壓縮 數據壓縮技術從此名正言順的登上歷史舞臺 既然是專門做為一個Option推出 Oracle一定是對該特性相當有信心 所以需要單獨為該特性購買License
在Oracle i中雖然引入了表壓縮 但是有很大的限制 只能對批量裝載操作(比如直接路徑裝載 CTAS等)涉及的數據進行壓縮 普通的DML操作的數據是無法壓縮的 這應該是對于寫操作的壓縮難題沒有解決 一直遺留到Oracle g 總算是解決了關系數據壓縮的寫性能問題 Oracle的表壓縮是針對Block級別的數據壓縮 主要技術和Oracle i差不多 還是在Block中引入symbol表 將block中的重復數據在symbol中用一個項表示 Oracle會對block進行批量壓縮 而不是每次在block中寫入數據時都進行壓縮 通過這種方式 可以盡量降低數據壓縮對于DML操作的性能影響 這樣 在block級別應該會引入一個新的參數 用于控制block中未壓縮的數據量達到某個標準以后進行壓縮操作
SecureFile也是Oracle g新推出的一項特性 用于存儲非結構化數據 SecureFile也將支持數據壓縮操作 這樣對于傳統的LOB字段也可以進行壓縮 將極大的減少大型數據庫的存儲空間需求 當然 有得比有失 壓縮和解壓時 對于CPU的要求也將更高 但是 目前CPU的發展速度明顯比IO和存儲空間快速的情況下 壓縮是大有可為的技術 通過在壓縮率和壓縮效率方面的不斷提升 以后應該為成為各個數據庫的標準配置
除了對數據庫中的數據進行壓縮 Advance Compression Option還將支持備份數據的壓縮 做為邏輯備份的Data Pump和物理備份的RMAN工具 都將支持該技術 在Oracle gR 中 Data Pump已經開始支持壓縮源數據 Oracle g中則可以直接壓縮導出文件 這樣導出的時候就可以極大的減少存儲空間的需求 在以前版本中 利用WinRAR等 經常可以將幾個G的導出文件壓縮到幾十M Oracle g的白皮書上說壓縮率可以達到 % 等軟件出來 大家可以好好的測試一把 同樣的 Oracle也在 g中開始引入RMAN的壓縮技術 但是Oracle g號稱采用了更先進的ZLIB要所算法 可以比Oracle g的壓縮算法快上 % 空間需求也將減少 %
除了上述的數據壓縮技術 Oracle g Advanced Compression Option還將引入另外一種壓縮技術 我們知道在Data Guard中 需要將日志從主庫傳遞到備庫 如果主庫的事務很多 則單位時間內需要傳遞的日志量將相當可觀 如果能將這些日志壓縮后在傳遞 然后在備庫解壓后應用 將極大的減少對于網絡帶寬的需求 從而已減少主備庫的時間差
另外 Oracle的bitmap一直就是壓縮存儲的 g中的bitmap對于 i就有比較大的改動 通過一些細節的完善 提供更好的性能和更高的穩定性 也是oracle一貫的風格 對于bitmap在Oracle g中將如何實現 也將是非常值得關注的一個特點
lishixinzhi/Article/program/Oracle/201311/16929
有2種方法:
1.將你22G的表空間的DBF數據文件縮小,這樣表空間就自然變小了
2. 將這個22G的表空間中得文件移到別的表空間里,然后刪除表空間重新建立,最后再講移出的表移回來,這樣也能縮小表空間
alter table 表名 move和alter table 表名 shrink space都可以用來進行段收縮,降低高水位HWM,
也都可以用來消除行鏈接(Row Chaining)和行遷移(Row Migration),估計效果不明顯,看你的數據庫用途是干什么的(如果是數據倉庫肯定是不明顯的)。