数据泵并行parallel参数问题
背景:
某現場遷移RB庫時發現數據泵(expdp)導出某張表加parallel并不能完全生效,導出的dmp文件大小不平均,數據全部集中在某個dmp文件上,如下圖所示:
導出命令如下:
nohup expdp rb/*** directory=MIGRATE tables=event_usage_2985 dumpfile=event_usage_2985%U.dump CONTENT=DATA_ONLY PARALLEL=4 logfile=expdp_event_usage_2985.log &
可以由上圖看出,雖然加了parallel=4,dmp文件只生成了4個,且數據幾乎全部集中在某個dmp文件里,這種不均衡的數據分布不是我們期望的。
問題復現:
1、找一張大表
col owner for a10
col segment_name for a40
set lines 400 pages 9999
select * from (select owner,segment_name,sum(bytes/1024/1024/1024) from dba_segments group by segment_name,owner order by sum(bytes/1024/1024/1024) desc) where rownum<10;
2、按照常規parallel的命令導出
expdp rbc/******** directory=DIR_DP tables=rbc.EVENT_USAGE_C_10570 parallel=8 dumpfile=EVENT_USAGE_C_10570_%U.dmp logfile=EVENT_USAGE_C_10570.log metrics=y
發現導出的dmp文件大小不均勻,且使用parallel 8,只生成3個dmp文件,復現了此問題
問題排查:
1、分區表分析
查看日志發現數據分布不均,懷疑是一個expdp woker進程只負責一個partition的導出,導致dmpfile大小不一樣
使用filesize限制每個dumpfile的大小,效果顯現:
expdp rbc/******** directory=DIR_DP tables=rbc.EVENT_USAGE_C_10570 parallel=8 filesize=2G dumpfile=EVENT_USAGE_C_2_10570_%U.dmp logfile=EVENT_USAGE_C_2_10570.log metrics=y
但是dmpfile是一個個增長的,而不是并行增長(懷疑是分區數據不均導致)
2、構造非分區表測試
create table rbc.EVENT_USAGE_C_10570_TEST as select * from rbc.EVENT_USAGE_C_10570;
expdp rbc/******** directory=DIR_DP tables=rbc.EVENT_USAGE_C_10570_test parallel=8 dumpfile=EVENT_USAGE_C_10570_test_%U.dmp logfile=EVENT_USAGE_C_10570_test.log metrics=y
測試發現普通表指定了parallel,也無法均勻產生相應數量的dmpfile,排除了分區分布不均的懷疑
仔細觀察此日志,發現真正用戶數據導出的worker進程只有W-7,其他worker要么在處理其他(statisctics等),要么沒有用到(W-4,W-6等)
懷疑一張表只能由一個worker導出
3、導出整個schema測試
expdp rbc/******** directory=DIR_DP schemas=rbc parallel=8 dumpfile=EVENT_USAGE_C_10570_test_%U.dmp logfile=EVENT_USAGE_C_10570_test.log metrics=y exclude=statistics
根據導出的結果可以看出,以schema導出的dmp文件仍然不均勻,應該是用戶下面有兩張大表各自落在這兩個dmp文件導致
結論
由測試結果可以暫時得出結論,一張表只能由一個worker導出數據,且此worker導出的數據會集中在一個dmpfile。所以導出單表時,只加parallel無法生成對應的dmpfile個數(最多3個)要想生成多個dmpfile,可以加filesize限制一個dmpfile大小,這樣會生成多個dmpfile(但是并不是同時生成,而是一個個生成,所以加parallel只能生成多個dmpfile,而不能減少導出時間)
附:
導出過程:
https://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/datapump11gr2_parallel_1106.pdf
filesize的解釋:
filesize限制生成的dmpfile的最大值,建議與parallel共同使用,使用filesize,dumpfile要加%U才行,否則導出的數據超出filesize指定的值,會報錯如下:
如果導出的dmpfile很大,大于parallel*filesize的值,dmpfile會繼續增加;建議導出前先預估下導出的量,盡量使得parallel*filesize的值小于dmpfile,避免expdp worker進程idle
導出導入時間對比:
| 參數 | parallel=8 | filesize=2G | parallel+filesize | 兩個參數都不加 |
| 導出時間 | 1min33s | 1min47s | 1min40s | 1min50s |
| 導入時間 | 5min57s | 5min29s | 6min8s | 5min29s |
總結
以上是生活随笔為你收集整理的数据泵并行parallel参数问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元素垂直居中的几种方法
- 下一篇: 2021,自动驾驶的“五代十国”