Search code examples
c#sql-servermultithreadingsqlconnectionsqlcommand

How many concurrent statements does SqlConnection support


How many concurrent statements does C# SqlConnection support?

Let's say I am working on Windows service running 10 threads. All threads use the same SqlConnection object but different SqlCommand object and perform operations like select, insert, update and delete on either different tables or same table but different data. Will it work? Will a single SqlConnection object be able to handle 10 simultaneous statements?


Solution

  • How many concurrent statements does C# SqlConnection support?

    You can technically have multiple "in-flight" statements, but only one acutally executing.

    A single SqlConnection maps to a single Connection and Session in SQL Server. In Sql Server a Session can only have a single request active at-a-time. If you enable MultipeActiveResultsets you can start a new query before the previous one is finished, but the statements are interleaved, never run in parallel.

    MARS enables the interleaved execution of multiple requests within a single connection. That is, it allows a batch to run, and within its execution, it allows other requests to execute. Note, however, that MARS is defined in terms of interleaving, not in terms of parallel execution.

    And

    execution can only be switched at well defined points.

    https://learn.microsoft.com/en-us/sql/relational-databases/native-client/features/using-multiple-active-result-sets-mars?view=sql-server-ver15

    So you can't even guarantee that another statement will run whenever one becomes blocked. So if you want to run statements in parallel, you need to use multiple SqlConnections.

    Note also that a single query might use a parallel execution plan, and have multiple tasks running in parallel.