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:
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.
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