대량 복사 - sybase

database sqlbulkcopy sybase

문제

선택적으로 (행과 열 모두) 한 테이블에서 다른 테이블로 약 2 천만 행을 내보낼 필요가 있습니다. 이것이 제가 시도한 것입니다 :

--Run this in batch:
INSERT INTO Table 2
Select A, B from Table1 
where A > a and B < b

---Table1 have columns A, B....Z and got around 50 million records. 

완료하는 데 약 12 ​​시간이 걸립니다. 나는 sybase가 Table1의 선택적 열과 행을 가지고 bcp를 허용하고 bcp를 Table2에 넣을 수 있다고 생각하지 않습니다. 사용할 수있는 빠른 접근 방식이 있습니까? 4 시간 이내에 끝내면 행복 할 것입니다.

그것을 읽어 주셔서 감사합니다.

인기 답변

나는 네가 의미하는 것 같아.

WHERE PK > start_value AND PK < end_value

동일한 서버에있는 두 테이블의 데이터를 복제 할 충분한 이유가 없으므로 테이블이 별도의 서버에 있기를 바랍니다. 당신이 "아카이브"하고 있다면, 그것은 권고 할 것이 틀린 것입니다; 대신 테이블 속도를 향상 시키십시오. 이 게시물을 참조하십시오.

  1. INSERT-SELECT는 점차적으로 느리게 실행되는 트랜잭션 로그를 종료하고 다른 사용자가 db를 사용할 수 없게합니다. 1,000 행의 배치로 나누면 더 빠르고 사교적입니다.

4 시간 이내에 끝내면 행복 할거야.

  1. 아무런 문제가 없어야합니다. 하드웨어 및 디스크 레이아웃에 따라 다릅니다. ASE 15.5를 실행하는 작은 데모 상자에서 13.2 초 동안 1,600 만 행을로드 할 수 있습니다.

  2. bcp는 다음과 같은 조건에 따라 자동으로 두 가지 모드로 실행됩니다.

    • 빠른. 이 경우 SELECT_INTO / BULK_COPY sp_dboption을 설정해야 bcp가 INSERTS를 기록하지 않고 할당 만 기록 할 수 있습니다. 또한 테이블의 인덱스를 삭제해야합니다 (bcp가 완료된 후에 만들 수 있음).

    • 느린. 상기 조건 중 하나라도 충족되지 않습니다. 모든 INSERT가 기록됩니다. 로그에 덤프하는 임계 값이 있는지 확인하십시오 (채울 것입니다).

  3. out_data_file 또는 Table_2에 대해 Table_1의 열 서브 세트는 전혀 문제가되지 않습니다. Table_2의 뷰를 Table_1 서버에 작성하십시오. 보기를 Bcp 아웃하십시오. 뷰에 WHERE 절을 넣거나 변환을 수행 할 수도 있습니다.

  4. bcp를 병렬로 실행할 수 있습니다 (호스트 시스템에있는 CPU / 코어 수만큼). 압축을 병렬 스트림의 수로 나눕니다 (예 : 8 코어 시스템에서 exec 8 병렬 작업 추출). -F 및 -L 매개 변수를 사용하여 Table_1의 1/8을 지정하십시오. o / s 및 8 x BAT 파일이있는 경우 "&"를 사용하십시오.

  5. 또한 8 x INSERT-SELECT 작업을 병렬로 실행할 수도 있습니다 (예 :). 행 번호가 아닌 PK 값으로 나눕니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.