Ang*_*ker 17 sql-server-2005 sql-server service-broker
在我的应用程序的最后一个版本中,我添加了一个命令,告诉它在 Service Broker 队列中有东西到达时等待:
WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM MyQueue)
Run Code Online (Sandbox Code Playgroud)
DBA 告诉我,自从添加以来,日志大小已经飙升。这可能是正确的吗?还是我应该去别处寻找?
Rem*_*anu 18
任何活动的打开事务都会固定日志,防止截断并最终导致增长。如果你开始一个事务,写入日志然后永远等待消息最终会唤醒你,你只是固定日志并使其增长。
最近,我开始建议人们在激活过程中避开 WAITFOR 以及循环。只需发出RECEVe并完成,让激活机制为您循环(它确实如此)并且不要等待,只是简单的RECEIVE。
RECEIVE 的 WAITFOR 风格在内部创建了一个保存点。这会生成日志(至少 3 个日志记录)并且确实在等待时将日志固定到位。有一个很长的 WAITFOR 超时(或更糟糕的是,无限的)将是一个非常糟糕的做法。
小智 5
在 SQL Server 2008 R2 上,如果我执行 WAITFOR(RECEIVE),然后运行 DBCC OPENTRAN,它会将事务显示为活动的,即使没有任何先前的更新也是如此。
归档时间: |
|
查看次数: |
983 次 |
最近记录: |