可以使用下面的语句来得到

SELECT SUBSTRING(qt.TEXT,
(qs.statement_start_offset/2)+1,
(
(CASE qs.statement_end_offset
WHEN -1
THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END
- qs.statement_start_offset
)/2
)+1
),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_worker_time DESC -- CPU time

 

一些解释:

SQL Server 有很多线程, 其基本的工作逻辑为: 不让任何的runnable的thread饿死. SQL Server的线程管理并不是由操作系统管理的, 而是由SQL Server 自己管理的. SQL Server多数时候运行在nonpreemptive模式下的, 意味着线程都是互相协作的, 不时地通过主动放弃的方式来让其他的线程运行. 当一个线程为另一个线程主动出让执行权的时候, 它就创建了自己的wait状态. 如果这样的线程很多, 那么就明显地意味着存在着CPU的压力.

 

可以通过下面的语句来查看系统中有多少runnable的task.

SELECT scheduler_id,
current_tasks_count,
runnable_tasks_count,
work_queue_count,
pending_disk_io_count
FROM sys.dm_os_schedulers
WHERE scheduler_id < 255
GO

如果长时间持续地发现两位数的runnable_tasks_count, 注意不是偶尔, 你就知道CPU存在压力了.

 

当然, 加CPU是简单的解决方案. 但是, 当这么做不可行的时候, 就可以通过文章最前面的语句来找到占用CPU资源最多的query, 进行必要的优化.

 

信息来源

============================

SQL SERVER – SOS_SCHEDULER_YIELD – Wait Type – Day 8 of 28

http://blog.sqlauthority.com/2011/02/08/sql-server-sos_scheduler_yield-wait-type-day-8-of-28/

我的SQL里哪个语句占用的CPU最多?的更多相关文章

  1. linux 查看占用内存/CPU最多的进程

    可以使用一下命令查使用内存最多的5个进程 ps -aux | sort -k4nr | head -n 5 或者 top (然后按下M,注意大写) 可以使用一下命令查使用CPU最多的5个进程 ps - ...

  2. 查看linux占用内存/CPU最多的进程

    可以使用一下命令查使用内存最多的10个进程 ps -aux | sort -k4nr | head -n 10 可以使用一下命令查使用CPU最多的10个进程 ps -aux | sort -k3nr ...

  3. <转>查看linux占用内存/CPU最多的进程

    转自 http://beginman.cn/page26/ 查使用内存最多的10个进程 ps -aux | sort -k4nr | head -n 10 或者top (然后按下M,注意大写) 查使用 ...

  4. 关于sql、mysql语句的模糊查询分类与详解,包括基本用法和mapper.xml文件里插入写法

    欢迎猿类加qq:2318645572,共同学习进步 实际例子: ssm框架:service业务层->dao层->mappers.xml->junit/test测试 1:service ...

  5. 查看postgre都有哪些语句占用CPU,以及对应的sql语句

    查看占用CPU最多的几个postgresql ps aux | grep postgres | sort -n -r -k | head - | awk '{print $2, $3}' 查看所有po ...

  6. SQL Sever查询语句集锦

    一. 简单查询简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的表或视图.以及搜索条件等. 例如,下面的语句查询testtable表中姓名为“ ...

  7. [SQL]死锁处理语句

    原文:[SQL]死锁处理语句 引言 今天在群里看到分享的解决死锁的sql语句,就想着这东西以后肯定用的着,就下载下来,在这里记录一下,以后查找也方便. SQL SET QUOTED_IDENTIFIE ...

  8. 面试必须要知道的SQL语法,语句

    面试必须要知道的SQL语法,语句 收藏 asc 按升序排列desc 按降序排列下列语句部分是Mssql语句,不可以在access中使用.SQL分类: DDL—数据定义语言(Create,Alter,D ...

  9. 查看postgre都有哪些语句占用CPU

    查看占用CPU最多的几个postgresql ps aux | grep postgres | sort -n -r -k 3 | head -10 | awk '{print $2, $3}' 查看 ...

随机推荐

  1. Springboot listener

    在启动流程中,会出发许多ApplicationEvent.这时会调用对应的listener的onApplicationEvent方法.ApplicationEvent时观察者模式, (1) 实体继承A ...

  2. Spring @RequestMapping 注解使用技巧

    @RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一.这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上. 在这篇文章中,你将会看到 @R ...

  3. rest framework 类 继承图

  4. bzoj 2961

    根据“点在圆内”关系,列出点P(x0,y0)在圆C(x,y)内的关系: (x-x0)^2+(y-y0)^2 <= x^2+y^2 化简得: 2*x0*x+2*y0*y >= x0^2+y0 ...

  5. BZOJ 4408: [Fjoi 2016]神秘数 可持久化线段树

    4408: [Fjoi 2016]神秘数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4408 Description 一个可重复数字集 ...

  6. ssh 远程链接时出现错误提示:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

    ssh 远程链接时出现错误提示 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST I ...

  7. bash编程之 ~制作Mini Linux系统~

    说明1:在一个Linux宿主机系统上,通过以上步骤,可以制作一个微小的Linux系统(可以放置在U盘中等),然后在其它的主机(虚拟机或者物理机)上运行,以实现最小化定制系统的目的. 说明2:上图中黑色 ...

  8. linux 内核升级 网址参考

    http://blog.csdn.net/zklth/article/category/826447 http://blog.chinaunix.net/uid-28392723-id-3520177 ...

  9. 报错:无法从int?转换为int

    □ 背景分析 在控制器方法中的一个参数允许为null值:public ActionResult GetByCategory(int? categoryId = null) 当把这里的categoryI ...

  10. JSONObject以及json(转)

    一.JAR包简介      要使程序 可以运行 必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:      1.commons-lang.jar      2.commons- ...