用資料泵併發匯入資料的一個案例

e71hao發表於2016-06-03
   本案例演示了用oracle11g的資料泵impdp工具匯入資料,使用併發功能。要解決的問題是:1.什麼情況下開併發匯入效率有明顯的提升?2.在匯入的過程怎麼樣監控資料泵impdp匯入資料的?
    本次匯入檔案是1G,匯入資料不多。資料檔案放在openfiler的儲存中,寫入很慢,所以開併發匯入。匯入語句為:
impdp system/123456@test66   PARALLEL=4 job_name=job_test66_import   logfile=test3320160424user10bak.log dumpfile=test3320160422user10bak.dmpdp  version=11.2.0.1.0 schemas=RISK,POS,INF,PE,POSJK,ACC,FO,INTRA,FI  
其中 parallel為4,job_name為job_test66_import。開始匯入。
     回答第二個問題:怎麼樣監控?資料泵支援互動模式,附加attach引數的方式重新連線到中斷的任務中,並選擇後續的操作。 這就是互動方式。 在另外一個shell視窗,另外一個shel視窗監控:
impdp system/123456@test66  attach=JOB_TEST66_IMPORT
,看到如下內容:
Job: JOB_TEST66_IMPORT
  Owner: SYSTEM                         
  Operation: IMPORT                         
  Creator Privs: TRUE                           
  GUID: 3448DAD136BF201EE0534F0010AC90E6
  Start Time: Thursday, 02 June, 2016 17:01:42
  Mode: SCHEMA                         
  Instance: test66
  Max Parallelism: 4
  EXPORT Job Parameters:
     CLIENT_COMMAND        system/********@TEST33-172.16.0.97 COMPRESSION=all logfile=test3320160422user10bak.log dumpfile=test3320160422user10bak.dmpdp version=11.2.0.1.0 schemas=RISK,POS,INF,PE,FI,POSJK,VAS,ACC,FO,INTRA 
     COMPRESSION           ALL                                     
  IMPORT Job Parameters:
  Parameter Name      Parameter Value:
     CLIENT_COMMAND        system/********@test66 PARALLEL=4 job_name=job_test66_import logfile=test3320160424user10bak.log dumpfile=test3320160422user10bak.dmpdp version=11.2.0.1.0 schemas=RISK,POS,INF,PE,POSJK,ACC,FO,INTRA,FI 
  State: EXECUTING                      
  Bytes Processed: 289,480,112
  Percent Done: 29
  Current Parallelism: 4
  Job Error Count: 0
  Dump File: /u01/app/oracle/admin/test66/dpdump/test3320160422user10bak.dmpdp
  
Worker 1 Status:
  Process Name: DW00
  State: EXECUTING                      
  Object Schema: FI
  Object Name: GATEWAY_REQUEST
  Object Type: SCHEMA_EXPORT/TABLE/TABLE_DATA
  Completed Objects: 1
  Completed Rows: 186,259
  Completed Bytes: 349,938,120
  Percent Done: 35
  Worker Parallelism: 1
  
Worker 2 Status:
  Process Name: DW01
  State: EXECUTING                      
  Object Schema: INF
  Object Name: T_REQUEST_INFO_CONTENT
  Object Type: SCHEMA_EXPORT/TABLE/TABLE_DATA
  Completed Objects: 1
  Completed Rows: 730,691
  Completed Bytes: 316,879,688
  Percent Done: 69
  Worker Parallelism: 1
  
Worker 3 Status:
  Process Name: DW02
  State: EXECUTING                      
  Object Schema: INTRA
  Object Name: ACCESS_LOG
  Object Type: SCHEMA_EXPORT/TABLE/TABLE_DATA
  Completed Objects: 9
  Completed Bytes: 2,986,168
  Worker Parallelism: 1
  
Worker 4 Status:
  Process Name: DW03
  State: EXECUTING                      
  Object Schema: RISK
  Object Name: TRADE_MONITOR
  Object Type: SCHEMA_EXPORT/TABLE/TABLE_DATA
  Completed Objects: 4
  Completed Rows: 370,103
  Completed Bytes: 4,109,392
  Percent Done: 100
  Worker Parallelism: 1
可以看到有4個worker,每個worker是不同的使用者。我猜想,每一個worker,就是作業系統一個執行緒。這樣我們就明白了:資料泵併發匯入是不同使用者可以併發匯入data。這就回答了第一個問題,如果有多個使用者匯入資料,那麼可以考慮用併發同時匯入資料。在深入點,理論上來說,資料庫主機有幾個邏輯CPU,就可以開幾個併發匯入.實際上,假設匯入的使用者是一個,其他執行緒(也就是上面的worker)只能wait,因為幫不上忙,一個使用者只能順序匯入data。也就是說,併發匯入能不能有效果,由匯入的使用者情況,以及硬體cpu的支援。
    結果很滿意:這次是5分鐘匯入完成。我之前匯入一次這個檔案,沒有用併發,用了一個小時,(不要笑話我匯入速度慢因為openfiler儲存真心很慢,我在ASM分配一個8G的diskgroup,用了13分鐘。)

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

相關文章