SqlConnection是否可以并行处理查询?

8
如果我打开一个到 SQL Server 的 SqlConnection,然后从多个后台线程发出多个查询,所有查询都使用同一个连接 - 这些查询会按顺序执行(不考虑顺序)吗?
具体而言,如果在一个查询开始时更改隔离级别,然后在该查询结束时恢复它 - 是否有可能这个隔离级别会应用于其他查询?
我认为不会,但想确认一下。
SQL Server 2008 R2
我说的是 System.Data.SqlClient.SqlConnection

3
SqlConnection 不具备线程安全性。您不应在多个线程上使用它。相反,您应该为每个线程创建一个连接。 - Lasse V. Karlsen
1
在多个线程上使用SqlConnection对象的唯一安全方法是不要同时在超过1个线程上使用它。是的,您在一个线程上更改的任何状态或配置都会“泄漏”到后续线程中。 - Lasse V. Karlsen
@LasseV.Karlsen 你觉得使用async/await怎么样?我认为THX-1138指的是在同一连接下可能同时运行多个查询的可能性。 - Jonas Stawski
1
我不知道async/await会如何改变我的答案,除了说如果你真的想知道在同一线程上执行多个异步查询会发生什么,那我不知道。 - Lasse V. Karlsen
1个回答

2

这是一个有陷阱的问题,因为正如@LasseV.Karlsen所说,SqlConnection不是线程安全的,因此行为将是不可预测的。我过去尝试过类似的情况但失败了。以下是我对你的问题中参数会发生的事情的看法。

SqlConnection是否可以并行处理查询?

不行,它没有被设计用于此任务。尽管可以通过构建一个进程来以这种方式使用它的事实是很诱人的。

那这些查询会按顺序执行吗?

会的。查询将按照接收到的顺序由SQL引擎执行。虽然您的连接对象可能不知道将结果传递回哪个线程,从而导致“对象引用错误”。

这个隔离级别是否可能适用于其他查询?

是的。如果更改分配给SqlConnection的事务对象的隔离级别,那么其中一个线程尝试使用该连接时,它将默认具有该隔离级别。此时次要线程执行此操作的时间是无法控制的。您可以为每个命令分配一个事务(从而获得所需的唯一隔离级别),但仍然存在连接不安全的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接