【Data Pump】理解expdp中的ESTIMATE和ESTIMATE_ONLY引數
理解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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Data Pump】Data Pump的並行引數原理並行
- 【Data Pump】expdp/impdp Job基本管理
- impdp和expdp用法及引數介紹
- [20200620]expdp impdp exclude引數.txt
- exp和expdp的filesize引數的使用--匯出多個檔案
- expdp/impdp 詳細引數解釋
- 1.5 - Numpy的方法中,axis引數的理解
- Oracle Data Pump 11G 資料泵元件Oracle元件
- Oracle資料泵(Oracle Data Pump) 19cOracle
- Oracle 10g expdp attach引數體驗Oracle 10g
- linux,mtime引數的理解Linux
- 淺談對python pandas中 inplace 引數的理解Python
- 深入理解RabbitMQ中的prefetch_count引數MQ
- jmeter 引數理解JMeter
- Laravel同時接收路由引數和查詢字串中的引數Laravel路由字串
- C# 中的 in 引數和效能分析C#
- 理解HTTP協議中的multipart/form-dataHTTP協議ORM
- 引數的定義和引數的傳遞
- 關於 groutine 喚醒中 skipframes 引數不理解
- ts中如何限制方法傳入的引數data必須是陣列,且為偶數項?陣列
- expdp匯出慢的解決思路__增加引數metrics記錄每個步驟時間,增加引數trace記錄trace
- learning to Estimate 3D Hand Pose from Single RGB Images論文理解3D
- subprocess中命令為引數序列和字串的區別字串
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- Python中的引數遮蔽Python
- 把瀏覽器的引數複製 postman(form-data)格式瀏覽器PostmanORM
- innodb_flush_log_at_trx_commit引數的直白理解MIT
- Bash變數和引數變數
- python變數和引數Python變數
- Java對比有引數和無引數Java
- Oracle設定日誌引數-ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;OracleDatabase
- jmeter學習指南之引數化CSV Data Set ConfigJMeter
- Python 中的可變引數: 什麼是*args和**kwargs?Python
- shell中定義變數用雙引號和單引號以及不用引號的區別變數
- JavaScript 中的引數處理JavaScript
- angular cli中的--flat引數Angular
- 程式中的函式引數函式
- 帶你深入理解傳遞引數