2016-09-26 2 views
-1

몇 가지 검증을 수행 한 후 테이블에 1,500 만 레코드를 삽입해야한다는 요구 사항이 있습니다.이 작업은 20 분 내에 완료해야합니다.오라클 데이터베이스에 1,500 만 레코드 업데이트/삽입

원본 테이블은 다른 응용 프로그램에서 데이터를받는 준비 테이블입니다. 이제이 스테이징 테이블에서 검증 후에 기본 테이블 중 하나에 데이터를 삽입해야합니다. 이 프로세스가 끝나면 스테이징 테이블의 레코드를 두 개의 별도의 기록 테이블에 삽입해야합니다.

첫 삽입 시간은 20 분이어야합니다. 그리고 다음 두 인서트의 경우 결합 된 시간은 20 분이어야합니다.

같은 스키마에있는 4 개의 테이블이 모두 동일한 db에 있습니다. 케이스 1에서는 검증을 위해 Pro * C를 사용하고 있지만 두 번째 삽입에서는 plsql 패키지가 있습니다.

누구나 제안 할 수 있습니까, 데이터베이스 oracle 9i입니다. 또한 20 분 내에 처리 할 수있는 최대 레코드 수는 얼마입니까?

+1

어디에서 오는 행입니까? 당신은 오라클 9i를 사용하고 있습니까? 오라클 9i는 5 년 이상 된 주요 개정판이며 수년간 지원되지 않았습니다. 어떻게 오늘 정확히 짐을 실은거야? 여기에는 가능한 것 이상의 많은 아키텍처가 있습니다. Oracle은 1 시간 프레젠테이션 중에 Exadata 시스템에서 실행되는 데이터웨어 하우스에 TB 데이터를로드하는 데모를 정기적으로 수행합니다. –

+0

안녕 저스틴. 이 행은 ETL 도구를 통해 다른 응용 프로그램에서 가져옵니다. 예, 전체 시스템이 너무 오래 되었기 때문에 9i를 사용하고 있습니다. 내 테스트 목적을 위해 필자는 자체 테스트 데이터 준비 스크립트로 수동으로 모든 레코드를 삽입합니다. 추가 정보가 필요한지 알려주십시오. –

+0

참고 오늘 나는 테이블에 DOP 10으로 시도했는데 한 테이블에 삽입하는 데는 19 분 밖에 걸리지 않았다. 하지만 밤에 많은 양의 배치가 실행되기 때문에 병렬 처리를 많이 할 수 없습니다. –

답변

2

작업해야하는 데이터 유형에 따라 다릅니다. 나는 이것이 9i에서 얼마나 걸릴지 모르겠다. 11g (값싼 노트북 컴퓨터에서 무료 버전)을 사용했고, 아래의 삽입 (15,000,000 개의 아주 단순한 행, 하나의 숫자 열)은 20 미만이었다. :

SQL> create table a (col number); 

Table created. 
Elapsed: 00:00:00.02 

SQL> insert into a 
    2 select u.x + v.y 
    3 from   (select level x from dual connect by level <= 15000) u 
    4  cross join (select level y from dual connect by level <= 1000) v; 

15000000 rows created.  
Elapsed: 00:00:19.46 

SQL> commit; 

Commit complete. 

SQL> select count(*) from a; 

    COUNT(*) 
---------- 
    15000000 

1 row selected.  
Elapsed: 00:00:01.36 
+0

고맙다 maths guy,하지만 한 테이블에서 다른 테이블로 데이터를 가져 가야합니다. –

+0

@SinghGaurav - 그 이유는 더 자세한 정보를 공유해야하기 때문입니다. "숫자"를 삽입하는 것과 3000 개의 문자열을 삽입하는 것이 있습니다. 항목을 즉시 생성하고 다른 항목을 8 개의 테이블 조인에서 가져 오는 것도 한 가지입니다. 기타 몇 가지 세부 사항을 추가 한 것을 보았습니다.하지만 아직 충분하지 않습니다. – mathguy

+0

세부 정보를 알려주십시오. 나는 그들을 공유하려고 노력할 것이다. –

1

마지막으로, 우리가 병렬 사용하는 멀티 스레딩에 두 개의 기록 테이블에 삽입하기로 결정,이 간단한 INSERT 쿼리입니다. 두 번째 시나리오에서 Pro * C는 각 레코드를 하나씩 처리하므로 주어진 시간 내에 완료 할 수 없습니다. 여전히 우리는 Pl/SQL 부분에서 다른 프로세스와 어느 정도의 병렬 처리를 방해 할 수없는 최대 스레드를 구현했습니다.

suggesions에 감사드립니다.