भंडारण को संकलित करते समय, SQL सर्वर निष्पादन योजना बनाता है, जहां यह मानता है कि प्रक्रिया के इनपुट पैरामीटर एक निश्चित प्रकार के होंगे। इसे Parameter Sniffing कहा जाता है।
जब पैरामीटर थोड़ा अलग होते हैं, तो अनुरोध के इष्टतम निष्पादन के लिए निष्पादन योजना कुछ हद तक अनुचित हो सकती है।
समस्या को हल करने का सबसे आसान तरीका पैरामीटर सूँघने को अक्षम करना है। यह निम्नानुसार किया जाता है: प्रक्रिया के शरीर में स्थानीय चर बनाए जाते हैं और इनपुट मापदंडों के मान उन्हें सौंपे जाते हैं।
ALTER PROCEDURE [dbo].[REPORT_USERS_BRANCHES]
@branchId INT ,
@branchName NVARCHAR(100) OUTPUT ,
@filterByPaymentActivity VARCHAR (50),
@dateFrom DATETIME,
@dateTo DATETIME
AS
DECLARE @dtFrom DATETIME, @dtTo DATETIME, @filter VARCHAR (50), @bId INT
SET @bId = @branchId
SET @dtFrom = @DateFrom
SET @dtTo = @DateTo
SET @filter = @filterByPaymentActivity
...
* This source code was highlighted with Source Code Highlighter .
आप ऑप्टिमाइज़ेशन विकल्प (OPTION (OPTIMIZE FOR ...)) का भी उपयोग कर सकते हैं, हर बार प्रक्रिया को दोबारा शुरू करने के लिए आवश्यक प्रक्रिया बनाते समय इंगित करें।
लेकिन इन विकल्पों ने मेरी मदद नहीं की।
एक डिसीजन ट्री एसपी विधि भी है, लेकिन यह पहले से ही पूरी तरह से राक्षसी है।
ps: मुझे यकीन है कि यह सिर्फ एक बैसाखी है, और समस्या का सही समाधान नहीं है, लेकिन यह सब मुझे एक प्रोग्रामर के रूप में पर्याप्त है। शायद DBA यहाँ सबसे अच्छा तरीका सलाह देंगे?