2010-05-03 2 views
3

this solution을 사용하여 데이터베이스에 대략 3 백만 개의 레코드를 삽입하려고합니다.수백만 개의 레코드를 삽입하는 LINQ to SQL의 시간 제한

는 "SqlExcepetion : 응용 프로그램이 잠시 동안 기록을 삽입되었을 때 결국, 그것은 다음과 같은 SQLEXCEPTION와 시간 제한 제공 (내 마지막 실행은 약 4 시간 지속). 제한 시간이 만료을 timeoutperiod 전에 완료에 경과 작업 또는 서버가 응답하지 않습니다. "

이 예외를 처리하는 가장 좋은 방법은 무엇입니까? 이 문제를 방지 할 수있는 방법이 있습니까? 아니면 예외를 잡아야합니까?

미리 감사드립니다.

답변

10

을 찾을 수 있습니다, 모든 문제가 못처럼 보인다.

3 백만 개의 레코드를 삽입하기 위해 Linq2SQL을 사용하려고해도 심각한 접근 방법이 아닙니다. ORM은 많은 좋은 것들이며, 대량 삽입 요소가 아닙니다.

내가 제안 :

  • 파일
  • 로드 적절한 도구 (대량로드 메커니즘)를 사용하여 파일에 테이블 데이터를 생성합니다. 당신은 성능에 대해 놀랄 것입니다. (힌트 : 15 분 안에 약 6 억 개의 레코드를로드합니다.)

대량로드는 많은 성능 이점이 있습니다. 당연히 여기 ETL로드 프로세스와 같은 것을 가정한다고 가정합니다.하지만 데이터웨어 하우스 /보고/아카이빙 스타일의로드 작업을 제외하고는 3 백만 건의로드를 보지 못했습니다. 정의와 정의는 실시간 트랜잭션 처리가 아닙니다.

작업에 적합한 도구를 사용하십시오.

+0

내가 "... 당신의 유일한 도구가 망치가"표현이 생각 – si618

+0

무엇이든 표현은, 그것은 대단한 설명입니다! +1이 awnser, 승리! – Bas

+2

TomTom의 답변 외에도 SqlBulkCopy 클래스를 살펴보십시오. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx –

2

명령의 CommandTimeout을 늘려야한다고 생각합니다. 당신이 가진 모든 것을 망치는 경우

솔루션이 here

+0

도 참조 http://stackoverflow.com/questions/949374/to-increase-the-timeout-period/949381#949381 – abatishchev

3

SQL 스크립트 (또는 문자열)를 생성하고 직접 실행하십시오.

L2SQL은 이와 같은 대량 작업을 수행하지 않습니다.