近来看到别人的有关数据库查询cpu占用较高的sql语句(本人sql并不好),所以查询了一下资料,记录一下,便于理解和应用。

首先,将语句贴在这里

SELECT TOP 10
  --平均cpu时间
total_worker_time/execution_count AS avg_cpu_cost,
plan_handle,
execution_count,
(SELECT SUBSTRING(text, statement_start_offset/2 + 1,
(CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(nvarchar(max), text)) * 2
ELSE statement_end_offset
END - statement_start_offset)/2)
FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
FROM sys.dm_exec_query_stats
ORDER BY [avg_cpu_cost] DESC
 

然后,讲解一下,我对于这段代码的理解

首先将语句分解,最内层的为:

首先 的意思:将text转化为字符串,然后获取长度。

然后case when else end的意思:

当 statement_end_offset = -1的时候,输出text的长度*2 ,如果不是,输出 statement_end_offset的大小,最终将输出的结果减去statement_start_offset,最终得到结果。/2,就不用说了,大家都懂的。其中的 text 是属于dm_exec_sql_text的,即最终的sql语句存储在这个变量中。

然后就是SUBSTRING()函数了。从截图中可以看出,Substring 的用法及其含义了,第一个参数是表达式,然后是截取开始的位置,然后是长度,这样就不难理解上面的语句了。

现在,就是这个模块了首先,需要知道 sys.dm_exec_sql_text(sql_handle) 是什么。

官方解释:  返回由指定的sql_handle标识的SQL批处理的文本。 也就是说,返回执行的sql语句。

那么,现在开始说 sys.dm_exec_query_stats 官方解释:返回缓存的查询计划中的聚合性能统计信息 sql server。缓存计划中的每个查询语句在该视图中对应一行,并且行的生存期与计划本身相关联。从缓存删除计划时,也将从该视图中删除对应行。 备注:若要从我们称之为Azure SQL数据仓库或并行数据仓库,使用名称 sys.dm_pdw_nodes_exec_query_stats。其中上面用到的参数 sql_handle,statement_start_offset,statement_end_offset 都是它产生的。

列名 数据类型 描述
sql_handle
varbinary(64)

表示包含查询的皮查询或存储过程的标记。

sql句柄以及statement_start_offset和语句结束偏移量,可以用于检索查询的sql文本通过调用sys.dm_exec_sql_text动态管理函数。

statement_start_offset int 指示行所说明的查询在其批查询或持久化对象文本中的开始位置(一字节为单位,从0开始)。
statement_end_offset int 指示行所说明的查询在其批查询或持久化对象文本中的结束位置(以字节为单位,从0开始)。之前的版本为sql server 2014,值为-1指示批处理的末尾。不再包括尾随的注释。
total_worker_time bigint 此计划自编译以来执行所用的cpu时间总量(以微妙为单位报告,但仅精确到毫秒)。
execution_count bigint 计划自上次编译以来所执行的次数。
plan_handle varbinary(64)

表示查询所属的已编译计划的标记。此值可以传递给sys.dm_exec_query_plan动态管理函数来获取查询计划。

当本机编译的存储过程查询内存优化的表时,此项将始终为0x000.

execution_count  bingint  此计划自编译以来所执行的次数。

参照上面表格的,我们不难理解初始的语句了。

但是,对于我自己来说,还是有许多的问题的:

第一个:为什么start需要/2+1
第二个:len()获取到长度为什么需要*2
第三个:最终的结果为什么要/2
第四个:plan_handle得到的结果如何解读

请教了别人,得到了答案加上我自己的理解,在此记录一下第四个的答案(前三个有待研究):

对于第四个问题,看一个这个文章基本就能够明白了:https://www.cnblogs.com/huangxincheng/p/4279870.html

数据库占用cpu较高的查询的更多相关文章

  1. 数据库占用CPU过高,性能分析与调优

    一.使用 dstat -tcdlmnsygr --disk-util 查看当前系统资源使用状况,当前cpu使用率100% 二.使用TOP命令 查看当前占用CPU进程,可以看到当前占用CPU进程最高的是 ...

  2. Mysql占用CPU过高如何优化?(转)

    原文:http://bbs.landingbj.com/t-0-241441-1.html MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然CP会U占用过高. 占用CPU过高,可 ...

  3. Mysql占用CPU过高如何优化,如何解决

    2017-02-28 15:13 331人阅读 评论(0) 收藏 举报   MySQL占用CPU过高如何优化 一次生产DB服务器的 超负荷运行问题解决: 1.查看生产DB服务器top列表, 执行 to ...

  4. SQL Server 占用CPU较高的解决方法

    触发原因:月底系统结账的时候对ERP的操作较多,有用户反馈系统之间的数据传输很久没有同步.随即到服务器上查看,没有发现有程序导致的问题,看了一下CPU的使用率,发现SQL Server占用率在百分之九 ...

  5. 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...

  6. memcache占用CPU过高的解决办法

    Simon最近为公司服务器操碎了心 , 先是mysqld进程占用CPU过高 , 导致服务器性能变低 ,网站打开太慢.通过增加max_connections及table_cache解决了问题 ,随后发现 ...

  7. 再记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)

    在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一些障碍,这一次希望可以记 ...

  8. w3wp占用CPU过高

    w3wp占用CPU过高 在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一 ...

  9. JVM进程占用CPU过高问题排查

    上午收到报警,某台机器上的CPU负载过高,通过逐步的排查,解决了问题,下面记录一下整个排查的过程. 首先,登录上对应的机器,通过top命令找到占用CPU过高的进程ID,也就是PID,为29126, 然 ...

随机推荐

  1. HTML与盒模型

    EC前端 - HTML教程 HTML与盒模型 HTML结构 <!doctype html> <html> <head> <meta charset=" ...

  2. AX_DataSource

    for (custInvoiceJourLocal = custInvoiceJour_ds.getFirst(true) ? custInvoiceJour_ds.getFirst(true) :  ...

  3. JS獲取URL的參數

    function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...

  4. Spring Boot jsp页面无法跳转问题

    可能的情况如下: 1.未在pom.xml中添加依赖 <!-- jsp 视图支持--> <dependency>    <groupId>org.apache.tom ...

  5. mac mysql5.7.17修改root初始密码(知道初始密码)

    最近在mac上装个mysql可以说是麻烦死了,在这里就说说修改初始密码吧! 刚开始的时候不知道怎么修改,于是上网百度,网上几乎都是说要先执行命令mysqld_safe --skip-grant-tab ...

  6. 移动端常见bug

    meta基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 <meta name="viewport" content="width=device-wid ...

  7. win10传奇手册CHM打开无法阅读解决

    今天在阅读传奇的帮助文档时候,突然遇到了一个问题.打开为空白. 如图所示  我这个情况打开的时候会提示 这个时候我们把 打开此文件总是询问 这个对勾 去掉 惊喜有没有. 哈哈 .有问题欢迎大家私信我!

  8. 第二周工作总结——NWNU李泓毅

    注:因作业未全部提交完毕,故评分细则和千帆图等评分事项推后 1.助教博客链接:https://www.cnblogs.com/lmcmha/ 2.本周点评作业: https://www.cnblogs ...

  9. vue中created、mounted、 computed,watch,method 等方法整理

    created:html加载完成之前,执行.执行顺序:父组件-子组件 mounted:html加载完成后执行.执行顺序:子组件-父组件 methods:事件方法执行 watch:watch是去监听一个 ...

  10. PyCharm 安装教程(Windows)

    python教程 http://www.runoob.com/python3/python3-basic-syntax.html PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性, ...