2008-11-13 8 views
5

हमारे पास एक ऐसी प्रणाली है जो डेटा स्टेशनिंग इंटरफ़ेस को उजागर करते समय कई स्टेशनों से डेटा की बड़ी मात्रा में समेकित रूप से सम्मिलित होती है।लेनदेन स्तर, नोलॉक/रीडपास्ट और समरूपता

[SyncTable] 
    SyncID 
    StationID 
    MeasuringTime 


[DataTypeTable] 
    TypeID 
    TypeName 


[DataTable] 
    SyncID 
    TypeID 
    DataColumns... 

डाटा प्रविष्टि एक "तुल्यकालन" में किया और इस तरह से चला जाता है है (हम केवल प्रणाली में डेटा सम्मिलित है, हम कभी नहीं अद्यतन)

: स्कीमा कुछ इस तरह (गरीब स्वरूपण के बारे में खेद) लग रहा है
INSERT INTO SyncTable(StationID, MeasuringTime) VALUES (X,Y); SELECT @@IDENTITY 

INSERT INTO DataTable(SyncID, TypeID, DataColumns) VALUES 
    (SyncIDJustInserted, InMemoryCachedTypeID, Data) 
    ... lots (500) similar inserts into DataTable ... 

और प्रश्नों इस प्रकार है (किसी दिए गए स्टेशन, measuringtime और डेटाप्रकार के लिए)

SELECT SyncID FROM SyncTable WHERE StationID = @StationID 
           AND MeasuringTime = @MeasuringTime 
SELECT DataColumns FROM DataTable WHERE SyncID = @SyncIDJustSelected 
            AND DataTypeID = @TypeID 

मेरा प्रश्न है कि हम कैसे आवेषण और NOLOCK/READP पर लेन-देन के स्तर का गठजोड़ कर सकते हैं है प्रश्नों पर एएसटी संकेत ताकि:

  1. हमने अपने सिस्टम में संगामिति को अधिकतम आवेषण के पक्ष में है, जबकि (हम डेटा का एक बहुत स्टोर करने के लिए की जरूरत है, 2000 + के रूप में उच्च कुछ रिकॉर्ड एक दूसरे)
  2. प्रश्नों केवल "प्रतिबद्ध" सिंक्रनाइज़ेशन से डेटा लौटाएं (हम आधा डालने वाले सिंक्रनाइज़ेशन के साथ परिणाम सेट नहीं करना चाहते हैं या लॉक-स्किपिंग के कारण कुछ छोड़े गए प्रविष्टियों के साथ सिंक्रनाइज़ेशन नहीं चाहते हैं)
  3. हमें परवाह नहीं है कि "नवीनतम" डेटा शामिल है या नहीं क्वेरी में, हम "लाइव" और अद्यतित डेटा
के लिए स्थिरता और उत्तरदायित्व के लिए अधिक परवाह करते हैं

यह बहुत विरोधाभासी लक्ष्य हो सकता है और उच्च लेनदेन अलगाव स्तर की आवश्यकता हो सकती है लेकिन मुझे सभी चाल और अनुकूलन में रुचि है ताकि दोनों प्रविष्टियों और चयनों पर उच्च प्रतिक्रिया प्राप्त हो सके। अगर मैं अधिक बदलाव और चाल को दूर करने के लिए अधिक जानकारी की आवश्यकता है तो मुझे विस्तार से प्रसन्नता होगी।

अद्यतन: भविष्य के उत्तरों के लिए बस कुछ और जानकारी जोड़ना। हम शुरुआत में 5+ टीबी स्टोरेज के साथ एक SAN नेटवर्क पर SQL Server 2005 (2008 को छह महीने के भीतर) चला रहे हैं। मुझे यकीन नहीं है कि एसएएन किस प्रकार की RAID स्थापित है और ठीक है कि हम कितने डिस्क उपलब्ध हैं।

उत्तर

0
  1. आप किस प्रकार की डिस्क सिस्टम का उपयोग करेंगे? यदि आपके पास एक बड़ी धारीदार RAID सरणी है, तो लिखना अच्छा प्रदर्शन करना चाहिए। यदि आप प्रति सेकंड अपने आवश्यक पढ़ने और लिखने का अनुमान लगा सकते हैं, तो आप उन नंबरों को फ़ॉर्मूला में प्लग कर सकते हैं और देख सकते हैं कि आपका डिस्क उपप्रणाली जारी रहेगी या नहीं। हो सकता है कि आपके पास हार्डवेयर पर कोई नियंत्रण न हो ...

  2. क्या आप एक लेनदेन में आवेषण लपेट नहीं पाएंगे, जिससे उन्हें सम्मिलित होने तक पढ़ने के लिए अनुपलब्ध कर दिया जाएगा?

  3. यह पालन करना चाहिए कि आपका हार्डवेयर सही तरीके से कॉन्फ़िगर किया गया है और आप अपने एसक्यूएल कोडिंग पर ध्यान दे रहे हैं - जो ऐसा लगता है कि आप हैं।

    SQLIO.exe और SQL तनाव उपकरण में

देखो:

SQLIOStress.exe SQLIOStress.exe SQL Server 2000 आई/ओ व्यवहार के विभिन्न पैटर्न simulates सुनिश्चित करने के लिए मौलिक आई/ओ सुरक्षा।

SQLIOStress उपयोगिता को Microsoft वेब साइट से डाउनलोड किया जा सकता है। निम्नलिखित आलेख देखें।

• कैसे इस तरह के एसक्यूएल सर्वर http://support.microsoft.com/default.aspx?scid=kb;en-us;231619

महत्वपूर्ण डाउनलोड उपयोगिता के बारे में विस्तृत विवरण के साथ एक पूरा श्वेत पत्र में शामिल है के रूप में एक डिस्क सबसिस्टम तनाव के SQLIOStress सुविधा का उपयोग करने के लिए

SQLIO.exe SQLIO.exe एक SQL Server 2000 I/O उपयोगिता है जो मूल बेंचमार्क परीक्षण परिणामों को स्थापित करने के लिए उपयोग की जाती है।

एसक्यूएलआईओ उपयोगिता माइक्रोसॉफ्ट वेबसाइट से डाउनलोड की जा सकती है। - ग्राहक उपलब्ध http://download.microsoft.com/download/f/3/f/f3f92f8b-b24e-4c2e-9e86-d66df1f6f83b/SQLIO.msi

+0

"समाधान" का हिस्सा के बाद से जवाब के रूप में यह अंकन सही ढंग से एक विशेष डिस्क सिस्टम की स्थापना जो बहुत throughput –

1

आप एसक्यूएल 2005 चला रहे हैं और snapshot isolation को लागू करने में नज़र ऊपर • SQLIO निष्पादन परीक्षण उपकरण (एसक्यूएल विकास): निम्नलिखित देखें। आप नोलॉक के साथ लगातार परिणाम प्राप्त नहीं कर पाएंगे।

SQL 2000 पर इसे हल करना बहुत कठिन है।

1

यह SQL सर्वर 2005/2008 एंटरप्राइज़ की विभाजन सुविधा के लिए एक शानदार परिदृश्य है। आप प्रत्येक StationID के लिए एक विभाजन बना सकते हैं, और प्रत्येक StationID के डेटा का अपना filegroup में जा सकते हैं (अगर आप चाहते हैं, अपनी लोड के आधार पर आवश्यक नहीं हो सकता।)

यह आपको संगामिति के साथ कुछ फायदे खरीदता है:

  • यदि आप स्टेशन द्वारा विभाजित करते हैं, तो उपयोगकर्ता स्टेशनरी के लिए चुनिंदा प्रश्नों को चला सकते हैं जो वर्तमान में लोड नहीं हो रहे हैं, और वे सभी
  • पर किसी समेकन संबंधी मुद्दों में नहीं भागेंगे यदि आप स्टेशन द्वारा विभाजित करते हैं, तो एकाधिक स्टेशन डेटा डाल सकते हैं एक साथ समवर्ती मुद्दों के बिना (जब तक वे विभिन्न फ़ाइल समूहों पर हैं)
  • यदि आप सिंकिड रेंज द्वारा विभाजित करते हैं, तो आप पुराने डेटा को धीमे भंडारण पर रख सकते हैं।
  • आप syncid सीमा के आधार पर विभाजन हैं, और अपने पर्वतमाला काफी छोटा कर रहे हैं (नहीं syncids के हजारों के साथ एक सीमा जिसका अर्थ है) तो आप संगामिति में चलने के बिना एक ही समय में भार अपने उपयोगकर्ताओं में जानना चाहते हैं कर सकते हैं जारी करता

जिस परिदृश्य का वर्णन आप कर रहे हैं, डेटा वेयरहाउस रात के लोड के साथ बहुत आम है। माइक्रोसॉफ्ट ने प्रोजेक्ट रियल नामक एक तकनीकी संदर्भ परियोजना की है जिसे आप दिलचस्प लग सकते हैं। वे एक मानक के रूप में यह प्रकाशित है, और आप डिजाइन डॉक्स और क्रम में कार्यान्वयन कोड के माध्यम से पढ़ने को देखने के लिए कैसे वे वास्तव में तेजी से लोड खींचा कर सकते हैं:

http://www.microsoft.com/technet/prodtechnol/sql/2005/projreal.mspx

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

+0

stationid द्वारा विभाजन का एक और लाभ में सुधार से बंधा था: आप सही क्लस्टर अनुक्रमित बनाते हैं (stationid, syncid) डेटाटेबल पर सिंकेबल, (सिंकिड) पर, और सिंकिड के लिए पहचान का उपयोग करें, जिसे आप कभी भी सम्मिलित गतिविधि से पृष्ठ विभाजित नहीं करते हैं, जो आपको चुनिंदा वक्तव्यों पर रीडपैस्ट का उपयोग करने की अनुमति देता है, जो तब सम्मिलित गतिविधि के साथ हस्तक्षेप नहीं कर रहा है (वे डॉन नहीं करते हैं) एक्स-लॉक किए गए रिकॉर्ड्स के लिए अपने एस-लॉक प्राप्त करने की प्रतीक्षा नहीं करते हैं और अपडेट के बिना किसी भी एस-लॉक वाली पंक्तियों के लिए एक्स-लॉक जारी नहीं किया जाता है)। यदि पृष्ठ विभाजन संभव था, तो कभी-कभी असंगत परिणाम हो सकता है, जिससे यह एक खतरनाक विकल्प बन सकता है। – TToni

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