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

来源:互联网 发布:捭阖冷知为上意思 编辑:程序博客网 时间:2024/04/27 22:57

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。

  

 

 

0 0