У мене зберігається процедура, яка повертає результати з індексованого виду через індекс покриття. Зазвичай вона працює швидко (~ 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
Я помістив слід профілера зі статистикою showplan XML.
Ось повільний (6 секунд) та відповідний план:
Виглядає точно так, як я очікував, і це той самий план, коли запит швидкий.
Ось збільшити дорогу частину плану, якщо це допоможе:
Ось повна схема таблиць перегляду / резервного копіювання, якщо це допомагає: https://pastebin.com/wh1sRcbQ
Примітки:
- Індекси були дефрагментовані, статистика оновлена.
- Спочатку запит відповідав перегляду, але я перейшов до SPROC, щоб спробувати допомогти стабілізуватись. Не допомогло.
- Додавання
WITH OPTION (RECOMPILE);
підказки (не спрацювало, тому не може бути нюхати параметри?) - Інші запити в системі також іноді працюють повільно, і вони також не мають очевидних проблем у своєму плані.
- Може бути заблокованим? Не знаєте, як це підтвердити.
Будь-які ідеї, що я можу спробувати далі?
Спасибі