SQL Server 2008 저장된 프로 시저 (또는 트리거)가 수동으로 병렬 또는 배경 일부 논리를 백그라운드 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1647934

문제

SQL Server 2008에 저장된 프로 시저 또는 트리거가있는 경우 다른 비 블로킹 스레드에서 SQL 계산을 수행 할 수 있습니까? 즉. 백그라운드에 뭔가

또한 두 SQL 코드 블록이 병렬로 실행될 수 있습니까? 또는 두 명의 저장된 Proc가 병렬로 실행됩니까?

예를 들어. 사용자가 '작업'을 수행 한 후 각 스택 오버 플로우 사용자의 점수를 계산하는 작업이 각 스택 오버 플로우 사용자에 대한 점수를 계산한다고 상상해보십시오 (그리고 Elswere/Service/Batch/Etc, Elswhere).

따라서 게시물 테이블에 방아쇠가 있으므로 새 게시물이 삽입되면 트리거가 발생하고 해당 논리의 일부가 해당 논리의 일부가 사용자의 최신 점수를 계산합니다. 저장된 Proc가 현재 SQL 스레드 / Executire를 완성하고 차단하기를 기다리는 대신 배경 또는 평행의 점수를 계산하도록 요청할 수 있습니다.

건배!

도움이 되었습니까?

해결책

SQL Server에는 병렬 또는 연기 실행이 없습니다. 연결에서 실행 코드의 각 블록은 직렬이며, 한 줄은 다른 줄입니다.

처리를 해체하려면 일반적으로 SQL Server 에이전트 작업을 사용하거나 사용해야합니다. 서비스 중개인. 새로운 연결, 새 세션 등으로 실행이 시작됩니다.

이것은 의미가 있습니다 :

  • 변경 사항을 롤백하고 싶다면 어떻게해야합니까? 배경 스레드는 무엇을하고 어떻게 알 수 있습니까?
  • 어떤 데이터를 사용합니까? 새롭고 오래된, 잠금 대기, 스냅 샷?
  • 기본 스레드보다 앞서 나가서 오래된 데이터를 사용하면 어떻게됩니까?

다른 팁

아니요,하지만 요청을 대기열에 쓸 수 있습니다. SQL Server 구성 요소 인 Service Broker는 이러한 종류의 것을 지원합니다. 아마도 비동기 처리에 사용할 수있는 최상의 옵션 일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top