【Data Pump】理解expdp中的ESTIMATE和ESTIMATE_ONLY引數

恩強Boy發表於2020-12-04

理解expdp 中的 ESTIMATE ESTIMATE_ONLY 引數


    透過ESTIMATE 引數,我們可以估計作業需要消耗多少的磁碟空間。這個估計值會列印在日誌檔案中,並顯示在輸出裝置上。這個引數的值可以選擇 BLOCKS (預設)和 STATISTICS

    · BLOCK :塊,透過將目標物件使用的資料庫塊數量與塊大小相乘來計算。

    · STATISTICS :統計資訊,使用每個表的統計資訊來估算。為了使這種方法準確計算,所有的表都應該在最近進行分析。

    使用EXTIMATE 引數時,需要考慮以下情況:

    首先,BLOCK 的估計是最不準確的。如果指定的表是最近進行統計分析的,那麼 STATISTICS 是最準確的,所以在使用 ESTIMATE=STATISTICS 方法進行估算之前生成統計資訊是很重要的。此外 EXTIMATE=BLOCKS 方法可能在以下情況時不準確:

    · 建立的表具有比實際表資料所需的更大的初始區大小

    · 從表中刪除了很多行,或者每個塊中使用了非常小的百分比

    當透過DBMS_STATS 包顯式設定統計資訊,用以強制執行某些最佳化器執行計劃時,而不是直接從資料中收集統計資訊時, EXTIMATE=STATISTICS 可能報告不正確的結果。

    expdp 匯出包括匯出資料和後設資料,後設資料包括 table,grants,indexes 和其他物件。使用 CONTENT=DATA_ONLY 或  CONTENT=METADATA_ONLY 執行相同的匯出,用來檢視 dump 檔案中有多少是用於後設資料的。換句話說, ESTIMATE 只會獲得表的大小而不是 dump 檔案的大小。因此,如果 expdp 命令沒有顯式地設定 CONTENT=DATA_ONLY, dump 檔案大小與其估計的大小將不匹配。

    如果一個表設計LOB 欄位,那麼 dump 檔案的大小可能會有所不同,因為 ESTIMATE 沒有考慮 LOB 的大小。可以透過以下的一個簡單的測試,檢視出更完整的資訊。

實驗測試

    在本實驗中,我們使用CONTENT=DATA_ONLY 來進行 expdp dump 檔案的大小與表的估計大小相差很遠,我們需要檢查表的定義來檢查 LOB

expdp 引數如下:

TABLES=<TABLE_NAME>

DUMPFILE=dir:<DUMP_NAME>.dmp

LOGFILE=dir:<LOG_NAME>.log

CONTENT=data_only

最後匯出dump 檔案大小為 16G

表是最近進行統計資訊分析過,並且EXTIMATE=STATISTICS 方式估算出表的大小為 201MB

以下是用過查詢dba_segments 得出的結果

SQL> select segment_name, segment_type, bytes, blocks, extents, initial_extent from dba_segments

where segment_name = '<TABLE_NAME>' and owner = '<SCHEMA_NAME>' ;

SEGMENT_NAME SEGMENT_TYPE BYTES   BLOCKS EXTENTS INITIAL_EXTENT

------------ ------------ --------- ------ ------- --------------

<TABLE_NAME> <TYPE>   211222528  25784 82   3145728

檢查表結構

SQL> desc <TABLE_NAME>

Name   Null?   Type

-------------- ------------ ----------------

COLUMN_NAME1 NOT NULL NUMBER(10,0)

COLUMN_NAME2     VARCHAR2(255)

COLUMN_NAME3     BLOB

COLUMN_NAME4     NUMBER(10,0)

檢查LOB 欄位大小

SQL> SELECT SUM(BYTES)/1024/1024 "MB",segment_type from DBA_EXTENTS

where segment_name IN (SELECT SEGMENT_NAME FROM DBA_LOBS

WHERE TABLE_NAME = '<TABLE_NAME>' and owner = '<SCHEMA_NAME>');

MB   SEGMENT_TYPE

------------ ---------------

19968   LOBSEGMENT

發現LOB 大小接近 20G ,因此,我們可以看到 LOB DataPump 中沒有一起計入。

EXTIMATE_ONLY 引數

    透過EXTIMATE_ONLY 引數,我們可以在不實際執行匯出的情況下進行估算消耗的空間大小。此引數不會生成 dump 檔案,而只會生成日誌檔案(如果指定) 該引數的值是Y (yes) N (no = default)

例如:

expdp scott/PASSWORD NOLOGFILE=y ESTIMATE_ONLY=y

...

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

. estimated "SCOTT"."EMP2" 128 KB

. estimated "SCOTT"."DEPT" 64 KB

. estimated "SCOTT"."DEPT2" 64 KB

. estimated "SCOTT"."EMP" 64 KB

. estimated "SCOTT"."SALGRADE" 64 KB

. estimated "SCOTT"."BONUS" 0 KB

Total estimation using BLOCKS method: 384 KB

Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 14:51

 

 

---- end ----

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2739315/,如需轉載,請註明出處,否則將追究法律責任。

相關文章