2011-10-19 23 views
6

का उपयोग कर एक फ़ील्ड को तेजी से अद्यतन करने के लिए तालिकाओं को डिज़ाइन करने के लिए सर्वोत्तम अभ्यास, मैं वर्कफ़्लो जैसे सिस्टम पर काम कर रहा हूं। मेरे पास एक कार्य तालिका और स्थिति फ़ील्ड है। स्थिति के लिए मूल्य नई, तैयार, प्रसंस्करण, त्रुटि, निरस्त, किया जा सकता है।एसक्यूएल सर्वर

मेरे पास लगभग 7 प्रक्रियाएं हैं जो कार्य की स्थिति के मूल्य को बदलने के लिए विभिन्न स्थितियों के आधार पर ट्रिगर की जाएंगी। अधिकांश समय प्रत्येक प्रक्रिया अपने डेटा सेट पर काम करेगी और हर बार जब यह केवल 5000 रिकॉर्ड तक संसाधित होती है। लेकिन डेटा अभी भी 2 मिलियन रिकॉर्ड तक पहुंचने पर कुछ डेडलॉक देखता है। मैं एसक्यूएल प्रोफाइलर के साथ जांचता हूं, कुछ पृष्ठ संसाधन से संबंधित दिखता है। मैं एसक्यूएल सर्वर प्रदर्शन ट्यूनिंग में अच्छा नहीं हूं और इसे बहुत अच्छी तरह समझ नहीं पा रहा हूं।

चूंकि निष्क्रिय कार्य हर दिन संग्रहीत किया जाएगा, इसलिए मैं लगभग 10 मिलियन रिकॉर्ड का समर्थन करने के लिए तालिका को फिर से डिजाइन करने के बारे में सोच रहा हूं।

कुछ विकल्प हो सकता है:

  1. स्थिति के आधार पर विभाजन तालिकाएं बनाएं।
  2. स्थिति

वहाँ स्थिति के इस प्रकार के लिए किसी भी अच्छा अभ्यास है के आधार पर स्थिर डेटा और समर्थित तालिका के साथ एक मास्टर तालिका बनाएँ?

धन्यवाद!

+0

धन्यवाद सिवा, हम SQL सर्वर 2005 + का उपयोग कर रहे हैं। और सुझाव दिया गया है कि अलगाव लागू होगा। लेकिन हमें उस क्लाइंट की आवश्यकता नहीं है जिसके पास एंटरप्राइज़ SQL सर्वर होना चाहिए। तो विभाजन कुछ ग्राहकों के लिए एक विकल्प हो सकता है जो अधिक भुगतान कर सकते हैं। –

+0

क्या कार्य तालिका में क्लस्टर्ड इंडेक्स परिभाषित किया गया है? – gonsalu

+0

हां। टास्कआईड जो प्राथमिक कुंजी और int प्रकार है। मैंने इसे गैर-क्लस्टर बनाने की कोशिश की। लेकिन प्रदर्शन भी बदतर है। –

उत्तर

0
  • आप स्थिति कॉलम के आधार पर तालिका को विभाजित कर सकते हैं। एक संस्करण में सक्रिय रिकॉर्ड्स। किसी अन्य परिधि में बंद रिकॉर्ड
  • मासिक आधार पर आप बंद रिकॉर्ड को साफ़ कर सकते हैं (अगर इसे अब आवश्यक नहीं है हटाएं) या पुरालेख तालिका
  • विभाजन तालिका में मुझे नहीं लगता कि यह बेहतर विकल्प होगा (आपको समान कार्यक्षमता के लिए मल्टीपल टेबल की आवश्यकता नहीं है)
  • डेडलॉक से बचने के लिए, आप SQL Server का कौन सा संस्करण
  • का उपयोग कर रहे हैं यदि आप SQL 2005 का उपयोग कर रहे हैं और ऊपर दिए गए डेटा को पढ़ने के लिए सबमिट किए गए स्नैपशॉट अलगाव का उपयोग करें। इससे यह सुनिश्चित होगा कि आप पढ़ता को ब्लॉक नहीं करती
0

लिखते हैं मैं जानता हूँ कि मैं एक उत्तर पोस्ट किया जाना चाहिए, लेकिन इन सवालों के साथ जवाब का पालन हो सकता है:

1.) जगह में तालिका संकेत हैं? यदि नहीं, तो उन

2.) सभी उपलब्ध इंडेक्स का उपयोग करने के साथ प्रयोग करें, और TaskId कॉलम केवल स्वीकार्य इंडेक्स है? कभी-कभी, विश्लेषण की जाने वाली कुछ स्थितियों में एक नई अनुक्रमणिका

3.) किसी भी समय सभी 2 मिलियन रिकॉर्ड लाइव/सक्रिय हैं?

4.) क्या आपने खंडित अनुक्रमणिका के लिए जांच की है? डेली संग्रह, सूचकांक विखंडन पैदा कर सकता है, ताकि आप new के लिए

5.) स्थिति फ़ील्ड जांचें और विखंडन ठीक करने के लिए अपने संग्रह काम एक कदम के अंत में जोड़ने के लिए चाहते हो सकता है, ready, processing, error, abort, done किया जा रहा है किस डेटा प्रकार?

6.) क्या आपने अनुक्रमित विचारों पर प्रयोग किया है?यदि आप पहले से ही जानते हैं कि आप कुछ डेटा सीमित कर रहे हैं और टेबल स्कैन से बचना चाहते हैं, तो यह

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