ORACLE expdp在表空間較多的情況下執行非常緩慢
最近資料庫升級遷移過程中,遇到一個非常棘手的問題,源庫環境11.2.0.4擁有3700+個表空間,每個表空間只有資料檔案,大小不超過10MB,在對該資料庫全庫expdp匯出壓縮體積不超過300MB時,expdp全庫匯出需要10多個小時。
在資料泵expdp全庫匯出時,檢視資料庫的內部等待事件是control file sequce read:
SQL> l 1 select event,username,count(*) from gv$session gs 2* where wait_class<>'Idle' group by event,username SQL> / EVENT USERNAME COUNT(*) ---------------------------------------------------------------- ---------- ---------- SQL*Net message to client SYS 1 control file sequential read SYS 3 SQL>
檢視等待事件對應的會話資訊:
new 1: select sid,username,sql_id,event,module,machine,program from gv$session where event='control file sequential read' and sql_id is not null SID USERNAME SQL_ID EVENT MODULE MACHINE PROGRAM ---------- ---------- ------------- ---------------------------------------------------------------- ------------------------------ --------------- ------------------------------------------------ 1894 SYS d3gfd5bdzb56n control file sequential read Data Pump Worker orcl01 oracle@orcl01 (DW02) SQL>
可以明確看到control file sequential read對應的操作物件就是Data Pump Worker,即資料泵。
檢視sql語句d3gfd5bdzb56n對應的具體內容:
SQL>select sql_fulltext from v$sqlarea where sql_id='d3gfd5bdzb56n' SELECT /*+all_rows*/ SYS_XMLGEN(VALUE(KU$), XMLFORMAT.createFormat2('TABLESPACE_T', '7')), KU$.TS_NUM, KU$.NAME, KU$.NAME, 'TABLESPACE' FROM SYS.KU$_TABLESPACE_VIEW KU$ WHERE NOT EXISTS ( SELECT 1 FROM SYS.KU$NOEXP_TAB A WHERE A.NAME=KU$.NAME AND A.OBJ_TYPE='TABLESPACE') AND NOT (not(ku$.name not in ('SYSTEM','SYSAUX') and dbms_metadata.in_tsnum(1,ts_num)=0)) AND NOT (KU$.BITMAPPED>0 AND KU$.STATUS=2);
手工執行該sql語句時也十分緩慢,但是,去除XMLFORMAT.createFormat2('TABLESPACE_T', '7'))時,sql語句執行非常快。針對這種情況查詢oracle mos,找到一篇文件:Bug 14794472 - expdp/impdp is slow with many tablespaces (Doc ID 14794472.8)。文件的workaround建議執行如下update:
Workaround Update sys table entry used for datapump as follows. update metaview$ set properties=properties+1024-bitand(properties,1024) where viewname='KU$_TABLESPACE_VIEW'; commit;
14794472.8文件的workaround是要修改資料庫的CBO執行模式,但是執行完update後,expdp執行依然很慢。
後續,將該資料庫的表空間和資料檔案對應關係轉儲為sql檔案,在19c的目標資料庫中建立源庫的表空間和資料檔案,執行expdp匯出發現19c資料庫也一樣十分慢。因此,oracle資料庫不分版本,在大量資料庫表空間和資料檔案的情況下,expdp匯出都非常慢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2903996/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SYSAUX表空間佔用過大情況下的處理(AWR資訊過多)UX
- Oracle EXPDP自動備份緩慢問題解決Oracle
- 檢視temp表空間的消耗明細情況
- Oracle表空間Oracle
- oracle 表空間Oracle
- 兩行命令解決 Windows 下 Homestead 執行緩慢的問題Windows
- oracle表空間的整理Oracle
- oracle 剩餘表空間查詢慢,解決辦法Oracle
- AWR收集緩慢、掛起的幾種常見情況分析
- 4.3.4.1 在不使用Oracle OMF的情況下建立CDBOracle
- 不應該在沒有 sudo 的情況下執行 Docker 的原因Docker
- [20210804]oracle rac執行命令crs_stat -t -v緩慢的分析.txtOracle
- sql語句執行緩慢分析SQL
- 增加oracle表空間Oracle
- oracle temp 表空間Oracle
- 在不安裝oracle客戶端的情況下,使用PLSQLOracle客戶端SQL
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- 聊聊Oracle表空間Offline的三種引數(下)Oracle
- Oracle 批量建表空間Oracle
- Oracle清理SYSAUX表空間OracleUX
- 給定區間記憶體在多根情況下的非線性方程求根記憶體
- Oracle的表空間quota詳解Oracle
- Oracle OCP(47):表空間的建立Oracle
- [20181119]sql語句執行緩慢分析.txtSQL
- Mac 下 Docker 執行較慢的原因分析及個人見解MacDocker
- 查詢表空間使用情況
- 有return的情況下try catch finally的執行順序
- (轉)有return的情況下try catch finally的執行順
- Oracle Temp 表空間切換Oracle
- Oracle 表空間增加檔案Oracle
- Oracle OCP(49):表空間管理Oracle
- Oracle表空間收縮方案Oracle
- Oracle RMAN 表空間恢復Oracle
- [20211011]跟蹤freespace空間的變化情況.txt
- Oracle中表空間、表、索引的遷移Oracle索引
- Oracle新建使用者、表空間、表Oracle
- 使用Disql執行表空間還原的複雜用法SQL