数据泵并行parallel参数问题
背景:
某現(xiàn)場(chǎng)遷移RB庫(kù)時(shí)發(fā)現(xiàn)數(shù)據(jù)泵(expdp)導(dǎo)出某張表加parallel并不能完全生效,導(dǎo)出的dmp文件大小不平均,數(shù)據(jù)全部集中在某個(gè)dmp文件上,如下圖所示:
導(dǎo)出命令如下:
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個(gè),且數(shù)據(jù)幾乎全部集中在某個(gè)dmp文件里,這種不均衡的數(shù)據(jù)分布不是我們期望的。
問題復(fù)現(xiàn):
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、按照常規(guī)parallel的命令導(dǎo)出
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
發(fā)現(xiàn)導(dǎo)出的dmp文件大小不均勻,且使用parallel 8,只生成3個(gè)dmp文件,復(fù)現(xiàn)了此問題
問題排查:
1、分區(qū)表分析
查看日志發(fā)現(xiàn)數(shù)據(jù)分布不均,懷疑是一個(gè)expdp woker進(jìn)程只負(fù)責(zé)一個(gè)partition的導(dǎo)出,導(dǎo)致dmpfile大小不一樣
使用filesize限制每個(gè)dumpfile的大小,效果顯現(xiàn):
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是一個(gè)個(gè)增長(zhǎng)的,而不是并行增長(zhǎng)(懷疑是分區(qū)數(shù)據(jù)不均導(dǎo)致)
2、構(gòu)造非分區(qū)表測(cè)試
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
測(cè)試發(fā)現(xiàn)普通表指定了parallel,也無法均勻產(chǎn)生相應(yīng)數(shù)量的dmpfile,排除了分區(qū)分布不均的懷疑
仔細(xì)觀察此日志,發(fā)現(xiàn)真正用戶數(shù)據(jù)導(dǎo)出的worker進(jìn)程只有W-7,其他worker要么在處理其他(statisctics等),要么沒有用到(W-4,W-6等)
懷疑一張表只能由一個(gè)worker導(dǎo)出
3、導(dǎo)出整個(gè)schema測(cè)試
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
根據(jù)導(dǎo)出的結(jié)果可以看出,以schema導(dǎo)出的dmp文件仍然不均勻,應(yīng)該是用戶下面有兩張大表各自落在這兩個(gè)dmp文件導(dǎo)致
結(jié)論
由測(cè)試結(jié)果可以暫時(shí)得出結(jié)論,一張表只能由一個(gè)worker導(dǎo)出數(shù)據(jù),且此worker導(dǎo)出的數(shù)據(jù)會(huì)集中在一個(gè)dmpfile。所以導(dǎo)出單表時(shí),只加parallel無法生成對(duì)應(yīng)的dmpfile個(gè)數(shù)(最多3個(gè))要想生成多個(gè)dmpfile,可以加filesize限制一個(gè)dmpfile大小,這樣會(huì)生成多個(gè)dmpfile(但是并不是同時(shí)生成,而是一個(gè)個(gè)生成,所以加parallel只能生成多個(gè)dmpfile,而不能減少導(dǎo)出時(shí)間)
附:
導(dǎo)出過程:
https://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/datapump11gr2_parallel_1106.pdf
filesize的解釋:
filesize限制生成的dmpfile的最大值,建議與parallel共同使用,使用filesize,dumpfile要加%U才行,否則導(dǎo)出的數(shù)據(jù)超出filesize指定的值,會(huì)報(bào)錯(cuò)如下:
如果導(dǎo)出的dmpfile很大,大于parallel*filesize的值,dmpfile會(huì)繼續(xù)增加;建議導(dǎo)出前先預(yù)估下導(dǎo)出的量,盡量使得parallel*filesize的值小于dmpfile,避免expdp worker進(jìn)程idle
導(dǎo)出導(dǎo)入時(shí)間對(duì)比:
| 參數(shù) | parallel=8 | filesize=2G | parallel+filesize | 兩個(gè)參數(shù)都不加 |
| 導(dǎo)出時(shí)間 | 1min33s | 1min47s | 1min40s | 1min50s |
| 導(dǎo)入時(shí)間 | 5min57s | 5min29s | 6min8s | 5min29s |
總結(jié)
以上是生活随笔為你收集整理的数据泵并行parallel参数问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元素垂直居中的几种方法
- 下一篇: 2021,自动驾驶的“五代十国”