2009-03-31 6 views
1

XML 파일을 읽고 SQL DB에 정보를 삽입하는 작은 응용 프로그램이 있습니다.SQL 문을 실행하는 다중 코어 활용

가져올 파일이 ~ 300000 개이며, 각각 ~ 1000 개의 레코드가 있습니다.

파일의 20 %에서 응용 프로그램을 시작했고 18 시간 동안 실행되었으므로 나머지 파일에 대해서는이 시간을 개선 할 수 있기를 바랍니다.

멀티 스레드 접근 방식을 사용하고 있지 않지만 프로세스를 실행중인 컴퓨터에 성능에 대한 향상을 위해 4 코어가 있기 때문에 (주요 문제는 I/O뿐만 아니라 처리).

BeginExecutingNonQuery() 메서드를 사용하여 SqlCommand 개체를 만들 때 각 삽입에 대해 만들려고했지만 동시 스레드의 최대 크기를 제한해야하는지 알지 못합니다.

최상의 CPU 사용률을 얻으려면 어떤 조언을합니까?

감사

답변

0

bulk insert에 봐.

데이터 테이블을 사용자 지정 형식으로 데이터베이스 테이블이나 뷰로 가져옵니다.

0

SqlBulkCopy을 사용해 보셨습니까? 기본적으로 데이터를 DataTable 인스턴스로로드 한 다음 SqlBulkCopy 클래스를 사용하여 SQL Server에로드합니다. bcp 또는 다른 유틸리티를 사용하는 것과 같이 현재 프로세스를 많이 변경하지 않고도 큰 성능 향상을 제공해야합니다.

+0

중요한 것은 삽입하기 전에 정보에 대한 작은 처리를해야한다는 것입니다. 기본적으로 파일에는 4 개의 다른 테이블에 들어있는 정보가 포함되어 있습니다. 한 번 살펴 보겠습니다. 유용 할 것입니다. 감사합니다. – willvv

+0

이 경우에도 도움이됩니다. 처리 결과를 저장하려면 4 개의 DataTable이 필요 하겠지만 어쨌든 성능을 향상시켜야합니다. –

2

정확하게 이해한다면 데이터베이스를 실행하는 동일한 컴퓨터에서 해당 파일을 읽고있는 것입니다. 내가 당신의 머신에 대해 많이 알지는 못했지만 병목 현상이 디스크 IO라고 확신합니다. 이것은 나에게 굉장히 계산 집약적이라고 들리지 않는다.

+0

프로세스가 계산 집약적이지는 않지만 4 개의 동시 삽입을 수행하면 SQL은 다중 코어를 활용하고보다 효율적인 방법으로 처리 할 것이라고 추측합니다. 그렇습니다. 입출력은 집중적이지만 최소한 SQL을 가능한 한 바쁘게 유지하려고합니다. – willvv

+0

그런 다음 다른 실제 드라이브에서 파일을 읽은 다음 db를 보유하고 있는지 확인하십시오. – innaM