• SQL Server架构SQL Server的执行模式和SQLOS


    SQL Server架构----SQL Server的执行模式和SQLOS

    2013-12-31 10:00:22 burgess_liu 阅读数 1941更多

    分类专栏: SQL Server 2012的内部原理和故障排除

    SQLOS是SQL Server体系结构的核心,因此,你需要理解为何会存在它、以及SQL Server工作时它做什么。
    总之,SQLOS是位于SQL  Server 和 WIndows之间的用户模式层。它用来做低级操作,诸如调度、I/O完成、内存管理和资源管理。为了探究究竟这是什么意思,为何需要它,你首先要理解SQL Server的执行模式。

    执行模式

    当一个应用程式认证到SQL Server,它在对话的上下文中建立一条连接,这由一个session_id标识。
    你可以通过查询sys.dm_exec_sessions看到所有认证的对话清单。
    在一个对话里,当一个执行请求做出时,为了持续,SQL Server会把工作分成一个或多个任务,然后为每个任务关联一个工作者线程。
    每个线程可以是下面三种状态之一
    Running----处理器在一次仅能执行一件事情,当前正在处理器上执行的线程将有一个running状态。
    Suspended----SQL Server有一个合作调度者,因此,正在运行的线程会屈服于处理器,在它们等待资源时变成暂停(suspended),这就是我们说的等待。
    Runnable----当一个线程完成等待时,它会变成可运行状态,这就意味着它准备好了再次执行,这被称为信号等待。

    如果没有可用的工作线程,并且尚未达到max worker threads,那么SQL Server会分配一个新的工作线程。如果达到最大的工作线程数,那么任务就会等待,直到一个线程变成可用,这个等待的类型是THREADPOOL。

    默认的最大工作线程数是基于CPU架构和逻辑处理器的数量:
    32位OS: Max Worker Threads=256 (逻辑CPU<=4)     Max Worker Threads=256 +((逻辑CPU数-4)*8)   (逻辑CPU>4)
    64位OS: Max Worker Threads=512 (逻辑CPU<=4)     Max Worker Threads=512 +((逻辑CPU数-4)*16)   (逻辑CPU>4)

    你也可以通过执行如下语句来获取最大工作线程数:SELECT max_workers_count FROM sys.dm_os_sys_info

    用完工作线程通常是大量并发的并行执行计划引起,它甚至表明服务器的性能达到极限,你需要添加处理器。

    每个工作线程需要2M(64位)或0.5M(32位)的RAM,因此,SQL Server仅仅在需要它们的时候创建线程,而不是一次性创建所有。

    你可以查看SQL Server当前有多少线程:

    SELECT count(*) FROM sys.dm_os_workers

    调度器

    每个线程有个关联的调度器,调度器为处理器上它的每个线程调度时间。SQL Server的调度器数量=SQL Server用的逻辑处理器的数量+专用管理员连接(DAC)。你可以通过sys.dm_os_schedulers查看调度器的相关信息,通过SELECT cpu_count,scheduler_count,scheduler_total_count FROM SYS.dm_os_sys_info可以查看CPU数、调度数。
     下图显示了对话、任务、线程、调度器与CPU之间的关系:

     SQLOS

    SQLOS产生的背景是为了整合资源,提升性能。另外,你可以通过sys.dm_os_打头的DMV来查看SQLOS的信息。对于体系结构中的各个组件,SQLOS起到支持它们的角色的作用。

    关于SQL SERVER SQLOS的任务调度,你可以参考http://blogs.msdn.com/b/apgcdsd/archive/2011/11/24/sql-server-sqlos.aspx

      

  • 相关阅读:
    C#实现函数超出指定时间,自动退出
    批量下载github代码,同时含有解压zip,遍历文件函数
    MSBuild构建工作空间,解决project.Documents.Count()=0的问题
    使用Roslyn 使用MSBuild进行编译,项目不报错,但是运行显示ReflectionTypeLoadException,解决方案
    基于roslyn实现函数与函数之间的依赖关系
    discount C#
    对Symbol的获取(Roslyn)
    AcWing 955. 维护数列(splay插入,删除,区间修改,区间翻转,区间求和,区间求最大子段和)
    AcWing 1063. 永无乡(并查集, 启发式合并,splay)
    AcWing 2437. Splay
  • 原文地址:https://www.cnblogs.com/grj001/p/12223848.html
Copyright © 2020-2023  润新知