"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como o SQL Server pode ser usado como fila simultânea para vários clientes?

Como o SQL Server pode ser usado como fila simultânea para vários clientes?

Publicado em 23/12/2024
Navegar:833

How Can SQL Server Be Used as a Concurrent Queue for Multiple Clients?

Usando o SQL Server como uma fila simultânea com vários clientes

Em um cenário onde uma tabela serve como fila, é crucial configurá-la e consultá-la de uma forma que permite que vários clientes processem itens da fila simultaneamente.

Ao usar o bloqueio de linha pessimista com UPDLOCK e ROWLOCK, apenas um trabalhador pode adquirir o bloqueio e processar uma fileira. Para resolver esse problema e ativar o processamento simultâneo, considere a seguinte abordagem:

Implementação de fila usando a cláusula OUTPUT

A cláusula OUTPUT fornece um mecanismo para recuperar e modificar atomicamente uma linha . Veja como implementar uma fila usando a cláusula OUTPUT:

with CTE as (
  SELECT TOP(1) COMMAND, PROCESSED
  FROM TABLE WITH (READPAST)
  WHERE PROCESSED = 0)
UPDATE CTE
  SET PROCESSED = 1
  OUTPUT INSERTED.*;

Esta consulta executa as seguintes etapas atomicamente:

  1. Usa a dica WITH (READPAST) para pular qualquer linha bloqueada.
  2. Seleciona o topo linha com PROCESSED=0.
  3. Atualiza a linha selecionada para marcá-la como processada (PROCESSED=1).
  4. Exibe a linha atualizada, que pode ser usada pelo trabalhador para processar.

Otimização de índice clusterizado

Para otimizar ainda mais o desempenho, é crucial criar um índice clusterizado na coluna PROCESSED. Isso garante que os dados sejam armazenados na ordem de processamento.

CREATE CLUSTERED INDEX cdxTable on TABLE(PROCESSED, ID);

Evite consultas não padrão

Para um rendimento ideal, é essencial evitar consultar a tabela de filas usando métodos diferentes da operação de desenfileiramento descrita acima. Tentar espiar ou usar a tabela para fins adicionais pode causar conflitos e degradação do desempenho.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3