oracle数据泵索引创建慢,IMPDP 很慢的原因探究
最近幫一個客戶做數據遷移測試,數據庫版本的10.2.0.4.0,操作系統是AIX到Linux,采用EXPDP/IMPDP方式進行全庫導出和導入。
客戶的數據庫有3.6T,導出時間花了30小時,但是導入卻花了120小時,這個很不正常。因為目標數據庫的I/O效率比源數據庫的I/O效率要高,導入過程中發現導入表數據的時候很快,而后來創建索引的時間特別長,占了80%的時間。通過AWR報告分析,竟然發現在導入過程中運行了下面語句:
ANALYZE TABLE "XXX."XXXX" COMPUTE STATISTICS;
被分析的這個表450G,分析了40小時的時間,這個讓人摸不到頭腦,后來查看了大量資料,發現這是Oracle10g的一個bug,就是在用expdp導出過程中,如果某個表包含函數索引,則在導入過著中會到該表進行分析,通過形成導入腳本驗證了這個說法。下面是驗證過程:
Sqlplus system/****
SQL> create table test (id number, name varchar2(30)) tablespace users;
SQL>insert into test values (1,’A’);
SQL>COMMIT;
Expdp system/******** directory=expdir dumpfile=test01.dmp tables=test
Impdp system/******** directory=expdir dumpfile=test01.dmp sqlfile=test01.sql
查看test01.sql的內容
沒有發現 表分析語句
創建行數索引
SQL>create index idx_test on test(upper(name)) tablespace users;
重新導出導入形成導入腳本,發現腳本中包含下面內容
CREATE INDEX "SYSTEM"."IDX_FUN_1" ON "SYSTEM"."TEST" (UPPER("NAME"))
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SYSTEM" PARALLEL 1 ;
ALTER INDEX "SYSTEM"."IDX_FUN_1" NOPARALLEL;
-- new object type path is: TABLE_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS
DECLARE IND_NAME VARCHAR2(60);
IND_OWNER VARCHAR2(60);
BEGIN
DELETE FROM "SYS"."IMPDP_STATS";
IND_NAME := 'IDX_FUN_1'; IND_OWNER := 'SYSTEM';
INSERT INTO "SYS"."IMPDP_STATS" (type, version, flags, c1, c2, c3, c5,
n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, d1)
VALUES ('I', 4, 2, IND_NAME, NULL, NULL, 'SYSTEM', 10, 1, 10, 1, 1, 1, 0, 10, NULL, NULL, NULL, NULL, TO_DATE('2015-11-25 16:02:35', 'YYYY-MM-DD:HH24:MI:SS'));
DBMS_STATS.IMPORT_INDEX_STATS( '"' || ind_owner || '"', '"' || ind_name || '"', NULL, '"IMPDP_STATS"', NULL, '"SYS"');
DELETE FROM "SYS"."IMPDP_STATS";
END;
/
-- new object type path is: TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
ANALYZE TABLE "SYSTEM"."TEST" COMPUTE STATISTICS;
重新導出,忽略統計信息
Expdp system/******** directory=expdir dumpfile=test04.dmp tables=test exclude=STATISTICS
Impdp system/******** directory=expdir dumpfile=test04.dmp sqlfile=test04.sql
發現test04.sql中部包含表分析語句。
結論:
在Oracle 10g 進行數據泵導出時,最好不導出統計信息,到導入后再進行統計信息的收集,省得浪費時間進行無聊的表分析操作,改bug在11g被消除。
總結
以上是生活随笔為你收集整理的oracle数据泵索引创建慢,IMPDP 很慢的原因探究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLite学习手册(索引和数据分析/清
- 下一篇: SQLite学习手册(数据库和事务)