내 C# 응용 프로그램은 Sql Server에서 100 만 개가 넘는 레코드를 검색하고 처리 한 다음 데이터베이스를 다시 업데이트합니다. 이것은 가까운 10 만 업데이트 문에서 결과 그들은 모두 다음과 같은 형식이 -C# 및 SQL Server
update Table1 set Col1 = <some number> where Id in (n1, n2, n3....upto n200)
는 "이드"를 int, 클러스터 된 인덱스와 기본 키입니다. 두 개의 업데이트 문은 동일한 ID를 업데이트하지 않으므로 이론적으로 잠금없이 모두 병렬로 실행할 수 있습니다. 그러므로, 이상적으로, 가능한 한 많이 병렬로 실행해야한다고 생각합니다. 모든 것이 5 분 안에 끝나기를 기대합니다.
이제 제 질문은 가장 효율적인 방법입니다. 나는 아래를 시도하고있다 -
- 순차적으로 순차적으로 실행 - 이것은 가장 효율적인 효율적인 솔루션이다. 1 시간이 걸립니다.
- 스레드에서 각 업데이트를 실행하여 병렬로 실행 - 다시 수천 개의 스레드를 생성하기 때문에 매우 비효율적이지만 어쨌든 시도 했으므로 한 시간 이상 걸렸으며 상당수가이 연결로 인해 실패했습니다 발행물.
- 새 테이블에 대량 삽입 한 다음 업데이트에 대한 조인을 수행합니다. 그러나 둘 이상의 사용자가이를 수행 할 것으로 예상되므로 동시성 문제가 발생합니다.
- 업데이트 대신 병합 병합 - Google은 병합이 실제로 개별 업데이트 문보다 느리기 때문에 시도하지 않았다고 말합니다.
대용량의 데이터를 처리하는 많은 응용 프로그램에서 매우 공통적 인 문제라고 생각합니다. 표준 솔루션이 있습니까? 어떤 아이디어 나 제안도 환영합니다.
유용 할 수 있습니다. http://stackoverflow.com/questions/20635796/bulk-update-in-c-sharp – TheDude
수천 개의 스레드를 만드는 대신 스레드 풀을 사용 해본 적이 있습니까? – itsme86
일괄 요청을 실행하고 싶습니다. – TheDude