資料表建立引數介紹(二)
ü COMPRESS壓縮引數
Compress引數含義很清楚:就是在儲存資料表資料的時候是否啟用壓縮選項。壓縮使用的級別是資料塊block級別。Oracle對資料塊的壓縮採用相鄰相同值合併的壓縮演算法。
Compress引數有兩個系列引數:
1、OMPRESS FOR DIRECT_LOAD OPERATIONS:作用於Compress相同,適合於資料倉儲OLAP系統。只在直接插入過程中在表或者分割槽上啟用壓縮技術;
2、COMPRESS FOR ALL OPERATIONS:適合於OLTP系統,針對所有的操作均啟用了壓縮選項。要求的版本較高。
下面,我們透過一個小實驗,來確定壓縮效果。首先,構建兩個資料表test和test1,資料量和順序相同,只是引數不同。
SQL> conn scott/tiger@orcl;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as scott
SQL> set timing on;
SQL> create table test nocompress as select * from all_objects where 1=0;
Table created
Executed in 0.11 seconds
SQL> insert /*+append */ into test select * from all_objects;
40724 rows inserted
(提交和重複執行該語句,篇幅原因省略…)
SQL> insert into test select * from test;
122170 rows inserted
Executed in 8.412 seconds
SQL> select count(*) from test;
COUNT(*)
----------
244340
Executed in 0.872 seconds
SQL> exec dbms_stats.gather_table_stats('SCOTT','TEST',cascade => true);
PL/SQL procedure successfully completed
Executed in 2.354 seconds
//壓縮資料表
SQL> create table test1 compress as select * from all_objects where 1=0;
Table created
Executed in 0.17 seconds
SQL> insert /*+append */ into test1 select * from all_objects;
40724 rows inserted
Executed in 2.724 seconds
(提交和重複執行該語句,篇幅原因省略…)
SQL> insert into test1 select * from test1;
122172 rows inserted
Executed in 1.562 seconds
SQL> commit;
Commit complete
Executed in 0.03 seconds
SQL> select count(*) from test1;
COUNT(*)
----------
244344
Executed in 0.03 seconds
SQL> exec dbms_stats.gather_table_stats('SCOTT','TEST1',cascade => true);
PL/SQL procedure successfully completed
Executed in 0.501 seconds
兩個資料表資料量和結構完全相同,內容也相同。經過分析後,我們檢查資料字典反應的情況。
SQL> select segment_name, segment_type, bytes/1024/1024 MB, blocks, extents from user_segments where segment_name in ('TEST','TEST1');
SEGMENT_NA SEGMENT_TY MB BLOCKS EXTENTS
---------- ---------- ---------- ---------- ----------
TEST1 TABLE 17 2176 32
TEST TABLE 28 3584 43
Executed in 0.08 seconds
結果很清楚了,在沒有使用壓縮技術的TEST資料表,佔有空間28MB,共3584個資料塊。而採用過資料庫壓縮技術後,空間使用到了17MB,共2176個資料塊,空間節省39%左右。
進一步實驗,根據Oracle壓縮的方法,我們嘗試將近似的行之間相同資料情況增加。all_objects檢視中,owner和object_type相似度較高,選擇性低,這樣我們組織資料形態。
//構建實驗資料表三
SQL> create table test2 compress as select * from test1 order by owner,object_type;
Table created
Executed in 5.719 seconds
SQL> exec dbms_stats.gather_table_stats(user,'TEST2',cascade => true);
PL/SQL procedure successfully completed
Executed in 1.102 seconds
SQL> select segment_name, segment_type, bytes/1024/1024 MB, blocks, extents from user_segments where segment_name in ('TEST','TEST1','TEST2');
SEGMENT_NA SEGMENT_TY MB BLOCKS EXTENTS
---------- ---------- ---------- ---------- ----------
TEST1 TABLE 17 2176 32
TEST TABLE 28 3584 43
TEST2 TABLE 10 1280 25
Executed in 0.08 seconds
按照演算法特徵進行整理之後,資料表大小便為了10M,壓縮率提高到了64%。
ü LOGGING:日誌記錄
LOGGING參數列示對資料表或者其他物件進行變化性操作的時候,是否計入到REDO日誌中。預設情況下,Oracle對資料庫物件的任何修改性操作都會計入到redo log中,作為資料庫恢復使用。開啟logging功能,是保證資料庫資料一致性的重要一步。
有一些時候,我們可能會不希望記日誌操作。因為logging的時候會存在相當的效能損失,為了避免這種損失,加快操作速度,我們可能會選擇暫時性的設定資料表為nologging狀態。比如,我們在進行大規模資料載入的時候,可能就會選擇這種方式。
先不論nologging的好壞,有幾個問題筆者需要說明。首先,啟用資料表的nologging絕不意味著說一點重做日誌都不書寫。在執行過程中,資料表對應的索引物件等內容,都有一個重建的過程,這個過程是需要寫入redo log的。第二,不啟用redo log,的確會帶來一定的效能提升。但是沒有日誌的資料庫是極其危險的,一旦發生例項崩潰或者資料庫崩潰這種情況,資料庫資料丟失和不一致的情況是可能發生的。這種方法得不償失。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-688047/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料表建立引數介紹(一)
- 資料表建立引數介紹(三)
- 資料表建立引數介紹(四)
- docker 引數介紹Docker
- gcc 常用引數介紹GC
- HRMS Function 引數介紹Function
- mysql二進位制日誌的引數介紹MySql
- Oracle 各版本引數/隱藏引數 介紹Oracle
- jQuery()方法第二個引數的作用簡單介紹jQuery
- MongoDB啟動引數介紹MongoDB
- PostgreSQLGUC引數級別介紹SQL
- margin引數簡單介紹
- margin 引數簡單介紹
- ipchains引數介紹(轉)AI
- MySQL資料備份多種引數介紹及簡單示例MySql
- Oracle expdp impdp dump引數介紹Oracle
- eclipse 啟動引數介紹Eclipse
- 【儲存】megacli 常用引數介紹
- javascript bind()第一個引數以後引數介紹JavaScript
- 【DATAGUARD】Oracle21c Dataguard建立注意事項及主要引數介紹Oracle
- Oracle表空間建立引數解析Oracle
- 詳解Oracle建立表的引數Oracle
- Oracle 靜態引數與動態引數型別介紹Oracle型別
- mysql一些引數的介紹MySql
- ORACLE推導引數Derived Parameter介紹Oracle
- 【體系結構】Oracle引數介紹Oracle
- oracle 塊基本引數介紹(英文) (zt)Oracle
- Oracle sqlplus prelim 引數介紹OracleSQL
- MySQL Key分割槽表建立方法介紹MySql
- MT7682晶片手冊資料, MT7682處理器引數介紹晶片
- Oracle 表空間 建立引數 說明Oracle
- ECharts資料圖表使用介紹 超詳細Echarts
- 使用SQL來分析資料庫引數(二)SQL資料庫
- CSS 建立介紹CSS
- mysqldump中skip-tz-utc引數介紹MySql
- ORACLE初始化引數檔案介紹Oracle
- linux的vm相關引數介紹Linux
- Oracle 優化引數 optimizer_mode 介紹Oracle優化