2012-02-24 7 views
5

SQL सर्वर 2008R2 डेटाबेस & .NET 3.5 अनुप्रयोग के लिए गति को बेहतर बनाने के लिए सबसे सामान्य और आसान कार्यान्वयन समाधान क्या है।क्या कैशिंग के साथ SQL सर्वर के प्रदर्शन में सुधार करना संभव है?

हमारे पास निम्न विशेषताओं के साथ एक आवेदन है:
- एक साथ ग्राहकों की छोटी संख्या (~ 200 पर सबसे अधिक)।
- एसक्यूएल सर्वर साइड पर जटिल गणित संचालन
- हम दैवज्ञ की row-level security (इस प्रकार TVF और storedprocs के बजाय सीधे क्वेरी करने तालिकाओं का उपयोग) -इस मुख्य समस्या है कि उपयोगकर्ताओं को की उच्च मात्रा प्रदर्शन के लिए कुछ की नकल कर रहे हैं अद्यतन/आवेषण/हटाता है/गणना, और वे बाहर निकलते हैं क्योंकि उन कार्यों को पूरा करते समय उन्हें पृष्ठों को फिर से लोड करने की प्रतीक्षा करनी पड़ती है।

  1. तेजी से क्या है: एसक्यूएल सर्वर से पूरे डाटासेट लौटने और सी # तरफ गणित कार्यों का निष्पादन, या एसक्यूएल पक्ष पर गणना कार्यों का निष्पादन (इस प्रकार, वापस नहीं

    सवाल मैं पर स्पष्टीकरण की जरूरत है

    इस प्रकार हैं अतिरिक्त कॉलम)। या यह केवल हार्डवेयर निर्भर है?

  2. कैशिंग प्रदर्शन में सुधार करेगा (उदाहरण के लिए यदि हम रेडिस कैश जोड़ते हैं)। या कैशिंग समाधान केवल बड़ी संख्या में ग्राहकों के लिए व्यवहार्य है?
  3. क्या कुछ डेटा पूर्व-गणना करने और डेटाबेस में कहीं स्टोर करने के लिए यह एक बुरा अभ्यास है (इसलिए, जब उपयोगकर्ता अनुरोध करेगा, तो इसकी गणना पहले से ही की जाएगी)। या यह कैशिंग को क्या करना है? यदि यह एक बुरा अभ्यास नहीं है, तो संसाधन उपलब्ध होने पर गणना करने के लिए आप SQL सर्वर को कॉन्फ़िगर कैसे करते हैं?
  4. कैशिंग कैसे प्रदर्शन में सुधार कर सकती है अगर इसे अभी भी डेटाबेस पर जाना है और देखें कि कोई रिकॉर्ड अपडेट किया गया है या नहीं?

सामान्य सुझाव और टिप्पणियां भी स्वागत है।

उत्तर

7

आइए जवाब को दो हिस्सों में अलग करें, अपने प्रदर्शन निष्पादन का प्रदर्शन और प्रदर्शन को बेहतर बनाने के लिए कैशिंग। मेरा मानना ​​है कि आपको अपने SQL सर्वर पर लोड को संबोधित करने के साथ शुरू करना चाहिए और अधिकतम पर चलने वाली प्रक्रिया को अनुकूलित करने का प्रयास करना चाहिए, इससे किसी भी कैशिंग को लागू करने की आवश्यकता को हल करना चाहिए।

आपके प्रश्न से ऐसा प्रतीत होता है कि आपके पास एक ऐसी प्रणाली है जिसका उपयोग लेनदेन संबंधी प्रसंस्करण और समेकन/गणना दोनों के लिए भी किया जाता है, यह अक्सर इन दो कार्यों को एक-दूसरे के संसाधनों को लॉक करते समय संघर्ष में पड़ता है। गणित परिचालन करने में एक लंबी क्वेरी यूआई द्वारा आवश्यक ऑब्जेक्ट को लॉक/हो सकती है। इन सिस्टम को साइड-बाय-साइड काम करने और क्वेरी दक्षता में सुधार करने के लिए अनुकूलित करना प्रदर्शन बढ़ाने के लिए महत्वपूर्ण है।

शुरू करने के लिए, मैं आपके प्रश्नों का उपयोग करूंगा। तेज़ क्या है? यदि आप एक सेट ऑपरेशंस से निपट रहे हैं, यानी कॉलम के एसयूएम/एवीजी से निपट रहे हैं, तो दूसरी तरफ, यदि आप स्वयं को प्रक्रिया में कर्सर ढूंढते हैं, तो इसे स्थानांतरित करें, इसे स्थानांतरित करें सी#। कर्सर आपके प्रदर्शन को मार देंगे! आपने पूछा कि क्या डेटा को अलग करने और बाद में पूछताछ करने के लिए यह खराब अभ्यास है, यह सबसे अच्छा अभ्यास है :)। आप लेन-देन, उच्च-गति वाले ग्राहकों और समेकित जानकारी संग्रहीत करने वाले दूसरे डेटाबेस को एक डेटाबेस रखने के साथ समाप्त हो जाएंगे, यह आपकी अन्य आवश्यकताओं के लिए तेज़ी से और आसानी से उपलब्ध होगा। अगले चरण में ले जाने के परिणामस्वरूप आपके पास डेटा वेयरहाउस होगा, इसलिए यह निश्चित रूप से है जहां आप बहुत सारी जानकारी और गणना करते समय शीर्षक लेना चाहते हैं।

आखिरकार, कैशिंग, यह मुश्किल है और वास्तव में आपकी ज़रूरतों की विशिष्ट प्रकृति पर निर्भर करता है, मैं कहूंगा कि उपर्युक्त दृष्टिकोण लें, प्रक्रियाओं में सुधार करने में समय व्यतीत करें और मुझे उम्मीद है कि अंतिम परिणाम कैशिंग को अनावश्यक कर देगा।

कार्य के लिए आपके सबसे अच्छे दोस्तों में से एक एसक्यूएल प्रोफाइलर है, एसटीएमटी पर एक निशान चलाएं: यह देखने के लिए पूरा किया गया कि उच्चतम अवधि/io/cpu क्या है और पहले उन्हें चुनें।

शुभकामनाएं!

+1

निश्चित रूप से एसक्यूएल प्रोफाइलर के बारे में सहमत हैं –

संबंधित मुद्दे