none
session_id与spid RRS feed

  • 问题

  •  Sys.dm_exec_requests中的session_id与dbo.sysprocesses中的spid是什么关系?会话session_id与进程spid,task,WORKER ,SCHEDULER,以及连接是什么关系?1个会话是对应一个session_id吗?一个session_id可以包含很多spid吗?
    2012年10月15日 5:08

答案

  • 你好,
     
    一个会话对应一个session_id, session_id是该会话的唯一标识符。在SQL Server中session_id是SQL实例的会话标识符。
     
    SPID顾名思义是进程ID, 其实本质上是session, 在SQL Server 2000版本以前,SPID 和session_id 其实是一样的。每次一个应用程序连接到SQL Server, 一个新的SPID 就被创建了。
     
    SQL Server 通过WORKER, SCHEDULER, TASK等来对任务进行调度和处理:
     
    通常SCHEDULER的数量和CPU 的数量是一样的。
     
    而WORKER (又称为WORKER THREAD), 则是工作线程。在一台服务器上,我们可以有多个工作线程。因为每一个工作线程要耗费资源,所以,SQL Server有一个最大工作线程数。一个TASK进来,系统会给它分配一个工作线程进行处理。但是当所有的工作线程都在忙,而且已经达到了最大工作线程数,SQL Server就要等待,直到有一个忙的工作线程被释放。最大工作线程数可以通过下面的查询得到。SQL SERVER并不是一开始就把这些所有的工作线程都创建,而是依据需要而创建。
     
    TASK是由BATCH而来。我们知道,一个连接,可以包含多个BATCH,而每个BATCH则可以分解成多个TASK。
     
    他们之间的关系是这样的,每个连接都有相应的SPID,然后每个连接里又有很多batch,每个batch又可以分解为多个task。然后每个CPU会对应一个SCHEDULER,每个SCHEDULER会有多个worker,而Worker是真正的执行单元,当一个worker用完了,新的连接就会失败。
     
    这篇文章介绍了这些关系,请您参考下:http://www.cnblogs.com/nzperfect/archive/2011/11/28/2265921.html .

    Thanks,
    Amy Peng


    Please remember to click "Mark as Answer" and "Vote as Helpful" on posts that help you. This can be beneficial to other community members reading the thread.



    2012年10月17日 3:55
    版主
  • LZ可以看一下我写的这篇文章,里面介绍了scheduler  、worker 、 task  、 yieding这几个名词的概念与SQLSERVER独特的任务调度系统SQLOS

    文章地址:

    SQLSERVER独特的任务调度算法"SQLOS"


    给我写信: QQ我:点击这里给我发消息


    2012年10月18日 1:46

全部回复

  • 是一个值
    2012年10月15日 8:26
  • 你好,
     
    一个会话对应一个session_id, session_id是该会话的唯一标识符。在SQL Server中session_id是SQL实例的会话标识符。
     
    SPID顾名思义是进程ID, 其实本质上是session, 在SQL Server 2000版本以前,SPID 和session_id 其实是一样的。每次一个应用程序连接到SQL Server, 一个新的SPID 就被创建了。
     
    SQL Server 通过WORKER, SCHEDULER, TASK等来对任务进行调度和处理:
     
    通常SCHEDULER的数量和CPU 的数量是一样的。
     
    而WORKER (又称为WORKER THREAD), 则是工作线程。在一台服务器上,我们可以有多个工作线程。因为每一个工作线程要耗费资源,所以,SQL Server有一个最大工作线程数。一个TASK进来,系统会给它分配一个工作线程进行处理。但是当所有的工作线程都在忙,而且已经达到了最大工作线程数,SQL Server就要等待,直到有一个忙的工作线程被释放。最大工作线程数可以通过下面的查询得到。SQL SERVER并不是一开始就把这些所有的工作线程都创建,而是依据需要而创建。
     
    TASK是由BATCH而来。我们知道,一个连接,可以包含多个BATCH,而每个BATCH则可以分解成多个TASK。
     
    他们之间的关系是这样的,每个连接都有相应的SPID,然后每个连接里又有很多batch,每个batch又可以分解为多个task。然后每个CPU会对应一个SCHEDULER,每个SCHEDULER会有多个worker,而Worker是真正的执行单元,当一个worker用完了,新的连接就会失败。
     
    这篇文章介绍了这些关系,请您参考下:http://www.cnblogs.com/nzperfect/archive/2011/11/28/2265921.html .

    Thanks,
    Amy Peng


    Please remember to click "Mark as Answer" and "Vote as Helpful" on posts that help you. This can be beneficial to other community members reading the thread.



    2012年10月17日 3:55
    版主
  • LZ可以看一下我写的这篇文章,里面介绍了scheduler  、worker 、 task  、 yieding这几个名词的概念与SQLSERVER独特的任务调度系统SQLOS

    文章地址:

    SQLSERVER独特的任务调度算法"SQLOS"


    给我写信: QQ我:点击这里给我发消息


    2012年10月18日 1:46