SQL SERVER占用CPU过高排查和优化
操作系统是Windows2008R2 ,数据库是SQL2014 64位。
近阶段服务器出现过几次死机,管理员反馈机器内存使用率100%导致机器卡死。于是做了个监测服务器的软件实时记录CPU数据,几日观察得出数据如下:
SQL优化方法:
1、查看连接对象
1 USE master 2 GO 3 --如果要指定数据库就把注释去掉 4 SELECT * FROM sys.[sysprocesses] WHERE [spid]>50 --AND DB_NAME([dbid])='gposdb'
当前连接对象有67个其中‘WINAME’的主机名,‘jTDS’的进程名不属于已知常用软件,找到这台主机并解决连接问题。在360流量防火墙中查看有哪个软件连接了服务器IP,除之。
2、然后使用下面语句看一下各项指标是否正常,是否有阻塞,正常情况下搜索结果应该为空。
1 SELECT TOP 102 [session_id],3 [request_id],4 [start_time] AS '开始时间',5 [status] AS '状态',6 [command] AS '命令',7 dest.[text] AS 'sql语句', 8 DB_NAME([database_id]) AS '数据库名',9 [blocking_session_id] AS '正在阻塞其他会话的会话ID', 10 [wait_type] AS '等待资源类型', 11 [wait_time] AS '等待时间', 12 [wait_resource] AS '等待的资源', 13 [reads] AS '物理读次数', 14 [writes] AS '写次数', 15 [logical_reads] AS '逻辑读次数', 16 [row_count] AS '返回结果行数' 17 FROM sys.[dm_exec_requests] AS der 18 CROSS APPLY 19 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 20 WHERE [session_id]>50 AND DB_NAME(der.[database_id])='gposdb' 21 ORDER BY [cpu_time] DESC
查看是哪些SQL语句占用较大可以使用下面代码
1 --在SSMS里选择以文本格式显示结果 2 SELECT TOP 10 3 dest.[text] AS 'sql语句' 4 FROM sys.[dm_exec_requests] AS der 5 CROSS APPLY 6 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 7 WHERE [session_id]>50 8 ORDER BY [cpu_time] DESC
3、如果SQLSERVER存在要等待的资源,那么执行下面语句就会显示出会话中有多少个worker在等待
1 SELECT TOP 102 [session_id],3 [request_id],4 [start_time] AS '开始时间',5 [status] AS '状态',6 [command] AS '命令',7 dest.[text] AS 'sql语句', 8 DB_NAME([database_id]) AS '数据库名',9 [blocking_session_id] AS '正在阻塞其他会话的会话ID', 10 der.[wait_type] AS '等待资源类型', 11 [wait_time] AS '等待时间', 12 [wait_resource] AS '等待的资源', 13 [dows].[waiting_tasks_count] AS '当前正在进行等待的任务数', 14 [reads] AS '物理读次数', 15 [writes] AS '写次数', 16 [logical_reads] AS '逻辑读次数', 17 [row_count] AS '返回结果行数' 18 FROM sys.[dm_exec_requests] AS der 19 INNER JOIN [sys].[dm_os_wait_stats] AS dows 20 ON der.[wait_type]=[dows].[wait_type] 21 CROSS APPLY 22 sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 23 WHERE [session_id]>50 24 ORDER BY [cpu_time] DESC
4、查询CPU占用最高的SQL语句
1 SELECT TOP 102 total_worker_time/execution_count AS avg_cpu_cost, plan_handle,3 execution_count,4 (SELECT SUBSTRING(text, statement_start_offset/2 + 1,5 (CASE WHEN statement_end_offset = -16 THEN LEN(CONVERT(nvarchar(max), text)) * 27 ELSE statement_end_offset8 END - statement_start_offset)/2)9 FROM sys.dm_exec_sql_text(sql_handle)) AS query_text 10 FROM sys.dm_exec_query_stats 11 ORDER BY [avg_cpu_cost] DESC
5、索引缺失查询
1 SELECT 2 DatabaseName = DB_NAME(database_id)3 ,[Number Indexes Missing] = count(*) 4 FROM sys.dm_db_missing_index_details5 GROUP BY DB_NAME(database_id)6 ORDER BY 2 DESC;7 SELECT TOP 10 8 [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) 9 , avg_user_impact 10 , TableName = statement 11 , [EqualityUsage] = equality_columns 12 , [InequalityUsage] = inequality_columns 13 , [Include Cloumns] = included_columns 14 FROM sys.dm_db_missing_index_groups g 15 INNER JOIN sys.dm_db_missing_index_group_stats s 16 ON s.group_handle = g.index_group_handle 17 INNER JOIN sys.dm_db_missing_index_details d 18 ON d.index_handle = g.index_handle 19 ORDER BY [Total Cost] DESC;
找到索引缺失的表,根据查询结果中的关键次逐一建立索引。
做完这些测试,基本能找到问题。
转载于:https://www.cnblogs.com/vice/p/9163241.html
SQL SERVER占用CPU过高排查和优化相关推荐
- Mysql占用CPU过高排查过程及可能优化方案
1.查看生产DB服务器top列表, 执行 top 命令 2.使用root用户登录mysql 执行 show full processlist 查看慢查询,反复执行,如果发现一直有select 查询语句 ...
- SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句
今天公司的线上网站崩溃,登陆不了,结果查看服务器的性能的时候发现SQL Server 占用的cup 高达97%,之前没有出现过这样的状况,直觉感觉重启SQL Server就好,可是重启之后依然如此.接 ...
- linux php cpu,查找linux下进程占用CPU过高的原因,以php-fpm为例
很多时候,线上服务器的进程在某时间段内长时间占用CPU过高,为了优化,我们需要找出原因. 1.找出占用CPU最高的10个进程 ps aux | sort -k3nr | head -n 10 或查看占 ...
- 解决 SQL Server 中 CPU 使用率过高的问题
本文提供了诊断和修复运行 Microsoft SQL Server 的计算机上 CPU 使用率过高导致的问题的过程. 尽管在 SQL Server 中出现 CPU 使用率过高有许多可能原因,但以下原因 ...
- SQL SERVER 占用资源高的SQL语句
SQL SERVER 占用资源高的SQL语句 原创曹振华 最后发布于2019-12-03 19:45:05 阅读数 16 收藏 展开 --SQL SERVER 占用资源高的SQL语句: --查询占用 ...
- SQL SERVER占用服务器内存过高的解决方案
SQL SERVER占用服务器内存过高的解决方案 参考文章: (1)SQL SERVER占用服务器内存过高的解决方案 (2)https://www.cnblogs.com/purple5252/p/1 ...
- Java程序占用 CPU 过高怎么排查
Java程序占用 CPU 过高怎么排查 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 这就是一个套路题,所谓套路题就是有标准的套路解法的,掌握了套路,不仅 ...
- WMI Provider Host占用CPU过高
一.现象 1.现象描述 WMI Provider Host 占用CPU过高,我这个服务器是虚拟化出来的,CPU肯定是够用的.那么这么高的CPU肯定有问题. 重启后不会出现,只要运行一段时间就会出现.我 ...
- MySQL占用CPU过高
服务器MySQL占用CPU过高时,应排查的因素包括: 进程列表 排除高并发因素先要找到导致CPU过高的SQL mysql> SHOW PROCESSLIST; 查找负荷最重的SQL语句,优化该S ...
最新文章
- Linux查看系统信息命令实例
- Gitlab自动触发Jenkins构建打包
- 怎么查看计算机一共多少文档,不打开Word文档如何查看文章有几页 -电脑资料
- ASP.NET repeater添加序号列的方法
- Eclipse C/C++开发环境搭建
- VMware vCloud® Suite 5.5功能介绍
- iview -- vue modal 显示到最顶层 层级
- Bootstrap框架下按钮的禁用
- 华为-2025十大趋势:智能世界,触手可及.pdf(附下载链接)
- linux 系统权限相关知识
- php get安全过滤,php 有效安全过滤get,posd,cookie_PHP教程
- 基于springboot实现宠物医院管理系统
- 基于mvc架构的劳务管理系统
- Linux ubuntu下载及安装教程
- 报告显示,宝爸参与度不断提升,超三成男性提前服用营养品备孕
- 汽车暖风系统操作步骤
- 马尔可夫毯/马尔科夫链/因果图/贝叶斯网络
- ubuntu下查看电脑内存硬盘CPU显卡驱动等配置命令
- 【转】美剧字幕长讲述她如何练听力的
- 如何使用国内代理ip?
热门文章
- 【Java从0到架构师】交错的日志系统、SpringBoot 集成日志框架
- [转]浅析GPU计算——cuda编程
- HMM隐马尔可夫模型(HMM)攻略
- 巧用FineReport搭建成本管控监测系统
- 帆软报表的excel导出,插件开发可用
- 编译自定义的主题theme
- 2010年6月计算机组织与结构,2010 计算机组织与体系结构课程设计.doc
- python第五章课后题答案_python程序设计基础(嵩天)第五章课后习题部分答案
- 小程序 php wecahtpay,PHP 微信公众号,小程序获取支付参数。微信支付
- php upload 缓存_php-使用vich_uploader的liip_imagine无法创建缓存