Pergunta

Se eu tiver um procedimento armazenado ou um disparador no SQL Server 2008, pode fazer alguns cálculos SQL 'em outro segmento non-blocking'? ie. algo no fundo

Além disso, podem dois blocos de código SQL ser executado em paralelo? ou dois procedimentos armazenados ser executado em paralelo?

por exemplo. Imagine que nos é dado o trabalho cálculo das pontuações para cada usuário Stack Overflow (e por favor deixe tudo 'fazer isso elsehwere / serviço / batch / noite / etc, elswhere) depois que um usuário faz alguma 'ação'.

por isso temos um disparo na tabela Post, por isso, quando um novo post for inserido, os fogos desencadear e parte dessa lógica, ele calcula mais recente pontuação do usuário. Em vez de esperar para o proc armazenado ao fim e bloquear a corrente thread de SQL / executire, podemos pedir-lhe para calc o placar em segundo plano ou paralela.

aplausos!

Foi útil?

Solução

SQL Server não tem execução paralela ou diferida:. Cada bloco de execução de código em uma conexão é serial, uma linha após o outro

Para o processamento dissociar, você geralmente tem que usar trabalhos do SQL Server Agent ou o uso Serviço corretor . Estes iniciar a execução de uma nova conexão, nova sessão etc

Isso faz sentido:

  • E se você quiser reverter as alterações? O que a discussão de fundo fazer e como ele sabe?
  • Quais são os dados que ele usa? Novo, Antigo, espera de bloqueio, instantâneo?
  • O que se ele fica à frente da linha principal e usos obsoleto dados?

Outras dicas

Não, mas você pode escrever o pedido para uma fila. Service Broker, um componente SQL Server, oferece suporte para esse tipo de coisa. É provavelmente a melhor opção disponível para o processamento assíncrono.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top