У меня есть хранимая процедура, которая возвращает результаты из индексированного представления через индекс покрытия. Обычно он работает быстро (~ 10 мс), иногда он может работать до 8 секунд.
Вот пример случайного выполнения (примечание: это не медленное выполнение, но текст запроса не отличается от значения, переданного через):
declare @p2 dbo.IdentityType
insert into @p2 values(5710955)
insert into @p2 values(5710896)
insert into @p2 values(5710678)
insert into @p2 values(5710871)
insert into @p2 values(5711103)
insert into @p2 values(6215197)
insert into @p2 values(5710780)
exec ListingSearch_ByLocationAndStatus @statusType=1,@locationIds=@p2
Вот SPROC:
ALTER PROCEDURE [dbo].[ListingSearch_ByLocationAndStatus]
@LocationIds IdentityType READONLY,
@StatusType TINYINT
AS
BEGIN
SET NOCOUNT ON;
SELECT -- lots of fields
FROM [dbo].[ListingSearchView][a] WITH (NOEXPAND)
INNER JOIN @LocationIds [b] ON [a].[LocationId] = [b].[Id]
WHERE [a].[StatusType] = @statusType
OPTION (RECOMPILE);
(примечание: я добавил OPTION (RECOMPILE)
подсказку недавно после некоторых советов, но это не помогло.
Вот индекс покрытия (примечание: представление также имеет кластерный индекс ListingId
, который является уникальным)
CREATE NONCLUSTERED INDEX [IX_ListingSearchView_ForAPI] ON [dbo].[ListingSearchView]
(
[LocationId] ASC,
[StatusType] ASC
)
INCLUDE ( -- all the fields in the query) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
Я включил трассировку профайлера с XML-статистикой showplan.
Вот медленный (6 секунд) и соответствующий план:
Выглядит точно так, как я ожидал, и тот же план, когда запрос быстрый.
Вот увеличение дорогостоящей части плана, если это поможет:
Вот полная схема просмотра / поддержки таблиц, если это поможет: https://pastebin.com/wh1sRcbQ
Примечания:
- Индексы были дефрагментированы, статистика актуальна.
- Первоначально запрос был встроен в представление, но я перешел в SPROC, чтобы попытаться помочь в стабилизации. Не помогло
- Добавление
WITH OPTION (RECOMPILE);
подсказки (не сработало, поэтому не может быть сниффинг параметров?) - Другие запросы в системе также иногда выполняются медленно, и у них также нет очевидных проблем в их плане.
- Может быть блокировка? Не уверен, как подтвердить.
Любые идеи о том, что я мог бы попробовать дальше?
Благодарность