相关疑难解决方法(0)

是什么导致此查询/执行计划的 CPU 使用率过高?

我有一个支持 .NET Core API 应用程序的 Azure SQL 数据库。浏览 Azure 门户中的性能概览报告表明,我的数据库服务器上的大部分负载(DTU 使用情况)来自 CPU,特别是一个查询:

在此处输入图片说明

正如我们所见,查询 3780 负责几乎所有服务器上的 CPU 使用率。

这在某种程度上是有道理的,因为查询 3780(见下文)基本上是整个应用程序的关键,并且经常被用户调用。这也是一个相当复杂的查询,需要许多连接才能获得所需的正确数据集。查询来自一个最终看起来像这样的 sproc:

-- @UserId UNIQUEIDENTIFIER

SELECT
    C.[Id],
    C.[UserId],
    C.[OrganizationId],
    C.[Type],
    C.[Data],
    C.[Attachments],
    C.[CreationDate],
    C.[RevisionDate],
    CASE
        WHEN
            @UserId IS NULL
            OR C.[Favorites] IS NULL
            OR JSON_VALUE(C.[Favorites], CONCAT('$."', @UserId, '"')) IS NULL
        THEN 0
        ELSE 1
    END [Favorite],
    CASE
        WHEN
            @UserId IS NULL
            OR C.[Folders] IS NULL
        THEN NULL
        ELSE TRY_CONVERT(UNIQUEIDENTIFIER, JSON_VALUE(C.[Folders], CONCAT('$."', @UserId, '"')))
    END [FolderId],
    CASE 
        WHEN C.[UserId] IS NOT NULL OR …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan azure-sql-database cpu query-performance

9
推荐指数
1
解决办法
6637
查看次数

消除执行计划中的键查找

我有以下查询:

DECLARE @p__linq__0 UNIQUEIDENTIFIER

SET @p__linq__0 = '... some guid ...'

SELECT TOP 1
    [EventId] AS [EventId],       
    [DateCreated] AS [DateCreated],       
    [LocationId] AS [LocationId],       
    [SourceName] AS [SourceName],       
    [SourceState] AS [SourceState],       
    [Priority] AS [Priority],       
    [EventDescription] AS [EventDescription],       
    [FirstTrigger] AS [FirstTrigger]
FROM [dbo].[Watchdog]
WHERE 
    [LocationId] = @p__linq__0
    AND 
    [FirstTrigger] = 1
ORDER BY [DateCreated] DESC
Run Code Online (Sandbox Code Playgroud)

Watchdog 表定义了 2 个 indecies:

  1. EventId主键列上的聚集索引
  2. DateCreated列上的非聚集索引

这是查询的实际执行计划: 在此处输入图片说明

阅读有关如何消除键查找的其他文章,我添加了另一个非聚集索引,其中包括来自SELECT

CREATE NONCLUSTERED INDEX [LocationId_FirstTrigger] ON [dbo].[Watchdog]
(
    [LocationId] ASC,
    [FirstTrigger] ASC
)
INCLUDE ( …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan sql-server-2012 query-performance

7
推荐指数
2
解决办法
913
查看次数

按估计的操作员成本对执行计划 XML 进行排序

我想按Estimated Operator Cost对执行计划 XML 进行排序,但问题是:

\n

SQL Server 执行计划在 UI 中具有“估计操作员成本”条目:

\n

在此输入图像描述

\n

...但是 XML 输出中缺少该值。

\n

关于如何对 XML 进行排序有多种建议,例如:

\n\n

但两者都与我所拥有的相差甚远,因为“估计运营商成本”似乎是一个超级复杂的计算

\n

请问这个问题有什么解决办法吗?

\n

sql-server execution-plan

1
推荐指数
1
解决办法
598
查看次数