.net 응용 프로그램을 통해 SQL Server 테이블에 레코드를 삽입/업데이트하는 데 사용되는 구분 된 파일이 있습니다. 파일에는 약 80000 개의 레코드가 있으며 매일 처리됩니다. 내 질문 : 그것은 각각의 80000 행을 통해 스핀 또는 연결을 닫고 루프의 각 반복과 함께 다시해야 DB를 열어 연결을 유지하는 것이 안전하거나 합리적인가요? 그 자체로 성가 시게 들립니다. 그러나 나는 장시간 열린 연결을 유지하고 잠금 장치를 잡고 불필요하게 메모리를 사용하는 것에 대해 우려하고 있습니다. 확장 성과 안전하고 합리적인 방법은 무엇입니까?.net의 장기 실행 데이터베이스 작업
답변
먼저 모든 행을 열거 나 닫지 마십시오. 80,000 개의 행에 대해서는 영원히 걸리고 오버 헤드에 추가됩니다. 행을 일괄 처리하는 것을 고려해 볼 수 있습니다 (연결을 재설정 할 때마다 10-500 행). 다행히도 .Net 응용 프로그램에서 데이터베이스에 많은 행을 삽입/업데이트하는 적절한 방법은 INSERT 또는 UPDATE 명령이 아닌 SQLBulkCopy methods을 사용하는 것입니다. SQLBulkCopy를 사용하여 데이터 행을 보관/준비 테이블에로드 한 다음 SQL 저장 프로 시저를 사용하여 실제 테이블 (들)에 대한 삽입/업데이트를 수행해야합니다.
SQLBulkCopy의 지속적인로드가 염려되는 경우 배치 옵션이 내장되어 있습니다.
이 기술을 사용하면 데이터의 초기 업로드는 이상이어야하며은 5 배 빨라지고 실제 테이블 삽입/업데이트는 단지 몇 초 만에해야합니다.
한 번 데이터를 가져올 필요가있었습니다. 하지만 미니 비즈니스 규칙을 실행해야했습니다. 또한 내 요구 사항에서 가능한 한 많은 행을 가져 오는 것이었지만 실패한 경우 로그에 기록합니다 (전체 가져 오기는 실패하지 않음).
아래 샘플을 작성했습니다.
I는 저장 프로 시저에 XML로 기록 ~ N의 번호 (예를 들면 N = 1000) 아래로 통과한다.
"스위트 스폿"을 찾으려면 N을 구성 할 수 있어야합니다. 그러나 한 번에 하나씩 너무 느리며 한 번에 8 만 명이 많은 것으로 보입니다. 1,000 (행) x 80 "실행".... 좋은 출발점, IMHO입니다.
가져 오기가 "벙어리"인 경우 이전에 제안 된 "SQLBulkCopy"가 가장 좋은 방법 일 수 있습니다. 그러나 검사 또는 유효성 검사가 있으면 내 견본이 좋은 제안 일 수 있습니다.
.......또 다른 옵션 :
http://msdn.microsoft.com/en-us/library/ms162802.aspx
하지만 그건 정말 아니다
bcp.exe가 "그물 코드를 점".그래서 그 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
- 1. 장기 실행 작업 시뮬레이션
- 2. Django 장기 실행 작업 - 데이터베이스 일관성
- 3. WebAPI에서 장기 실행 작업
- 4. 동기화 장기 실행 작업
- 5. 레일에서 장기 실행 작업
- 6. GAE에서 장기 실행 작업
- 7. 백그라운드에서 장기 실행 작업
- 8. Quartz.Net의 장기 실행 작업
- 9. 프레임 워크 장기 실행 작업
- 10. 장기 실행 파이썬 작업 완료율
- 11. AKKA 배우의 장기 실행 작업
- 12. iOS에서 장기 실행 백그라운드 작업
- 13. ASP.NET 장기 실행 작업 아이디어
- 14. 장기 실행 작업 취소 Asp.net
- 15. asp.net ThreadPool - 장기 실행 작업
- 16. 활동이 파괴되면 장기 실행 작업
- 17. PLINQ에서 장기 실행 작업 취소
- 18. TPL에서 장기 실행 작업 중단
- 19. PHP - 장기 실행 백그라운드 작업
- 20. 장기 실행 작업 성능 팁
- 21. 시트 및 장기 실행 작업
- 22. 장기 실행 작업 확장 EC2
- 23. SQL Server에서 장기 실행 작업 실행
- 24. Python 및 Flask의 장기 실행 작업
- 25. ASP.NET MVC 및 장기 실행 작업
- 26. ASP.NET 장기 실행 작업. 스레드가 중단됩니다 예외
- 27. .NET : 장기 실행 작업 동기화를위한 메커니즘
- 28. phonegap에서 장기 실행 백그라운드 작업 구현
- 29. Pyramid 웹 응용 프로그램에서 장기 실행 작업
- 30. 장기 실행 작업 및 Parse.com API 처리
'오랜 시간 동안'을 정의하십시오 : 시간? 이것은 하나의 트랜잭션 내에서 실행됩니까? 무슨 자물쇠를 말하는거야? SQL 또는 응용 프로그램 서버에서 메모리를 어디에 사용하고 있습니까? 나는 더 많은 확장 성 있고 안전한 것을 정교하게 요구할 것을 감히 요구하지 않는다. ... – rene
현재 나는 샘플을 가지고 테스트하는데 단지 1 시간 정도 걸린다. 그러나 실제 파일을 제작으로 옮길 때 파일이 커지면 길어질 것입니다. 나는 하나의 거래를 사용하지 않고있다. –
sqlserver가 최대 값입니까? 추가 직원 한 명을 처리 할 수 있습니까? 주문이 중요합니까? – rene