Bir kaplama dizini aracılığıyla dizinlenmiş bir görünümden sonuçları döndüren bir saklı yordam var. Genellikle hızlı çalışır (~ 10ms), bazen 8 saniyeye kadar çalışabilir.
Örnek bir rastgele yürütme (not: bu yavaş değil, ancak sorgu metni iletilen değerle aynıdır):
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
İşte 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);
(not: OPTION (RECOMPILE)
bazı tavsiyeler sonra son zamanlarda ipucu ekledim , ama yardımcı olmadı.
Kaplama dizini aşağıdadır (not: görünümün ListingId
benzersiz bir kümelenmiş dizini vardır )
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 istatistiği ile bir profil izleyici koydum.
İşte yavaş olanı (6 saniye) ve ilgili plan:
Tam olarak beklediğim gibi görünüyor ve sorgu hızlı olduğunda aynı plan.
İşte yardımcı olursa, planın maliyetli kısmını yakınlaştırın:
Görünüm / destek tablolarının şeması, eğer yardımcı olursa: https://pastebin.com/wh1sRcbQ
Notlar:
- Endeksler birleştirildi, istatistikler güncel.
- Başlangıçta sorgu görünümü karşı satır içi, ama denemek ve stabilize yardımcı olmak için SPROC taşındı. Yardım etmedi.
WITH OPTION (RECOMPILE);
İpucu ekleme (işe yaramadı, bu yüzden parametre kokusu olamaz mı?)- Sistemdeki diğer sorgular da bazen yavaş çalışır ve planlarında belirgin bir sorun yoktur.
- Kilitlenebilir mi? Nasıl onaylayacağınızdan emin değilim.
Sonra ne deneyebilirim hakkında herhangi bir fikir?
Teşekkürler