RDS-MSSQL问题排查方法

早上收到客户反馈用户操作非常的卡,联系帮助进行排查,下面总结关于sqlserver 问题排查的方法经验:

方法一:ACTIVE MONITOR

通过sqlserver 的active monitor 来观察当前系统的实时运行状况

A. OVERVIEW 概况:CPU,WAITING TASK,DATABASE IO,BATCH REQUESTS

(1).CPU 是代表了当前实例的cpu 的使用情况,通常情况下,cpu 使用越高,代表了你的实例存在性能问题,常见的比如索引选择错误,全表扫描导致数据库的逻辑读非常的高,当然不能仅仅凭cpu 来判断问题,要综合结合其他指标来进行判断系统问题,这
个时候就需要把当前正在运行的sql 取出来,排查逻辑读高的sql;
(2) WATING tasks 代表了当前实例正在等待的任务,通常情况下,用户在反馈自己的系统很卡的时候,该值任务队列都非常的高,数据库此时堆积了大量等待任务等待完成,造成任务堆积的原因常见的为锁等待,由于数据库在对数据进行操作的过程中(update,delete)都需要获得该资源的锁,如果前一个任务如果长时间获得锁没有释放,那么后续获取任务获取锁的时候就会等待,解决方法为找出引起等待的任务,对其进行调优;
(3)Database io 这个指标可以反映当前数据库的io 使用情况,通常情况下如果系统出现了很高的io 请求(100M 以上),往往是你的数据库出现了大量全表扫描造成的,这个时候的解决办法就是把当前正在运行的sql 拉出来,看看那些sql 的使用的io 很高;
(4)Batch requests 这个指标是当前系统的一个事实请求数,有时候用户的系统的并发存在问题,会导致系统的请求数彪高,这个时候需要用户降低并发调用;
B.Recent expensive queries:这个选型是统计了当前实例正在运行的top sql,从下面的数据中我们着重关注以下指标:逻辑读写(logical write/reads /sec),平均执行时间(averageduaration/ms)

(1) 逻辑读写:这个指标很高的sql 往往是,其cpu 的消耗也会很高,我们在排查性能问题的时候,往往是需要我们重点关注,出现较高的逻辑读通常都是索引创建的不好,或者全表扫描;
(2) 平均执行时间:这个指标实际是sql 执行完需要的时间,这部分时间包括了:资源等待时间+时间执行时间+返回时间,所以用户的系统出现较卡的情况,其实就是在执行时间上出现了问题;
对逻辑读写和执行时间较高的sql,我们可以分析其执行计划来判断是否存在上述问题。
详细sql:

 

性能sql 1:
Select OrderId from Pro_Order_List where H_OrderId=2013010260759 and Fxs_Cancel <> 2 and Fxy_Cancel <>
创建组合索引:
Create index ind_pro_order_list on pro_order_list(H_OrderId,H_OrderId);
性能sql 2:
Select OrderId from Pro_Order_List where oState=’0′ and C_Name Is Null and Batch_Rnd_OrderId Is Not Null and
DateDiff(Hour, Addtime, ‘2013-1-25 11:06:32′) > 5
Addtime 的datediff 函数要去掉,改为addtime>’程序计算好的时间’
性能sql 3:
INSERT INTO
[#Temp_Paging](Temp_Paging_Id, RowNumber) SELECT Id, ROW_NUMBER() OVER (Order By show_Exp_Num Asc,Exp_Time desc) AS RowNumber FROM Pro_Order_List Where show_Exp_Num=1 and CkNo=’D1006’ and Exp_Time >= ‘2012-12-24 0:00:00’ and Exp_Time <= ‘2013-1-24 23:59:59′ and oResult=’0’

Pro_Order_List 上已经含有exp_time 的索引,但不是最有效的,因为单独查询exp_time 条件的记录有6w 多条:

在加上ckno 查询后, 记录只有0 条了, 所以需要一个组合索引(exp_time,ckno);

###############################################################################
方法二:基于等待类型的分析方法,通过获取当前系统正在等待的事件类型,资源来判断系统的瓶颈:

###############################################################################
方法三:查找系统的资源等待事件,通过下面的sql 就可以查询出是那些会话,那些sql 导致了系统的锁等待:
SELECT ss.host_name, req.session_id ,req.status ,req.blocking_session_id,req.wait_type ,req.wait_time ,req.wait_
resource ,req.transaction_id ,st.text FROM sys.dm_exec_requests req CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) as ST cross apply sys.dm_exec_sessions ss where req.status =
N’suspended’ and ss.session_id=req.session_id

可以看到有两条update 的sql 已经等待了1w 多ms,所以我们来分析一下这两天sql 的执行计划:
Update Top(100) Pro_Order_List set Chk_Send_Order_Time=’2013-1-25 10:51:51′ where
show_Exp_Num_Time > ‘2013-1-22 10:51:51’ and show_Exp_Num > 0 and Import_Order_From=’QQ 网购
‘ and Is_Send_Import_Order=0 and (Chk_Send_Order_Time is Null or Chk_Send_Order_Time < ‘2013-1-25 10:46:51’)
表中Pro_Order_List 没有合适的索引供update 使用,所以创建的组合索引:
create index ind_show_Exp_Num_Time on Pro_Order_List(show_Exp_Num_Time,Import_Order_From);

最后优化后的效果:lock 等待已经没有再出现在等待事件中:

 

时间: 2024-10-29 23:49:47

RDS-MSSQL问题排查方法的相关文章

UCenter Home会员升级或搬家后404错误的排查方法

UCenter Home是http://www.aliyun.com/zixun/aggregation/12899.html">康盛创想(Comsenz)公司发布的一款SNS建站系统,自发布至今国内采用UCenter Home搭建的地方及垂直SNS已经超过15万家.本期教程就为大家解析会员升级或者搬家后再登录或者退出 UCenter Home 的时候有404的错误的排查方法,如下图所示 问题分析: 这个一般是由于 UCenter Home 的 config.php 文件中 UCenter

一个防止误删MSSQL数据库的方法

原文:一个防止误删MSSQL数据库的方法 一个防止误删MSSQL数据库的方法 环境:Windows2008 R2 .SQL 2012 今天发现一个有趣的现象,之前数据库服务器的其中几个数据库做过镜像,不过现在已经删除了,今天又要在那台服务器上为一个库搭建镜像 搭建镜像的过程中,把镜像机器的ip写成了自己的ip,结果发现命令成功执行 --备机上执行 USE [master] GO ALTER DATABASE [CT_DB] SET PARTNER = 'TCP://192.168.1.106:5

网络连接故障逐步排查方法

局域网网络连接出现的问题会有很多种情况,我们一般会采用逐步排查的方法,一步步去找原因,然后根据不同情况,找到解决的办法,那么怎样去逐步排查局域网网络连接故障呢?下面的内容一定会对你有所帮助! 一.连接指示灯不亮 观察网卡后侧RJ45一边有两个指示灯.它们分别为连接状态指示灯和信号传输指示灯,其中正常状态下连接状态指示灯呈绿色并且长亮,信号指示灯呈红色,正常应该不停的闪烁.如果我们发现连接指示灯,也就是绿灯不亮,那么表示网卡连接到HUB或交换机之间的连接有故障.对此可以使用测试仪进行分段排除,如果

Linux服务器安全事件应急响应排查方法总结

  Linux是服务器操作系统中最常用的操作系统,因为其拥有高性能.高扩展性.高安全性,受到了越来越多的运维人员追捧.但是针对Linux服务器操作系统的安全事件也非常多的.攻击方式主要是弱口令攻击.远程溢出攻击及其他应用漏洞攻击等.我的VPS在前几天就遭受了一次被恶意利用扫描其他主机SSH弱口令安全问题.以下是我针对此次攻击事件,结合工作中Linux安全事件分析处理办法,总结Linux安全应急响应过程中的分析方法.   一.分析原则   1.重要数据先备份再分析,尽量不要在原来的系统中分析;  

win8系统无法启动Mssql的解决方法

  MSSQL2005是是由微软官方发布的MSSQL数据库服务器软件,该软件集数据库管理与服务为一体,在MSSQL系列版本中,2005是较为经典的一款软件;故此很多用户在win8系统下依旧使用MSSQL2005服务器,不过有部分用户在win8系统下安装MSSQL2005后,出现启动服务失败的问题,对于该问题我们应用如何解决呢?下面看小编为您提供的解决方法! 解决方法 1.正常安装任一版本的SQL Server 2005. 2.安装到SqlServer服务的时候提示启动服务失败,这里就是关键啦,下

分布式DB锁问题排查方法 - 阿里云HybridDB for PostgreSQL最佳实践

标签 PostgreSQL , Greenplum , 锁 , SEGMENT不一致 , gp_session_role=utility , gp_dist_random 背景 Greenplum(GPDB)是一个分布式数据库,分布式数据库的锁管理比单机更加复杂.例如在加锁时,需要对所有节点加锁(包括MASTER和所有的SEGMENT节点),在释放锁时,则需要释放所有节点的锁. 如果在释放过程中,MASTER的锁释放了,而SEGMENT锁没有释放,会造成什么问题呢? 不用说,会有很诡异的问题出现

ntpq 命令返回“timed out, nothing received”的排查方法

问题现象 多台ecs实例机器都能通过ntpq -p命令查看时间同步情况,只有其中一个实例使用ntpq -p命令的时候出错: localhost: timed out, nothing received ***Request timed out 排查过程 1.分析对比了正常和非正常显示的主机中/etc/ntp.conf的配置文件,结果相同,排除ntp命令本身以及配置的问题 2.直接通过strace  ntpq -p 查看命令执行过程如下 结果显示,AF_INET6 即IPv6 地址向外发送send

ECS API中Signature错误的排查方法

Signature的生成方法 将get中提交的参数(除了aks以外所有的参数)按照一定的组成规则拼成一个字符串,前面再加上GET&/&组成StringToSign,然后对StringToSign做 HMAC计算,以Access Key Secret+一个"&"号为HMAC计算的key,最终算出的字符串就是Signature. 排查思路 若碰到反馈Signature错误,可以排查以下几点: 1. 在构造"StringToSign"时是否对key

sql2005 jdbc连接mssql数据库实现方法

sql2005 jdbc连接mssql数据库教程实现方法 class.forname("com.microsoft.sqlserver.jdbc.sqlserverdriver"); url = "jdbc:sqlserver://localhost:1433;databasename=tempdb"; 首先下载到sql2005jdbc驱动sqljdbc_2.0.1008.2_enu.exe(版本号1.1之后都支持sql2005,2.0的支持sql2008) 下载的