数据库占用cpu较高的查询
近来看到别人的有关数据库查询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较高的查询的更多相关文章
- 数据库占用CPU过高,性能分析与调优
一.使用 dstat -tcdlmnsygr --disk-util 查看当前系统资源使用状况,当前cpu使用率100% 二.使用TOP命令 查看当前占用CPU进程,可以看到当前占用CPU进程最高的是 ...
- Mysql占用CPU过高如何优化?(转)
原文:http://bbs.landingbj.com/t-0-241441-1.html MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然CP会U占用过高. 占用CPU过高,可 ...
- Mysql占用CPU过高如何优化,如何解决
2017-02-28 15:13 331人阅读 评论(0) 收藏 举报 MySQL占用CPU过高如何优化 一次生产DB服务器的 超负荷运行问题解决: 1.查看生产DB服务器top列表, 执行 to ...
- SQL Server 占用CPU较高的解决方法
触发原因:月底系统结账的时候对ERP的操作较多,有用户反馈系统之间的数据传输很久没有同步.随即到服务器上查看,没有发现有程序导致的问题,看了一下CPU的使用率,发现SQL Server占用率在百分之九 ...
- 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法
这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...
- memcache占用CPU过高的解决办法
Simon最近为公司服务器操碎了心 , 先是mysqld进程占用CPU过高 , 导致服务器性能变低 ,网站打开太慢.通过增加max_connections及table_cache解决了问题 ,随后发现 ...
- 再记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一些障碍,这一次希望可以记 ...
- w3wp占用CPU过高
w3wp占用CPU过高 在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一 ...
- JVM进程占用CPU过高问题排查
上午收到报警,某台机器上的CPU负载过高,通过逐步的排查,解决了问题,下面记录一下整个排查的过程. 首先,登录上对应的机器,通过top命令找到占用CPU过高的进程ID,也就是PID,为29126, 然 ...
随机推荐
- mysql_事物
1) set autocommit=0 关闭自动提交 插入修改,只有commit 才最终存入 2) start transaction commit/rollback 3) show var ...
- jQuery实现简单的五星好评
最近一直在认真的努力工作,今天工作完成得差不多了,比较轻松点,在工作中有遇到用jq实现五星好评功能,觉得简单又有用,所以空闲时间就想分享出来. css部分: <style> .u_star ...
- Python_day8
多态 class Animal(object): def run(self): print('animal is running') class Dog(Animal): def run(self): ...
- MyBatis-Plus 3.0.3 Sql注入器添加,即全局配置Sql注入器,sqlInjector改写
官网上写着 但是,这个其实是2.0系列的写法,由于引用了最新的3.0.3这个功能基本不好使. 3.0.3版本的写法 也就是中间加了一层,原来是AutoSqlInjector,现在改为AbstractS ...
- div界面元素生成图片
首先明确一下需求,界面上截取部分元素,生成图片,用户可以长按保存.主要是在微信里,所以设计到生成二维码的问题. 1.链接生成二维码,这里用qrcode生成,搜索可以搜到相关的js文件 var myUr ...
- mac下crontab定时任务使用
这篇文章的作用 BREAK TIME 本地pc配置定时任务,开机后每隔一小时执行一次,open这个页面,休息半分钟 cron创建备忘 首先创建定时任务 crontab -e 0 */ * * * op ...
- MVC项目加入WebApi
一.NuGet搜索安装Microsoft.AspNet.WebApi,注意引用的版本依赖,因为是在完整的MVC项目上新增,在本地编译调试并没有报错,发布到IIS后却显示应用程序出错. 二.NuGet搜 ...
- 使用python访问网络上的数据
这两天看完了Course上面的: 使用 Python 访问网络数据 https://www.coursera.org/learn/python-network-data/ 写了一些作业,完成了一些作业 ...
- dubbo 源码学习1 服务发布机制
1.源码版本:2.6.1 源码demo中采用的是xml式的发布方式,在dubbo的 DubboNamespaceHandler 中定义了Spring Framework 的扩展标签,即 <dub ...
- Visualizing the Git data model
I wrote a small tool git-graph.py over the weekend which can be used to generate the object graph of ...