SQL Server是否共享会话?

时间:2018-10-22 20:27:21

标签: sql-server concurrency sql-server-2014

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

在第二和第三次会议中,我运行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个不同的会话。可能是什么原因造成的?

此外,当我检查在Windows 1和3上运行查询的情况下注意到的查询状态时,一个状态始终处于运行状态,而另一个状态则处于可运行或暂停状态。在我在Windows 1和2上运行的另一种情况下,两者始终都在运行。

1 个答案:

答案 0 :(得分:0)

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

SELECT @@SPID 

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

会话在某种程度上是隔离的,但是根据所使用的锁定,会话在某种程度上或非常彼此是隔离的。 SQL Server将决定何时临时暂停会话,以便可以使用CPU /内存来轮流其他会话。如果一大堆会话都在更新同一张表,则可能存在争用,这将减慢SQL Server的速度。您要问的是行驶100英里需要多长时间。当然要视情况而定。

如果您有三个会话在执行相同的操作,则SQL Server不会将这三个操作合为一体。它将(如果可能的话)同时执行或依次执行。