Запрос к базе данных выполняется медленно один раз в день - PullRequest
0 голосов
/ 19 мая 2018

У меня есть производственная база данных на 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'

это план выполнения для запроса.

Я также пытался извлечь любой медленный план выполнения запроса из кэша планов, но медленного плана для запроса не найдено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...