Trigger

延遲或非同步 DML 觸發器執行

  • February 23, 2021

我在表上創建了一個 DML 觸發器(AFTER INSERT、UPDATE、DELETE)

觸發器的邏輯大約需要 30 秒才能執行

因此,即使您更改 1 行,由於觸發器執行,也需要 30 秒左右

開發人員問我“觸發器是否有可能是觸發並忘記操作?”

我說不是,但真的是這樣嗎?

問題:

可以在“非同步”模式下執行觸發器嗎?

應用程序在幾毫秒內更新了幾行,並認為事務已完成,然後觸發器在後台靜默執行?

我知道從一致性的角度來看,這實際上看起來並不好,但是,這可能嗎?

據我所知,這對於 Azure / SQL Server的觸發器功能是不可能的。正如您所提到的,一個原因可能是它破壞了數據庫ACID主體的Consistency屬性:

…寫入數據庫的任何數據必鬚根據所有定義的規則有效,包括約束、級聯、觸發器及其任何組合。這可以防止非法事務導致數據庫損壞…

觸發器旨在與導致它們觸發的操作同步觸發事務。想像一下,如果觸發器依賴的數據行在觸發器非同步執行之前被刪除。這會給你帶來很多麻煩。

或者,您可以有一個觸發器,只需將一行添加到隊列表中,以及一個SQL 代理作業,例如,它不斷執行檢查該隊列表並使用原始觸發器中的邏輯觸發儲存過程以模擬非同步事件。也許這會改善您的工作流程?

引用自:https://dba.stackexchange.com/questions/285798