IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]----------------------SQLOS相关查询,SQLSERVER线程,调度器,工作任务----------------------

    fredrickhu发表于 2012-12-05 15:17:30
    love 0

    --SELECT * FROM SYS.dm_os_schedulers --SQL SERVER的每个调度器
    --select affinity from sys.dm_os_workers --SQL SERVER的每个工作任务
    --select * from sys.dm_os_threads --在SQL SERVER进程中的所有SQLOS线程列表
    --select * from sys.dm_os_tasks --SQL SERVER实例上每一个活动的任务
    --select * from sys.dm_os_waiting_task --正在等待资源的任务队列的信息


    --SQL SERVER任务所在的调度器监视器
    SELECT
    t1.session_id,
    CONVERT(varchar(10),t1.status) as status,
    CONVERT(varchar(10),t1.command) as command,
    CONVERT(varchar(10),t2.state) as work_state,
    t1.task_address
    FROM
    SYS.dm_exec_requests t1 join sys.dm_os_workers t2
    on
    t1.task_address=t2.task_address
    where
    t1.command='resource monitor'

    --查询跨所有计划程序输出 SQL Server 中的工作线程和任务的状态
    SELECT
    scheduler_id,
    cpu_id,
    parent_node_id,
    current_tasks_count,
    runnable_tasks_count,
    current_workers_count,
    active_workers_count,
    work_queue_count
    FROM sys.dm_os_schedulers

    /*-------说明---------------
    计划程序的 ID 值 < 1048576。
    ID >= 1048576 的计划程序称为隐藏计划程序。
    计划程序 255 代表专用管理员连接 (DAC)。
    每个实例都有一个 DAC 计划程序。
    当 runnable_tasks_count 返回 0 时,表示没有正在运行的当前任务。但是,可能存在活动会话。
    active_workers_count 代表具有关联任务并且正在非抢先模式下运行的所有工作线程。某些任务(例如,网络侦听器)在抢先计划下运行。
    隐藏计划程序不会处理典型用户请求。DAC 计划程序例外。
    */


    --查找工作线程的状态
    SELECT
    scheduler_id,
    cpu_id,
    current_tasks_count,
    runnable_tasks_count,
    current_workers_count,
    active_workers_count,
    work_queue_count
    FROM
    sys.dm_os_schedulers
    WHERE
    scheduler_id < 255

    --工作线程已在 SUSPENDED 或 RUNNABLE 状态下运行的时间
    SELECT
    t1.session_id,
    CONVERT(varchar(10), t1.status) AS status,
    CONVERT(varchar(15), t1.command) AS command,
    CONVERT(varchar(10), t2.state) AS worker_state,
    w_suspended =
    CASE t2.wait_started_ms_ticks
    WHEN 0 THEN 0
    ELSE
    t3.ms_ticks - t2.wait_started_ms_ticks
    END,
    w_runnable =
    CASE t2.wait_resumed_ms_ticks
    WHEN 0 THEN 0
    ELSE
    t3.ms_ticks - t2.wait_resumed_ms_ticks
    END
    FROM sys.dm_exec_requests AS t1
    INNER JOIN sys.dm_os_workers AS t2
    ON t2.task_address = t1.task_address
    CROSS JOIN sys.dm_os_sys_info AS t3
    WHERE t1.scheduler_id IS NOT NULL


    --返回除正在睡眠的以外的会话的信息,这样可以通过WINDOWS性能监视器监视线程的性能
    SELECT STasks.session_id, SThreads.os_thread_id
    FROM sys.dm_os_tasks AS STasks
    INNER JOIN sys.dm_os_threads AS SThreads
    ON STasks.worker_address = SThreads.worker_address
    WHERE STasks.session_id IS NOT NULL
    ORDER BY STasks.session_id



    --查找正在运行非 SQL Server 启动的线程的工作以及执行的时间
    SELECT * FROM sys.dm_os_threads WHERE started_by_sqlservr = 0


    --查询是否存在活动的DAC连接,如果为空,则不存在
    SELECT
    t2.session_id
    FROM
    sys.tcp_endpoints AS T1 JOIN SYS.dm_exec_sessions AS T2
    ON
    T1.endpoint_id=T2.endpoint_id
    WHERE
    T1.name='Dedicated Admin Connection'




沪ICP备19023445号-2号
友情链接