SqlConnection 支持多少并发语句

Fra*_*tin 1 c# sql-server multithreading sqlcommand sqlconnection

C#SqlConnection支持多少个并发语句?

假设我正在处理运行 10 个线程的 Windows 服务。所有线程使用相同的SqlConnection对象但不同的SqlCommand对象,并在不同的表或相同的表但不同的数据上执行选择、插入、更新和删除等操作。它会起作用吗?单个SqlConnection对象能否同时处理 10 条语句?

Dav*_*oft 5

C# SqlConnection 支持多少个并发语句?

从技术上讲,您可以有多个“飞行中”语句,但只有一个实际执行。

单个 SqlConnection 映射到 SQL Server 中的单个连接和会话。在 Sql Server 中,一个会话一次只能有一个活动请求。如果您启用 MultipeActiveResultsets,您可以在前一个查询完成之前启动一个新查询,但语句是交错的,永远不会并行运行。

MARS 支持在单个连接中交错执行多个请求。也就是说,它允许一个批处理运行,并且在它的执行过程中,它允许其他请求执行。但是请注意,MARS 是根据交错定义的,而不是根据并行 执行定义的。

执行只能在明确定义的点上切换。

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

因此,您甚至无法保证每当一个语句被阻塞时就会运行另一个语句。所以如果要并行运行语句,就需要使用多个SqlConnections。

另请注意,单个查询可能使用并行执行计划,并且多个任务并行运行。