SQL Server 是否共享会话?



在SQL Server 2014中,我在同一数据库上打开了3个会话。在第一个会话中,我运行Update Statistics A.我的时间大约需要 1 分钟。

在我的第 2 和第 3 节课中,我运行一个Update Statistics B(一次一个(。每个也需要大约 1 分钟。

然后,我在会话 1 上运行Update Statistics A,在会话 2 上运行Update Statistics B,两者同时运行。每个查询在大约 1 分钟内完成,如预期的那样。

然后,我在窗口 1 上运行Update Statistics A,在窗口 3 上运行Update Statistics B,两者同时运行。现在,每个查询需要近 2 分钟。

我检查了sp_who2,可以在这里看到 3 个不同的会话。可能的原因是什么?

此外,当我检查查询状态时,我注意到在窗口 1 和 3 上运行查询的场景中,一种状态始终处于运行状态,而另一种状态是可运行或挂起的。在另一种情况下,我在窗口 1 和 2 上运行,两者都始终在运行。

会话总是不同的。您可以在 SQL Server Management Studio 窗口底部看到 SPID,也可以执行以下操作:

SELECT @@SPID 

以查看会话号。SQL Server是一个多访问并发系统,它管理自己的会话和线程。活动会话的数量取决于会话正在执行的操作,会话执行某些操作的时间以及运行 SQL Server 的计算机的资源量 - 通常更多的内存/CPU 将导致更多的活动同时会话。当然,可能会有一些繁重的会话会占用机器的所有资源。

会话在某种程度上是孤立的,但根据所使用的锁定,会话在某种程度上或非常相互隔离。SQL Server 将决定何时暂时挂起会话,以便其他会话可以使用 CPU/内存轮流。如果一大堆会话都在更新同一个表,则可能存在争用,这会减慢 SQL Server 的速度。你要问的是开车 100 英里需要多长时间。当然要看情况。

如果有三个会话执行相同的操作,SQL Server 不会将这三个操作合并为一个。它将执行每个(如果可能的话,同时(或串行执行。

最新更新