Sql-Server
啟動無限期 WAITFOR 會增加日誌文件的大小嗎?
在我的應用程序的最後一個版本中,我添加了一個命令,告訴它等待服務代理隊列中的東西到達:
WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM MyQueue)
DBA 告訴我,自從添加以來,日誌大小已經達到頂峰。這可能是正確的嗎?還是我應該去別處尋找?
任何活動的打開事務都會鎖定日誌,防止截斷並最終導致增長。如果你開始一個事務,寫入日誌然後永遠等待,希望消息最終會喚醒你,你只是固定日誌並使其增長。
最近我開始建議人們在啟動過程中避開 WAITFOR 以及循環。只需發出 RECIEVe 並完成,讓啟動機制為您循環(它確實如此)並且不要等待,只是簡單的 RECEIVE。
RECEIVE 的 WAITFOR 風格在內部創建一個保存點。這會生成日誌(至少 3 條日誌記錄),並且在等待時確實將日誌固定到位。長時間等待超時(或更糟糕的是,無限超時)將是一種非常糟糕的做法。