Saya memiliki prosedur tersimpan yang mengembalikan hasil dari tampilan yang diindeks melalui indeks penutup. Biasanya, ini berjalan cepat (~ 10 ms), kadang-kadang bisa berjalan hingga 8 detik.
Berikut ini contoh eksekusi acak (catatan: ini bukan yang lambat, tetapi teks kueri sama kecuali nilai yang diteruskan):
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
Inilah 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);
(catatan: saya menambahkan OPTION (RECOMPILE)
petunjuk baru-baru ini setelah beberapa saran, tetapi tidak membantu.
Inilah indeks penutup (catatan: tampilan juga memiliki indeks berkerumun ListingId
, yang unik)
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
Saya menaruh jejak profiler, dengan statistik XML showplan.
Ini yang lambat (6 detik), dan paket yang relevan:
Tampak persis seperti yang saya harapkan, dan merupakan rencana yang sama ketika kueri cepat.
Berikut adalah memperbesar bagian rencana yang mahal, jika itu membantu:
Berikut adalah skema lengkap dari tabel view / backing, jika itu membantu: https://pastebin.com/wh1sRcbQ
Catatan:
- Indeks telah didefrag, statistik terkini.
- Awalnya permintaan tidak sejalan dengan tampilan, tetapi saya pindah ke SPROC untuk mencoba dan membantu menstabilkan. Tidak membantu
- Menambahkan
WITH OPTION (RECOMPILE);
petunjuk (tidak berfungsi, jadi tidak bisa mengendus parameter?) - Pertanyaan lain dalam sistem juga terkadang berjalan lambat, dan mereka juga tidak memiliki masalah yang jelas dalam rencana mereka.
- Bisa jadi mengunci? Tidak yakin cara mengonfirmasi.
Ada ide tentang apa yang bisa saya coba selanjutnya?
Terima kasih