客户服务器CPU100% 无奈的改表名

在客服系统遭遇高CPU使用率问题时,通过分析活动监视器和缓存计划,发现并解决了一个由重复执行的SQL查询引起的性能瓶颈。通过对SQL语句的深入分析,找到了问题根源,并通过创建索引显著提升了查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快下班了,客服的一个小朋友,跑来找我救命,说现在服务卡爆了,CPU一直100%

打开页面一个复杂查询的地方,一直loadding......等了27秒,正常一般1秒左右,看了下活动监视器,等待类型基本是Latch和Lock,以为是有死锁了,查看阻塞,一直在变化,没有固定的阻塞,那就不是死锁了.

想着之前遇到过的一个情况,有大量的sql在反复执行,也是这种症状,查看了下缓存计划,按照CPU和执行次数倒序查看。果然最前面几个一直在疯狂执行,F5一下,就多了10多次查询,当时已经2K多次,找到相关语句和表,然后问那小盆友,是什么程序在运行,他说是我另外一个同事写的,我也不清楚到底是什么,就让他先把进程杀了,然后我们前后上服务器找了一圈也没找到,反正一直还在执行

(@p__linq__0 nvarchar(4000),@p__linq__1 uniqueidentifier,@p__linq__2 datetime2(7))
SELECT   CASE WHEN ( EXISTS (SELECT    1 AS [C1]   FROM [dbo].[XXXXX]
 AS [Extent1]   WHERE ([Extent1].[call_id] = @p__linq__0) AND 
([Extent1].[EmployeeID] = @p__linq__1) AND ([Extent1].[release_time] = @p__linq__2)  )) 
THEN cast(1 as bit) WHEN ( NOT EXISTS (SELECT    1 AS [C1]   FROM [dbo].[XXXXX] AS 
[Extent2]   WHERE ([Extent2].[call_id] = @p__linq__0) AND ([Extent2].[EmployeeID] = 
@p__linq__1) AND ([Extent2].[release_time] = @p__linq__2)  )) THEN cast(0 as bit) END AS 
[C1]  FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]

最后只有放大招,把表名字改了,让程序报错,刚改掉,看了下活动监视器,一切正常了。最后执行了6661次

 

好吧,明天再来研究问题。。。

 

今天一早找到问题的地方了。有一个添加方法前,加的一个判断:

尝试执行,查看下任务计划

Declare @p__linq__0 nvarchar(4000)='67679506247765248711575786300227',
@p__linq__1 uniqueidentifier='6E3D95A9-752F-4BE2-8506-928B8D3F63BD',
@p__linq__2 datetime2(7)='2019-12-08 14:25:24.000'

SELECT   
CASE 

WHEN ( EXISTS (

SELECT    1 AS [C1]   FROM [dbo].[XXXX] AS [Extent1]   WHERE ([Extent1].[call_id] = @p__linq__0) AND ([Extent1].[EmployeeID] = @p__linq__1) AND ([Extent1].[release_time] = @p__linq__2) 

 )) THEN cast(1 as bit) 
 
 WHEN ( NOT EXISTS (
 
 SELECT    1 AS [C1]   FROM [dbo].[XXXX] AS [Extent2]   WHERE ([Extent2].[call_id] = @p__linq__0) AND ([Extent2].[EmployeeID] = @p__linq__1) AND ([Extent2].[release_time] = @p__linq__2) 
 
  )) THEN cast(0 as bit) 
  
  END AS [C1]  FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]


 

扫描计数 5,逻辑读取 20728 次,物理读取 0 次,预读 19387 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

并行,索引扫描,每次500多万,又连着在执行,尼玛不卡死有鬼了。

CREATE NONCLUSTERED INDEX [IX_callid_relesetime_empid] ON [dbo].[XXXX]
(
	[call_id] ASC,
	[release_time] ASC,
	[EmployeeID] ASC
)

添加索引,小盆友立马就来消息了,大哥你干了什么?瞬间都不卡了。。。顺便给他讲解了下,以后别找我了。。。哥们也是小白

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值