Eu criei um gatilho DML (AFTER INSERT, UPDATE, DELETE) em uma tabela
A lógica do gatilho leva cerca de 30 segundos para executar
Portanto, se você alterar até 1 linha, leva ~ 30 segundos devido à execução do gatilho
O desenvolvedor me perguntou "Existe uma chance de o gatilho ser uma ação de disparar e esquecer?"
Eu disse que não, mas é realmente assim?
Pergunta:
O gatilho pode ser executado no modo "assíncrono"?
O aplicativo atualiza algumas linhas em poucos ms e pensa que a transação foi concluída e, em seguida, o gatilho é executado silenciosamente nos bastidores?
Eu entendo que isso realmente não parece bom do ponto de vista da consistência, mas ainda assim, é possível?
Tanto quanto sei, isso não é possível com o recurso de gatilhos do Azure/SQL Server. Uma razão provavelmente é, como você mencionou, quebrar a propriedade Consistency dos principais ACID de um banco de dados:
Os gatilhos devem ser acionados transacionalmente em sincronia com a operação que os fez disparar. Imagine se a linha de dados da qual o gatilho dependia fosse excluída antes que o gatilho fosse executado de forma assíncrona. Isso pode te trazer muitos problemas.
Como alternativa, você pode ter um gatilho que simplesmente adiciona uma linha a uma tabela de filas e um SQL Agent Job , por exemplo, que executa constantemente verificando essa tabela de filas e disparando um procedimento armazenado com a lógica do seu gatilho original para emular um evento assíncrono. Talvez isso melhoraria seu fluxo de trabalho?