큰 AIX 메인 프레임에서 실행되는 메인 시스템이 있습니다. 시설보고 및 운영에는 야간 덤프가 메인 프레임에서 SQL Server로 진행되므로 각 50 개 고객은 동일한 스키마로 자체 데이터베이스에 있습니다. 이 덤프는 매일 밤 마칠 때까지 약 7 시간이 걸리고 실제로 할 수있는 일이별로 없습니다. 애플리케이션 공급 업체가 제공 한 것과 관련되어 있습니다.새 데이터베이스 테이블 가져 오기
SQL 서버로 덤프 한 후이를 사용하여 다른 여러 가지 일일 절차를 실행합니다. 이러한 절차 중 하나는 일종의 관리보고 샌드 박스 테이블로 데이터를 가져 오는 것입니다.이 테이블은 여러 데이터베이스에서 특히 중요한 테이블의 레코드를 하나의 테이블로 결합하여 SQL을 모르는 관리자가 임시 보고서를 실행할 때 사용할 수 있습니다 시스템의 나머지 부분을 망칠 필요없이. 이것은 다시 비즈니스 측면입니다. 관리자는 그것을 원하고 구현하는 것을 볼 수있는 힘이 있습니다.
이 표의 가져 오기 프로세스는 자체적으로 몇 시간이 걸립니다. 50 개의 데이터베이스에 분산 된 4 천만 개의 레코드를 약 4 백만 개의 레코드로 필터링 한 다음 검색을 위해 특정 열에 인덱스를 지정합니다. 결합 된 시간에도 초기로드 시간의 3 분의 1 미만이지만 야간 처리를 위해 시간이 부족하고 메인 프레임 덤프를 제어하지 않으며이를 제어합니다. 그래서 기존 절차를 개선 할 방법을 모색하는 임무를 맡았습니다.
현재 각 클라이언트 데이터베이스의 모든 데이터를로드 한 다음 나중에 한 번에 색인을 생성한다는 것이 철학입니다. 또한 장기간 실행되는 경우 다른 중요한 시스템을 중단시키는 것을 피하기 위해 더 큰 클라이언트 몇 대가 항상 먼저 실행되도록 설정됩니다 (테이블의 주 인덱스는 clientid 필드로 이루어짐). 우리가하기 시작한 한 가지 다른 점은 각 클라이언트가 순차적으로 진행되는 것이 아니라 한 번에 여러 클라이언트의 데이터를 동시에로드하는 것입니다.
제 질문은이 테이블을로드하는 가장 효율적인 방법은 무엇입니까? 나중에 색인 생성이 더 효율적이라고 생각하는 것이 맞습니까? 또는 데이터를 가져 오기 전에 색인을 생성해야합니까? 큰 고객이 아닌 페이지를 대량으로 재주문하지 않으려면 인덱스 순서로 테이블을로드해야합니까? 병렬로 로딩하면 한꺼번에 많은 디스크에 액세스하거나 명령을 제어 할 수있는 능력을 제거함으로써 상황을 악화시킬 수 있습니까? 다른 아이디어?
업데이트
음, 뭔가 업입니다. 나는 하루 중 일부 벤치마킹을 할 수 있었고, 인덱스가 작업의 시작이나 끝에서 생성되는지 여부는로드 시간에 전혀 차이가 없었지만 인덱스 자체를 구축하는 시간을 절약합니다. 코스는 테이블에 데이터가 없어도 거의 즉시 구축됩니다.)