HiveBrain v1.2.0
Get Started
← Back to all entries
patternsqlModerate

Does firing off an indefinite WAITFOR increase the log file size?

Submitted by: @import:stackexchange-dba··
0
Viewed 0 times
thefilelogsizefiringwaitfordoesincreaseindefiniteoff

Problem

In the last release of my app, I added a command that tells it to wait when something arrives in the Service Broker queue:

WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM MyQueue)


The DBAs tell me that since the addition, the log sizes have gone through the roof. Could this be correct? Or should I be looking elsewhere?

Solution

Any active open transaction will pin the log, preventing truncation and eventually causing growth. If you start a transaction, write to the log and then wait forever in hope a message will eventually awake you, you just pinned the log and cause it to grow.

Lately I started recommending people to shun the WAITFOR in activated procedure, along with the loop. Just issue a RECIEVe and be done, let the activation mechanism loop for you (it does) and don't WAITFOR, just plain RECEIVE.

The WAITFOR flavor of RECEIVE creates a savepoint internally. This generates log (at least 3 log records) and does indeed pin the log in place while waiting. Having a long WAITFOR timeout (or worse, an infinite one) would be a very bad practice.

Context

StackExchange Database Administrators Q#30621, answer score: 18

Revisions (0)

No revisions yet.