首页 > 解决方案 > 数据库查询一天一次运行缓慢

问题描述

我在带有 ASP.NET 的 SQL Server 2014 标准版上有一个生产数据库,该数据库使用在托管云环境中运行的实体框架。

我面临的问题是前几次运行缓慢(大约 10-15 秒)的一些查询。然后它开始正常运行并完美运行。

最初我认为这可能是参数嗅探的情况,但是在运行缓慢的查询时运行探查器时,我发现它从磁盘读取的次数相同,但需要很长时间。对于少数几次,查询运行缓慢。几次运行后,它工作得很好,在很短的时间内(300-700 毫秒)读取相同的读取次数。我还尝试在 SSMS 中第一次运行查询,发现它具有相同的执行计划,并且读取速度较慢和执行速度更快。

这是运行缓慢的查询之一。

exec sp_executesql N'SELECT 
    [GroupBy1].[A1] AS [C1]
    FROM ( SELECT 
        COUNT(1) AS [A1]
        FROM [dbo].[Alarm] AS [Extent1]
        WHERE ([Extent1].[AssetID] = @p__linq__0) AND ([Extent1].[EventCode] IN (1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166)) AND ([Extent1].[EventCode] IS NOT NULL) AND (((0 = [Extent1].[EventType]) AND (0 = [Extent1].[AlarmStatus])) OR ((0 <> [Extent1].[EventType]) AND (6 <> [Extent1].[AlarmStatus]))) AND (((0 = [Extent1].[EventType]) AND (0 = [Extent1].[AlarmStatus])) OR ((1 = [Extent1].[EventType]) AND ([Extent1].[AcknowledgeDate] IS NULL))) AND (11 <> [Extent1].[AlarmStatus]) AND (12 <> [Extent1].[AlarmStatus]) AND ([Extent1].[SourceID] = @p__linq__1) AND (([Extent1].[SiteID] = @p__linq__2) OR (([Extent1].[SiteID] IS NULL) AND (@p__linq__2 IS NULL)))
    )  AS [GroupBy1]',N'@p__linq__0 uniqueidentifier,@p__linq__1 bigint,@p__linq__2 uniqueidentifier',@p__linq__0='B0524A60-F980-4B82-A799-E788A9A4D04B',@p__linq__1=594520350,@p__linq__2='B02A51FE-2248-E611-A64E-782BCB72ACED'

这是查询的执行计划。

我还尝试从计划缓存中获取任何慢速查询执行计划,但没有为查询找到慢速计划。

标签: sql-serverindexingentity-framework-6query-optimization

解决方案


推荐阅读