ฉันมีกระบวนงานที่เก็บไว้ซึ่งส่งคืนผลลัพธ์จากมุมมองที่จัดทำดัชนีผ่านดัชนีครอบคลุม โดยปกติแล้วจะทำงานเร็ว (~ 10ms) บางครั้งสามารถทำงานได้ถึง 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
ฉันใส่ profiler trace ด้วยสถิติของ showplan XML
นี่คือหนึ่งช้า (6 วินาที) และแผนที่เกี่ยวข้อง:
ดูตรงตามที่ฉันคาดหวังและเป็นแผนเดียวกันเมื่อแบบสอบถามรวดเร็ว
ต่อไปนี้เป็นส่วนขยายของแผนราคาถ้าช่วยได้:
นี่คือสคีมาเต็มรูปแบบของตารางมุมมอง / สำรองหากสิ่งนั้นช่วยได้: https://pastebin.com/wh1sRcbQ
หมายเหตุ:
- ดัชนีมีการดีแฟรกต์สถิติล่าสุด
- แต่เดิมคำค้นหานั้นตรงกับมุมมอง แต่ฉันย้ายไปที่ SPROC เพื่อพยายามช่วยให้มีเสถียรภาพ ไม่ได้ช่วย
- การเพิ่ม
WITH OPTION (RECOMPILE);
คำใบ้ (ใช้งานไม่ได้ดังนั้นไม่สามารถดมพารามิเตอร์ได้หรือไม่) - บางครั้งแบบสอบถามอื่น ๆ ในระบบก็ทำงานช้าและพวกเขาก็ไม่มีปัญหาที่ชัดเจนในแผนของพวกเขา
- อาจจะล็อค? ไม่แน่ใจว่าจะยืนยันได้อย่างไร
ความคิดใด ๆ เกี่ยวกับสิ่งที่ฉันสามารถลองต่อไป
ขอบคุณ