이 블로그 검색

[ORACLE] Data Pump가 느리거나 멈춘경우.


Data Pump가 느린 경우에 대한 내용이다.

실제적으로 왜 느린가에 대한 확인은 Wait Event를 통해 대부분 확인 가능하며,
본 문서는 아래와 같은 상황에서의 각각의 해결 방법에 대한 내용이다.

또한 "Streams AQ: enqueue blocked on low memory" Wait Event가 확인되는 경우.


(각 항목별로 클릭시 해당 파트로 이동 된다.)


원인 1.

streams pool의 크기가 작은 경우 발생.

해결 방법

아래와 같이 streams_pool_size를 변경한다.
아래의 경우 256MB로 변경하였으며, 서버의 sga 크기에 따라 적절하게 조정하도록 한다.
alter system set streams_pool_size=256M ;

streams pool의 설정 값 및 사용 중인 값은 아래와 같이 확인 가능하다.
-- 설정한 값
SELECT COMPONENT
      ,USER_SPECIFIED_SIZE/1024/1024 "USER_SPECIFIED_SIZE"
      ,CURRENT_SIZE/1024/1024 AS "CURRENT_SIZE(MB)"
      ,MIN_SIZE/1024/1024 AS "MIN_SIZE(MB)"
      ,MAX_SIZE/1024/1024 AS "MAX_SIZE(MB)"
  FROM V$MEMORY_DYNAMIC_COMPONENTS
 WHERE COMPONENT='streams pool'
;
-- 사용 중인 값
SELECT POOL
      ,SUM(CASE WHEN NAME='free memory'
                THEN BYTES
                ELSE 0
            END)/1024/1024 AS "FREE MEMORY SIZE(MB)"
      ,SUM(CASE WHEN NAME='free memory'
                THEN 0
                ELSE BYTES
            END)/1024/1024 AS "ASSIGNED MEMORY SIZE(MB)"
      ,SUM(BYTES)/1024/1024 AS "TOTAL SIZE(MB)"
  FROM V$SGASTAT
 WHERE 1=1
   AND POOL='streams pool'
--   AND CON_ID=0
GROUP BY POOL
;


원인 2.

AMM 또는 ASMM에 의해 streams pool의 크기가 자동으로 조정된 후, Flag가 남아있는 경우 발생. 상세 내용은 Docs 2386566.1을 참고한다.

해결 방법

해당 이슈는 19.1 버전 부터 해결되었으며, 19.1 이전버전의 경우는 아래와 같이 해결한다.

아래 쿼리로 확인 시, streams pool의 크기가 조정되고 있거나 조정된 후에도 Flag가 남아있는 상태라면 결과값이 "1" 로 출력된다.


select shrink_phase_knlasg from X$KNLASG;
"1"로 유지되고 있는 상태라면 아래와 같이 events 파라미터를 지정하면 "0"으로 변경되고, Wait이 발생하지 않게 된다.
alter system set events 'immediate trace name mman_create_def_request level 6' ;



2. Data Pump Import(impdp) 도중 Index 단계에서 지나치게 오랜 시간이 소요되는 경우.


원인.

Index는 Import가 아닌 CREATE INDEX 구문을 통해 "생성" 하는 것이기 때문에 오랜 시간이 소요되며, Data Pump의 parallel 옵션을 사용해도 ORACLE은 여러개의 Index를 동시에 CREATE 할 뿐, 각각의 Index는 parallel degree 1 짜리 인덱스로 생성한다.


해결 방법 1.

exclude=index,constraint,ref_constraint 옵션을 통해 index,constraint,ref_constraint를 제외하고 import를 수행 후,
sqlfile=xxxx.sql 및
exclude=index,constraint,ref_constraint 옵션으로 DDL을 출력 및 index의 parallel degree를 수정하여 생성한다.
생성 완료 후에는 반드시 constraint 생성을 하도록 하고,
반드시 원래 parallel degree로 복구하도록 한다.

해결 방법 2.

metadata만 import 수행 후, index와 constraint에 대해 get_ddl 구문으로 DDL을 출력 및 index의 parallel degree를 수정하여 생성한다.
생성 완료 후에는 반드시 constraint 생성을 하도록 하고,
반드시 원래 parallel degree로 복구하도록 한다.


※ 참고사항으로, parallel은 Enterprise Edition에서만 제공되는 기능이다.
Standard Edition에서는 Index 생성때문에 느리다면 기다리는 것 외에는 특별한 방법이 없다.

추천 게시글

[ORACLE] Data Pump가 느리거나 멈춘경우.

목록