我有一个简单的查询,例如
select * from MyTable where MyTableID=@p1
sp_BlitzCache 警告我“长时间运行且 CPU 不足”。该表在 MyTableID 上有一个聚集索引,它是一个唯一标识符/GUID。
是否是由于执行语句过于频繁导致的?
是的,这就是实体框架,我们正在努力让它运行得更快,而不需要对 C# 代码进行太多更改(因为它需要很长时间)。
目前运行的 vCores = 80,这“有点”昂贵。我尝试遵循https://www.brentozar.com/blitzcache/long-running-low-cpu/,但这些指南对我来说并不是很清楚。
sp_whoisactive 显示了许多带有 Async_Network_IO 的语句
sp_BlitzFirst 显示 CXSYNC_PORT 作为主要等待类型,到目前为止,但我找不到任何关于此的信息,并且我不知道它是否与此查询或正在运行的许多其他查询之一相关。
我试图找到一个执行计划,但 sp_BlitzIndex 只显示 SQL 语句。但鉴于此,我得到了这个计划:https://www.brentozar.com/pastetheplan/
?id=r11D40QQ0 它已在我的测试服务器上执行了 13.441.177 次,已运行 55 小时。
为什么我会收到“长时间运行 CPU 不足”的信息以及如何解决该问题?
我还看到简单的插入和更新获得了这个标签。
所有这些“长时间运行低CPU”是否都是由磁盘速度慢引起的?
CXSYNC_PORT 等待是 CXPACKET 等待的子类别,以及相关的消费线程和生产线程之间交换端口的同步打开/关闭。这里的长时间等待可能表明服务器负载和缺乏可用线程。
您能否尝试避免返回表 (*) 的所有列作为查询结果,仅返回所需的列并创建一个如下所示的索引来支持该查询。