ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 数据库 >> SqlServer >> sql server中的任务调度与CPU深入讲解

sql server中的任务调度与CPU深入讲解(3/4)

来源:网络整理     时间:2018-08-08     关键词:

本篇文章主要介绍了" sql server中的任务调度与CPU深入讲解",主要涉及到方面的内容,对于SqlServer感兴趣的同学可以参考一下: 一. 概述我们知道在操作系统看来, sql server产品与其它应用程序一样,没有特别对待。但内存,硬盘,cpu又是数据库系统最重要的核心资源,所以在sql ...

             

2.5  Task在调度运行图如下:

                 

1. 当 Task 是Runnig时,它是Schedler的活动Worker。

2. 当 Task只等待CPU运行时,它被放入Schedler可运行的队列中。

3. 当 Task 在等待某个资源时(比如锁、磁盘输入/输出等)时,它处于“Suspended挂起状态” 状态。

4. 如果Task Scheduler挂起状态完成了等待,那么它就会被放到Scheduler 的Runnable队列的末尾。

5. 如果运行线程自动Yidlding让步,则将其放回Scheduler 的Runnable队列的末尾。

6. 如果运行的线程需要等待某个资源,它将被调出Scheduler调度器并进入挂起状态Waiter list。

7. 如果正在运行的线程完成它的工作,那么Runnable队列的顶部的第一个线程就变成了“运行”线程。

三. 使用dmv任务查看

3.1.  通过sys.dm_os_sys_info 查看scheduler与cpu的关系如下:

 SELECT cpu_count,max_workers_count,scheduler_count FROM sys.dm_os_sys_info

3.2  查看最大Worker数  

select max_workers_count from sys.dm_os_sys_info  

3.3  查看Task与Worker关系

--在每一个连接里,我们可能会有很多batch,分解成多个task以支持如并行查询
 select task_address,task_state,scheduler_id,session_id,worker_address 
 from sys.dm_os_tasks where session_id>50

select state,last_wait_type,tasks_processed_count,task_address, worker_address, scheduler_address
 from sys.dm_os_workers where worker_address =0x00000000043621A0

3.4 查看Scheduler

--scheduler_id<255 代表用户CPU,相反代表SYSTEM SCHEDULER
SELECT
 scheduler_id,
 cpu_id,
 is_online,
 current_tasks_count,
 runnable_tasks_count,
 current_workers_count,
 active_workers_count,
 work_queue_count
 FROM sys.dm_os_schedulers
 WHERE scheduler_id < 255

cpu_id:关联的cpu 。 CPU ID  >=255 这类Scheduler都用于系统内部使用。比如说资源管理、DAC、备份还原操作等。

相关图片

相关文章