Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

क्या SET NOCOUNT ON वास्तव में इतना अधिक प्रदर्शन अंतर बनाता है

ऐसे परिदृश्य हैं जहां SET NOCOUNT ON अनिवार्य है। एसक्लक्लाइंट की BeginExecuteXXX विधियों के माध्यम से थ्रेड पूल का लाभ उठाने वाले अतुल्यकालिक प्रसंस्करण के आधार पर एक उच्च प्रदर्शन मध्य स्तरीय डिजाइन करते समय, पंक्ति गणना के साथ एक बहुत ही गंभीर समस्या है। जैसे ही पहली . की शुरुआत होती है, BeginExecute विधियां पूरी हो जाती हैं प्रतिक्रिया पैकेट सर्वर द्वारा वापस कर दिया जाता है। लेकिन जब एक EndExecuteXXX लागू किया जाता है, तो यह कॉल पूर्ण होने पर गैर-क्वेरी अनुरोधों पर पूरा होता है। प्रत्येक पंक्ति गणना प्रतिक्रिया एक प्रतिक्रिया है। मामूली जटिल प्रक्रियाओं को संसाधित करते समय पहली पंक्ति की गिनती 5-10 एमएस में वापस आ सकती है, जबकि कॉल 300-500 एमएस में पूरी होती है। सबमिट किए गए async अनुरोध को 500ms के बाद वापस कॉल करने के बजाय, यह 5 ms के बाद वापस कॉल करता है और फिर 495 ms के लिए EndExecuteXXX में कॉलबैक ब्लॉक करता है। इसका परिणाम यह होता है कि एसिंक्रोनस कॉल समय से पहले पूरी हो जाती है और EndExecuteNonQuery कॉल में थ्रेड पूल से थ्रेड को ब्लॉक कर देती है। यह थ्रेडपूल भुखमरी की ओर जाता है। मैंने देखा है कि विशिष्ट परिदृश्यों पर केवल SET NOCOUNT ON जोड़कर उच्च प्रदर्शन प्रणालियाँ सैकड़ों कॉल प्रति सेकंड से हज़ारों कॉल प्रति सेकंड तक थ्रूपुट में सुधार करती हैं।

यह देखते हुए कि उच्च स्तर/उच्च थ्रूपुट मध्य स्तरीय प्रसंस्करण के लिए एसिंक्रोनस कॉल जाने का एकमात्र तरीका है, NOCOUNT काफी अनिवार्य आवश्यकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर प्रबंधन स्टूडियो (SSMS) में क्वेरी विंडो को कैसे विभाजित करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 13

  2. SQL सर्वर डेटाबेस में कॉलम के साथ सभी डिफ़ॉल्ट बाधाओं को कैसे सूचीबद्ध करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 92

  3. जाँच करें कि क्या डेटाबेस बनाने से पहले मौजूद है

  4. मैं पिवट का उपयोग कैसे कर सकता हूं?

  5. C# SQLServer परिणाम प्राप्त कर रहा है और एक .csv प्रारूप में स्थान दे रहा है