SQL Server性能调优实战——任务调度

Sql Server任务调度原理

  • Sql Server的任务调度不是直接由操作系统管理,而是通过SQLOS统一调度。SQLOS是2005版本才推出的!
  • SQLOS与windows系统交互,并以非抢占式的调度模式分配任务。

请先理解下面三个概念:

  1. Scheduler任务调度者:每一个Scheduler对应一个逻辑cpu,相当于银行的收银机。每个Scheduler同一时间只能有一个worker在处理任务。
  2. Worker:代表工作者,一个Scheduler上可以有多个工作者。
  3. Task:代表具体的任务,只有获得Worker后,才可以执行任务。

它们涉及到的系统表如下:

  1. sys.dm_os_schedulers:任务调度者信息表(动态管理视图)
    status字段参数:
    • VISIBLEONLINE:用于显示用户可用的Scheduler信息.
    • VISIBLEONLINE(DAC):代表该Scheduler专门为DAC进程预留。
  2. sys.dm_os_workers:工作者信息表(动态管理视图)
    1. State字段参数:
      • RUNNING:表示正在执行,此时工作者持有scheduler资源。
      • SUSPENDED:表示挂起,此时工作者在等待除scheduler外的资源。
      • RUNNABLE:表示准备就绪,正在等待scheduler资源进行调度。
    2. Wait_started_ms_ticks字段参数:
      • 这是一个数值,表示当前工作者线程进入SUSPENDED状态的时间点,使用sys.dm_os_sys_info中 ms_ticks字段的数值减去当前值,可以得到当前工作者线程进入SUSPENDED状态的毫秒数。
    3. 3.Wait_resumed_ms_ticks字段参数:
      • 该数值表示当前工作者线程进入RUNNABLE状态的时间点。使用sys.dm_os_sys_info表中ms_ticks字段的数值减去当前值,可以获得当前工作者线程进入可运行队列等待的毫秒数。
  3. sys.dm_os_tasks:任务信息表(动态管理视图)

任务调度与资源等待

先看看一个数据库请求是如何运作:待应用程序链接到数据库管理器,并成功通过连接校验后,就表示建立连接成功。
此时会分配一个session会话,可以通过dm_exec_sessions查询当前数据库所有会话。
当会话开始执行某一个语句,会向服务器发送一个请求(所有正在运行的请求可以在sys.dm_exec_requests查询),服务器识别后会将请求分解成一个或多个任务(Task),这些人物被分配到不同工作者线程中(Worker Task)处理.
posted @ 2021-08-05 17:09  道九年  阅读(290)  评论(0)    收藏  举报