У меня есть производственная база данных на SQL Server 2014 Standard Edition с ASP.NET с использованием Entity Framework, работающим в облачной среде.
Проблема, с которой я сталкиваюсь, заключается в том, что некоторые запросы выполняются медленно (около 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'
это план выполнения для запроса.
Я также пытался извлечь любой медленный план выполнения запроса из кэша планов, но медленного плана для запроса не найдено.