이 오래된 질문은 더 포괄적 인 답변이 필요합니다. 이 중 일부는 여기에 다른 답변 / 설명에 언급되어 있고 다른 일부는 OP의 특정 상황에서 작동하거나 작동하지 않을 수 있지만 SQL에서 저장된 프로세스를 비동기식으로 호출하려는 다른 사람에게는 작동 할 수 있습니다.
완전히 명시 적으로 말하면 : TSQL 자체 는 다른 TSQL 작업을 비동기 적으로 시작할 수있는 기능 이 없습니다 .
그렇다고 아직 많은 옵션이 없다는 것을 의미하지는 않습니다.
- SQL 에이전트 작업 : 여러 SQL 작업을 작성하고 원하는 시간에 실행되도록 스케줄하거나을 사용하여 "마스터 제어"저장 프로 시저에서 비동기식으로 시작하십시오
sp_start_job
. 프로그래밍 방식으로 진행 상황을 모니터링해야하는 경우 작업이 각각 사용자 정의 JOB_PROGRESS 테이블을 업데이트하는지 확인하십시오 (또는 Gregory A. Larsen 의이 우수한 기사 에 xp_sqlagent_enum_jobs
설명 된대로 문서화되지 않은 기능 을 사용하여 완료했는지 확인할 수 있습니다 ). 서로 다른 매개 변수로 동일한 스토어드 프로 시저를 실행하더라도 병렬 프로세스를 실행하려는만큼 별도의 작업을 작성해야합니다.
- SSIS 패키지 :보다 복잡한 비동기 시나리오의 경우 간단한 분기 작업 흐름으로 SSIS 패키지를 만듭니다. SSIS는 이러한 작업을 개별 spid로 시작하여 SQL이 병렬로 실행합니다. SQL 에이전트 작업에서 SSIS 패키지를 호출하십시오.
- 사용자 지정 응용 프로그램 : 해당 언어에서 제공하는 비동기 메서드를 사용하여 원하는 언어 (C #, Powershell 등)로 간단한 사용자 지정 응용 프로그램을 작성합니다. 각 애플리케이션 스레드에서 SQL 저장 프로 시저를 호출하십시오.
- OLE 자동화 : SQL 에서이 기사에 설명 된대로 Gregory A. Larsen에 의해 서로 저장된 proc을 호출하는 새 프로세스를 사용
sp_oacreate
하고 sp_oamethod
실행 하십시오 .
- Service Broker : 이 기사의 비동기 실행에 대한 좋은 예인 Service Broker를 살펴보십시오 .
- CLR 병렬 실행 : 사용 CLR 명령
Parallel_AddSql
과 Parallel_Execute
에 설명 된대로 이 문서 앨런 카플란에 의해 (SQL2005 + 만 해당).
- 예약 된 Windows 작업 : 완전성에 대해 나열되었지만이 옵션에 관심이 없습니다.
만약 그렇다면 간단한 시나리오에서는 여러 개의 SQL 에이전트 작업을 사용하고보다 복잡한 시나리오에서는 SSIS 패키지를 사용했을 것입니다.
귀하의 경우 SQL 에이전트 작업을 호출하는 것은 간단하고 관리하기 쉬운 선택처럼 들립니다.
마지막 의견 : SQL은 가능할 때마다 개별 작업을 병렬화하려고 이미 시도합니다. 즉, 서로를 대신하지 않고 동시에 2 개의 작업을 실행한다고해서 더 빨리 완료 될 것이라는 보장은 없습니다. 실제로 어떤 것이 개선되는지 아닌지 신중하게 테스트하십시오.
동시에 8 개의 작업을 실행하기 위해 DTS 패키지를 만든 개발자가있었습니다. 불행히도, 그것은 단지 4 CPU 서버였습니다 :)
* 기본 설정을 가정합니다. 서버의 최대 병렬 처리 수준 또는 선호도 마스크를 변경하거나 MAXDOP 쿼리 힌트를 사용하여이를 수정할 수 있습니다.