शीर्ष 1 प्रश्न क्वेरी प्रदर्शन का चयन करें; क्या इसे दूर करने के लिए एक dba- सुलभ तरीका है?


13

एक प्रोडक्शन एप्लिकेशन में (C # SQL Server 2014 स्टैंडर्ड से बात करते हुए) एक क्वेरी है जो इस तरह दिखती है, नीचे। अधिकांश समय यह मिलीसेकंड में चलता है। लेकिन कभी-कभी (कुछ मूल्यों के लिए @Id), यह पागल हो जाता है और एक या एक मिनट लगता है। यह ऐप टाइमआउट से अधिक लंबा है, इसलिए ऐप उपयोगकर्ता के लिए विफल रहता है।

"चला जाता है" मामलों में, लौटा परिणाम सेट सही ढंग से खाली है, क्योंकि यह कई मामलों में है, लेकिन अन्य सभी मामलों में नहीं।

सौभाग्य से यह उत्पादन और विकास वातावरण दोनों में प्रजनन योग्य है।

डेवलपर क्वेरी से "TOP 1" को हटाता है, फिर यह सुनिश्चित करता है कि ऐप परिणाम सेट की अतिरिक्त पंक्तियों का उपभोग करता है, प्रदर्शन समस्या को साफ करता है।

क्वेरी प्लानर के TOP 1मौजूद होने पर कोई इंडेक्स नहीं होने का सुझाव देता है। (देव में)।

क्वेरी को बदलना और ऐप को ठीक करना प्रगति पर है। रोलआउट में थोड़ा समय लगता है।

मेरा प्रश्न: क्या नए क्वेरी रोल के साथ ऐप बदलने से पहले इस समस्या को दूर करने के लिए उत्पादन SQL सर्वर आवृत्ति को ट्यून या ट्विक करने का कोई डीबीए-सुलभ तरीका है?

SELECT TOP 1
       subscription_id 
  FROM subscription AS sub
  JOIN billing_info AS bi ON bi.billing_info_id = sub.billing_info_id   
  JOIN person_group AS apg ON apg.person_id = bi.person_id
  JOIN pplan ON pplan.plan_id = sub.plan_id
  JOIN product ON product.product_id = [plan].product_id 
  JOIN product_attribute ON product_attribute.product_id = product.product_id 
 WHERE apg.group_id = @Id
   AND apg.start_date < GETDATE()
   AND (apg.end_date IS NULL OR apg.end_date > GETDATE()) 
   AND (sub.end_date IS NULL OR sub.end_date > GETDATE()) 
   AND product_attribute.attribute_type = 'special feature' 
   AND product_attribute.attribute_data = '1' 
 ORDER BY sub.start_date ASC;

क्या आपने इसे एक उपश्रेणी के रूप में आज़माया है? उदाहरण के लिए, शीर्ष 1 सबस्क्राइब्ड_आईडी से चयन करें (शीर्ष 1 के बिना अपनी शेष क्वेरी का चयन करें)
SeanR

शायद कुछ "सामान्य" क्वेरी ट्यूनिंग काम करेगी? यदि अनुक्रमणिका काफी आकर्षक हैं तो स्कैन चले जाते हैं। यह एक योजना गाइड की तुलना में कम आक्रामक है।
यूआर

तो क्या समान मूल्य @ID हमेशा इसे "गो पागल" बनाते हैं? यदि ऐसा है, तो उन मूल्यों में से एक का उपयोग करके परीक्षण करें और वास्तविक क्वेरी योजना पर कब्जा करें। जो आपको बताएगा कि क्या गलत हो रहा है। यदि "खराब" मान संगत नहीं हैं, तो संभावना है कि यह या तो पैरामीटर-सूँघ रहा है (देखें समाधान के लिए @ मार्टिनस्मिथ का उत्तर), या अन्यथा लॉकिंग समस्या शामिल है जिसमें क्लाइंट वास्तव में अनुरोध करता है और परिणाम सेट का उपभोग करता है।
RBarryYoung

जवाबों:


12

यदि आप क्वेरी को नहीं बदल सकते हैं तो आप एक योजना गाइड का उपयोग कर सकते हैं।

क्वेरी के प्रदर्शन का परीक्षण करें OPTION (QUERYTRACEON 4138)(इसे sysadminआज़माने के लिए किसी व्यक्ति की आवश्यकता होगी )।

यदि वह संतोषजनक प्रदर्शन पैदा करता है तो आप इसे योजना गाइड के साथ लागू कर सकते हैं। यदि यह संतोषजनक प्रदर्शन की कोशिश नहीं करता है और ऐसा संकेत खोजता है जो करता है। संभवतः OPTION (HASH JOIN, MERGE JOIN)यदि अनुचित नेस्टेड लूप समस्या है। आपको USE PLAN N'...'संकेत का सहारा लेने की आवश्यकता हो सकती है ।

एक बार जब आप संकेत (ओं) को जानते हैं, तो आवश्यक है कि आप उन्हें यहां की जानकारी का उपयोग करके लागू कर सकते हैं


OPTION (QUERYTRACEON 4138)चाल चली। धन्यवाद। अब योजना गाइडों को छांटने पर।
ओ। जोन्स

0

अनुदानों के लिए इसे आज़माएँ
`> को बदल दिया जाता है> = तो ठीक उसी क्वेरी में नहीं

SELECT TOP 1
       subscription_id 
  FROM subscription AS sub
  JOIN billing_info AS bi 
        ON bi.billing_info_id = sub.billing_info_id   
  JOIN person_group AS apg 
        ON apg.person_id = bi.person_id 
       AND apg.group_id = @Id
       AND apg.start_date < GETDATE()
       AND isnnull(apg.end_date, GETDATE()) >= GETDATE()             
  JOIN pplan 
        ON pplan.plan_id = sub.plan_id
       AND isnnull(sub.end_date, GETDATE()) >= GETDATE()
  JOIN product 
        ON product.product_id = [plan].product_id 
  JOIN product_attribute 
        ON product_attribute.product_id = product.product_id 
       AND product_attribute.attribute_type = 'special feature' 
       AND product_attribute.attribute_data = '1' 
 ORDER BY sub.start_date ASC;

"क्वेरी को बदलना और एप्लिकेशन को ठीक करना जारी है। रोलआउट में कुछ समय लगता है।" ओपी एक समाधान की तलाश में है जो प्रदर्शन को "जैसा है" ठीक करता है।
मार्टिन स्मिथ

@MartinSmith और जब वे एक तय करते हैं तो यह एक बेहतर समाधान हो सकता है। एप्लिकेशन को अतिरिक्त पंक्तियों का उपभोग करना अन्य प्रोग्राम परिवर्तन होंगे।
पापराज़ो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.