Take the 2-minute tour ×
Database Administrators Stack Exchange is a question and answer site for database professionals who wish to improve their database skills and learn from others in the community. It's 100% free, no registration required.

I'm working with a developer who is struggling to stop the following error:

The server will drop the connection, because the client driver has sent multiple requests while the session is in single-user mode. This error occurs when a client sends a request to reset the connection while there are batches still running in the session, or when the client sends a request while the session is resetting a connection. Please contact the client driver vendor.

When this error occurs, a typical outcome is a session that is holding locks, but has no SQL running (no row in sys.dm_exec_sessions for the session_id), and causes blocking until it is killed. The cause of the blocking is straightforward, but how to stop the error from occurring is not.

Some facts about the problem:

  • The client is using Entity Framework (yes, I know...), with MARS enabled (yes, I know...)
  • SQL Server version is 10.00.5844 (SQL Server 2008 SP3 CU12). They probably won't upgrade major versions without extensive testing, but applying a newer CU is viable.
  • The client program shows up in sys.dm_exec_connections as .Net SqlClient Data Provider
  • The open connection appears to definitely have MARS enabled, as net_transport in sys.dm_exec_connections shows Session.
  • I'm told the application's connection string has asynchronous processing enabled, per Matt Neerincx's comment in this thread (I don't have access to the application servers to confirm this myself):

If you set Async=true on the connection string it should prevent this problem. If you are using MARS and using the same connection on multiple concurrent threads what can happen is the call to reset the connection can get slightly delayed and trigger this error. If you set Async=true we perform additional locking in the client driver to prevent this from happening.

Further information about this error is scarce. It appears to suggest that the client's program is calling sp_reset_connection while a batch is still running. I could set up a trace to confirm this, but I'd have to record quite a lot of unrelated activity, and the problem is only happening once every few days. Further, I'm not sure that the developer would be able to take advantage of this evidence in order to solve the problem.

Is there any other technique I can use as a DBA or sysadmin to troubleshoot this further, or anything I can suggest to the developer that might provide him with useful information or make the problem less likely to happen?

share|improve this question
    
Why is MARS enabled? Isn't there a way to tell EF to turn that crap off? –  Aaron Bertrand May 29 at 20:57
    
Yes, I may just suggest they test turning off MARS. I don't know why they are using it and doubt the developer does either as this is a spaghetti code legacy app handed down through many generations of developers. That said, I'm not sure if that will stop this error or make it occur incessantly. –  James May 29 at 21:00
    
1  
Yes, I think Ladislav's answer to that question highlights why the dev probably can't disable MARS easily. The app is probably coded to execute multiple queries on the same connection in parallel, and disabling MARS in the connection string may just make the error happen more often unless the dev rewrites the app. The only answer may be 'debug your app, or rewrite it and turn MARS off.' –  James May 29 at 21:06
    
For MARS configuration, there is a requirement on the server side that the client will not send second and subsequent batches until first batch that sends reset completes its round trip. But SQLClient driver does not prohibit the caller from doing this. The workaround to prohibit this on the client side is to set Async=true in the connection string so it will serialize executes. If that doesn't work, disable MARS on the client. Here's an article about connection leaks blogs.msdn.com/b/dataaccesstechnologies/archive/2009/10/13/… –  stacylaray May 30 at 1:24

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.