2013-02-11 2 views
2

.net 응용 프로그램을 통해 SQL Server 테이블에 레코드를 삽입/업데이트하는 데 사용되는 구분 된 파일이 있습니다. 파일에는 약 80000 개의 레코드가 있으며 매일 처리됩니다. 내 질문 : 그것은 각각의 80000 행을 통해 스핀 또는 연결을 닫고 루프의 각 반복과 함께 다시해야 DB를 열어 연결을 유지하는 것이 안전하거나 합리적인가요? 그 자체로 성가 시게 들립니다. 그러나 나는 장시간 열린 연결을 유지하고 잠금 장치를 잡고 불필요하게 메모리를 사용하는 것에 대해 우려하고 있습니다. 확장 성과 안전하고 합리적인 방법은 무엇입니까?.net의 장기 실행 데이터베이스 작업

+0

'오랜 시간 동안'을 정의하십시오 : 시간? 이것은 하나의 트랜잭션 내에서 실행됩니까? 무슨 자물쇠를 말하는거야? SQL 또는 응용 프로그램 서버에서 메모리를 어디에 사용하고 있습니까? 나는 더 많은 확장 성 있고 안전한 것을 정교하게 요구할 것을 감히 요구하지 않는다. ... – rene

+0

현재 나는 샘플을 가지고 테스트하는데 단지 1 시간 정도 걸린다. 그러나 실제 파일을 제작으로 옮길 때 파일이 커지면 길어질 것입니다. 나는 하나의 거래를 사용하지 않고있다. –

+0

sqlserver가 최대 값입니까? 추가 직원 한 명을 처리 할 수 ​​있습니까? 주문이 중요합니까? – rene

답변

4

먼저 모든 행을 열거 나 닫지 마십시오. 80,000 개의 행에 대해서는 영원히 걸리고 오버 헤드에 추가됩니다. 행을 일괄 처리하는 것을 고려해 볼 수 있습니다 (연결을 재설정 할 때마다 10-500 행). 다행히도 .Net 응용 프로그램에서 데이터베이스에 많은 행을 삽입/업데이트하는 적절한 방법은 INSERT 또는 UPDATE 명령이 아닌 SQLBulkCopy methods을 사용하는 것입니다. SQLBulkCopy를 사용하여 데이터 행을 보관/준비 테이블에로드 한 다음 SQL 저장 프로 시저를 사용하여 실제 테이블 (들)에 대한 삽입/업데이트를 수행해야합니다.

SQLBulkCopy의 지속적인로드가 염려되는 경우 배치 옵션이 내장되어 있습니다.

이 기술을 사용하면 데이터의 초기 업로드는 이상이어야하며은 5 배 빨라지고 실제 테이블 삽입/업데이트는 단지 몇 초 만에해야합니다.

2

한 번 데이터를 가져올 필요가있었습니다. 하지만 미니 비즈니스 규칙을 실행해야했습니다. 또한 내 요구 사항에서 가능한 한 많은 행을 가져 오는 것이었지만 실패한 경우 로그에 기록합니다 (전체 가져 오기는 실패하지 않음).

아래 샘플을 작성했습니다.

http://granadacoder.wordpress.com/2009/01/27/bulk-insert-example-using-an-idatareader-to-strong-dataset-to-sql-server-xml/

I는 저장 프로 시저에 XML로 기록 ~ N의 번호 (예를 들면 N = 1000) 아래로 통과한다.

"스위트 스폿"을 찾으려면 N을 구성 할 수 있어야합니다. 그러나 한 번에 하나씩 너무 느리며 한 번에 8 만 명이 많은 것으로 보입니다. 1,000 (행) x 80 "실행".... 좋은 출발점, IMHO입니다.

가져 오기가 "벙어리"인 경우 이전에 제안 된 "SQLBulkCopy"가 가장 좋은 방법 일 수 있습니다. 그러나 검사 또는 유효성 검사가 있으면 내 견본이 좋은 제안 일 수 있습니다.

.......

또 다른 옵션 :

http://msdn.microsoft.com/en-us/library/ms162802.aspx

하지만 그건 정말 아니다

bcp.exe가 "그물 코드를 점".

+0

그래서 그 VS2005 예제했다. 이봐 요, 난 오래 됐어! 오늘 내가 그랬다면, 나는 그랬다. (1) VS2010을 사용하십시오 (적어도). (2) EnterpriseLibrary v5 (이미 OleDb abilties를 상자에서 꺼 냈을 것입니다)를 변경하고 (3) OPENXML 대신 "노드"구문을 사용하도록 TSQL을 변경합니다. 예 : http://pratchev.blogspot.com/2007/06/shredding-xml-in-sql-server-2005.html – granadaCoder