操作系统是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过高排查和优化相关推荐

  1. Mysql占用CPU过高排查过程及可能优化方案

    1.查看生产DB服务器top列表, 执行 top 命令 2.使用root用户登录mysql 执行 show full processlist 查看慢查询,反复执行,如果发现一直有select 查询语句 ...

  2. SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句

    今天公司的线上网站崩溃,登陆不了,结果查看服务器的性能的时候发现SQL Server 占用的cup 高达97%,之前没有出现过这样的状况,直觉感觉重启SQL Server就好,可是重启之后依然如此.接 ...

  3. linux php cpu,查找linux下进程占用CPU过高的原因,以php-fpm为例

    很多时候,线上服务器的进程在某时间段内长时间占用CPU过高,为了优化,我们需要找出原因. 1.找出占用CPU最高的10个进程 ps aux | sort -k3nr | head -n 10 或查看占 ...

  4. 解决 SQL Server 中 CPU 使用率过高的问题

    本文提供了诊断和修复运行 Microsoft SQL Server 的计算机上 CPU 使用率过高导致的问题的过程. 尽管在 SQL Server 中出现 CPU 使用率过高有许多可能原因,但以下原因 ...

  5. SQL SERVER 占用资源高的SQL语句

    SQL SERVER 占用资源高的SQL语句 原创曹振华 最后发布于2019-12-03 19:45:05 阅读数 16  收藏 展开 --SQL SERVER 占用资源高的SQL语句: --查询占用 ...

  6. SQL SERVER占用服务器内存过高的解决方案

    SQL SERVER占用服务器内存过高的解决方案 参考文章: (1)SQL SERVER占用服务器内存过高的解决方案 (2)https://www.cnblogs.com/purple5252/p/1 ...

  7. Java程序占用 CPU 过高怎么排查

    Java程序占用 CPU 过高怎么排查 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 这就是一个套路题,所谓套路题就是有标准的套路解法的,掌握了套路,不仅 ...

  8. WMI Provider Host占用CPU过高

    一.现象 1.现象描述 WMI Provider Host 占用CPU过高,我这个服务器是虚拟化出来的,CPU肯定是够用的.那么这么高的CPU肯定有问题. 重启后不会出现,只要运行一段时间就会出现.我 ...

  9. MySQL占用CPU过高

    服务器MySQL占用CPU过高时,应排查的因素包括: 进程列表 排除高并发因素先要找到导致CPU过高的SQL mysql> SHOW PROCESSLIST; 查找负荷最重的SQL语句,优化该S ...

最新文章

  1. Linux查看系统信息命令实例
  2. Gitlab自动触发Jenkins构建打包
  3. 怎么查看计算机一共多少文档,不打开Word文档如何查看文章有几页 -电脑资料
  4. ASP.NET repeater添加序号列的方法
  5. Eclipse C/C++开发环境搭建
  6. VMware vCloud® Suite 5.5功能介绍
  7. iview -- vue modal 显示到最顶层 层级
  8. Bootstrap框架下按钮的禁用
  9. 华为-2025十大趋势:智能世界,触手可及.pdf(附下载链接)
  10. linux 系统权限相关知识
  11. php get安全过滤,php 有效安全过滤get,posd,cookie_PHP教程
  12. 基于springboot实现宠物医院管理系统
  13. 基于mvc架构的劳务管理系统
  14. Linux ubuntu下载及安装教程
  15. 报告显示,宝爸参与度不断提升,超三成男性提前服用营养品备孕
  16. 汽车暖风系统操作步骤
  17. 马尔可夫毯/马尔科夫链/因果图/贝叶斯网络
  18. ubuntu下查看电脑内存硬盘CPU显卡驱动等配置命令
  19. 【转】美剧字幕长讲述她如何练听力的
  20. 如何使用国内代理ip?

热门文章

  1. 【Java从0到架构师】交错的日志系统、SpringBoot 集成日志框架
  2. [转]浅析GPU计算——cuda编程
  3. HMM隐马尔可夫模型(HMM)攻略
  4. 巧用FineReport搭建成本管控监测系统
  5. 帆软报表的excel导出,插件开发可用
  6. 编译自定义的主题theme
  7. 2010年6月计算机组织与结构,2010 计算机组织与体系结构课程设计.doc
  8. python第五章课后题答案_python程序设计基础(嵩天)第五章课后习题部分答案
  9. 小程序 php wecahtpay,PHP 微信公众号,小程序获取支付参数。微信支付
  10. php upload 缓存_php-使用vich_uploader的liip_imagine无法创建缓存