Sql server 数据库查询每天慢运行一次

Sql server 数据库查询每天慢运行一次,sql-server,indexing,entity-framework-6,query-optimization,Sql Server,Indexing,Entity Framework 6,Query Optimization,我在SQL Server 2014标准版上有一个生产数据库,其中ASP.NET使用实体框架在托管云环境中运行 我面临的问题是,有些查询在开始的几次中运行速度很慢,大约为10-15秒。然后,它开始正常工作,并完美地工作 起初我认为这可能是一个参数嗅探的例子,但在运行profiler进行查询时,当它运行缓慢时,我发现它没有从磁盘读取数据,但需要很长时间。查询运行缓慢的次数很少。在几次运行后,它工作得很好,在300-700毫秒的时间内读取相同数量的读取。我还尝试在SSMS中第一次运行查询,发现它有相同

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

我面临的问题是,有些查询在开始的几次中运行速度很慢,大约为10-15秒。然后,它开始正常工作,并完美地工作

起初我认为这可能是一个参数嗅探的例子,但在运行profiler进行查询时,当它运行缓慢时,我发现它没有从磁盘读取数据,但需要很长时间。查询运行缓慢的次数很少。在几次运行后,它工作得很好,在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'

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

可能正在进行阻塞或其他CPU/IO密集型操作,如备份/计划作业。我建议使用一些监控工具或在慢速执行期间运行实际上,它可能发生在特定屏幕第一次打开时的任何时间,一天中的任何时间,最初几次我在本地计算机上恢复了数据库,有时在本地机上也会显示类似的行为。所以只需检查逻辑读取与物理读取。当页面位于缓冲区缓存中时,性能会更好。逻辑读取:从缓存读取数据页/物理读取:从硬盘读取数据页Disk@Rohit,从缓存访问数据的速度要快得多,这就是为什么SQL Server力求在内存中保留尽可能多的数据。由于缺少缓存,针对冷缓存的第一次执行预计会较慢。我喜欢将SQLServer看作是一个内存中的数据库,它只在内存不足的情况下使用存储以保持持久性。但你的问题表明,第二、第三等死刑执行速度也很慢。这可能是主机提供商实现服务的预热时间的问题。