테이블을 텍스트 파일로 내보내는 가장 빠른 방법은 무엇입니까


17

SQL Server 2012 데이터베이스와 3 백만 개의 행과 50 개의 열이있는 테이블이 있습니다. 무인 백그라운드 .net 프로세스 (일부 SQL 또는 Powershell 명령을 발행 할 수 있음)를 사용하여 각 데이터 행마다 한 줄씩 텍스트 파일로 내보내는 가장 빠른 방법은 무엇입니까? .net 프로세스는 내보내기가 완료된시기 또는 오류가 있는지 알아야합니다. 데이터 유형은 모두 int또는 nvarchar입니다.

ado.net을 사용하여 select *명령 을 실행하고 데이터 리더를 반복하고 각 레코드의 파일에 쓰는 순수한 C # 코드 가 느리고 가정 할 수 없다고 가정합니다.

SQL Server 컴퓨터의 로컬 폴더가 아닌 원격 공유 네트워크 폴더로 내보내는 것이 이상적입니다. SQL Server는 HA 클러스터입니다. SSIS가 이에 더 적합합니까? 데이터 변환이 필요하지 않습니까?

.Net 프로세스는 시스템 A에서 실행되고 시스템 B의 SQL Server에서 실행되며 최종 파일 대상은 네트워크 공유입니다. 한 가지 옵션은 SQL Server가 파일을 네트워크 공유에 직접 작성하는 것입니다. 다른 옵션은 SQL Server가 시스템 A에 쓴 다음 파일이 기록 될 때 .net 프로세스가 파일을 네트워크 공유에 복사하는 것입니다. 공식적인 SLA는 없지만 파일 쓰기에 30 분-1 시간이 걸립니다.


3
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."-.NET 앱은 어디에서 실행됩니까? 최악의 경우, 이는 데이터가 2 개의 네트워크 홉을 통해 이동해야한다는 것을 의미 할 수 있으며 이는 아마도 가장 큰 병목 현상이 될 것입니다. 또한 행 수는 다소 관련이 없습니다. 대략적인 총 데이터 크기는 얼마입니까? 이 프로세스를 위해 충족해야하는 성능 SLA가 있습니까?
Jon Seigel

답변:


10

오래된 기사를보고 싶다면 모든 기사를 반복하는 것이 옵션입니다.

시도해야 할 몇 가지 다른 옵션은 다음과 같습니다.

그리고 재미를 위해 다른 세션에서 반복하면서 이러한 모든 옵션을 시도 할 수 있습니다. :-).


4

가져 오기 내보내기 마법사를 사용하면됩니다. 마지막에는 작업을 저장하는 옵션이 제공되며, 그런 다음 SQL Server 에이전트로 예약 할 수 있습니다. 운영자로 자신을 추가하고 서버에서 DB Mail을 구성하면 작업이 완료되거나 실패 할 때 이메일을 보낼 수 있습니다.

진지하게, 왜 바퀴를 재발 명합니까?

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


전혀 나쁘지 않습니다. 실제로 이것은 결국 SSIS 패키지를 절약합니다. 일회성 작업이라면 해결책이 될 수 있습니다.
Marian

2

다른 사람들은 bcp가 가장 빠른 방법이어야한다고 말했지만 CLR 솔루션에 비해 이점이 없습니다. 데이터베이스 테이블에 대한 삽입시 다양한 대량 복사 구현이 항상 이깁니다. 이는 주로 로깅을 최소화하고 다중 스레드 쓰기를 가능하게하는 방식 때문입니다. 플랫 파일에 쓸 때 이러한 제약 조건이 없습니다.

우리는 CLR을 사용하여 쿼리 출력을 파일로 덤프합니다. 또한 파일을 만든 후 자동으로 압축 할 수 있도록 Ionic.Zip.dll 을 통합합니다 .

다음은 op가 blob보다 bcp보다 두 배 빠르다고 주장하는 예입니다. /programming/10325338/fastest-way-to-export-blobs-from-table-into-individual-files


그 특별한 질문은 그리 상세하지 않습니다. 다음 질문 -BLOB 데이터에 대한 BCP 성능 최적화 를 읽으 십시오. BCP 만 가지고있는 많은 재생 옵션에 대한 아이디어를 반드시 제공 할 것입니다 :-).
Marian

나는 링크를보고 완전히 동의합니다. 그러나 대부분의 최적화 지점은 SQL Server에 데이터를로드하기위한 것입니다. SQL 데이터를 플랫 파일에 쓸 때 bcp가 streamwriter 또는 filestream CLR 솔루션보다 빠르다는 사실을 아직 보지 못했습니다.
brian

1

간단한 SSIS 패키지를 만들 수 있습니다.

고급 방법은 다음과 같습니다.

  1. 연결 관리자에서 데이터베이스에 대한 OLEDB 연결 만들기
  2. 데이터 흐름 변환을 컨트롤 흐름으로 끈 다음 클릭하여 데이터 흐름을 가져옵니다.
  3. 도구 상자에서 OLEDB 소스를 데이터 흐름으로 끌어서 1 단계에서 만든 연결을 사용하여 원하는 테이블에 연결되도록 편집합니다.
  4. 플랫 파일 대상을 도구 상자에서 데이터 흐름으로 끌어서 OLEDB 소스를 연결하십시오.
  5. 플랫 파일 대상에서 "새로 만들기"를 선택하면 열 구조가 동일한 새 플랫 파일이 만들어지며 원하는 구분 기호를 사용하거나 원하는 경우 파일로 고정 할 수 있습니다.
  6. 그것을 실행하십시오.

멍청한 놈은 이것을 알아낼 수 있어야합니다. Anti-GUI 사용자는이 솔루션을 좋아하지 않으므로 BCP 사용에 어려움을 겪는 기술력이 부족한 개인을위한 대안 일뿐입니다.

데이터 파일의 형식을보다 유연하게 지정할 수 있습니다. BCP와 그 모든 것에서이 작업을 수행 할 수 있지만 복잡성을 제거합니다. 그러나 사용자 정의 파일 헤더를 넣고 첫 번째 행으로 "열 이름"을 작성하면 플랫 파일을보다 사람이 사용할 수있게되므로 작은 이점이 있습니다.

저장 한 것을 잊지 마십시오. 한 번 만든 경우 다시 요청 될 것입니다! 도움이 되었기를 바랍니다..


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.