sql - ईआरपी के लिए सबसे अच्छा डिफॉल्ट ट्रांजेक्शन आइसोलेशन स्तर क्या है, यदि कोई हो?

Translate

लघु पृष्ठभूमि: हम सिर्फ हाइबरनेट के साथ जावा के लिए एक ईआरपी सिस्टम को माइग्रेट / पुन: कार्यान्वित करना शुरू कर रहे हैं, सिस्टम का उपयोग करते हुए 50-100 उपयोगकर्ताओं के समवर्ती उपयोगकर्ता की संख्या को लक्षित कर रहे हैं। हम MS SQL सर्वर को डेटाबेस सर्वर के रूप में उपयोग करते हैं, जो इस लोड के लिए पर्याप्त है।

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

अब सवाल: क्या एक अच्छा / उचित होगा?चूकईआरपी प्रणाली का उपयोग करने के लिए लेनदेन अलगाव स्तर, लगभग 85% ओएलटीपी और 15% ओएलएपी का उपयोग किया जाता है? या क्या मुझे हमेशा प्रति कार्य के आधार पर निर्णय लेना चाहिए कि कौन सा लेनदेन स्तर उपयोग करना है?

और चार लेन-देन अलगाव के स्तर को याद दिलाने के रूप में: असंबद्ध, पढ़े हुए, पढ़े हुए, पढ़े जाने वाले, पढ़े जाने वाले, पढ़े जाने वाले

This question and all comments follow the "Attribution Required."

सभी उत्तर

Translate

100 में से 99 बार पढ़ा गया, सही उत्तर है। यह सुनिश्चित करता है कि आप केवल उन परिवर्तनों को देखते हैं जो दूसरे सत्र द्वारा किए गए हैं (और, इस प्रकार, परिणाम जो सुसंगत हैं, यह मानते हुए कि आपने अपने लेनदेन को डिज़ाइन किया है)। लेकिन यह लॉकिंग ओवरहेड (विशेष रूप से गैर-ओरेकल डेटाबेस में) को नहीं लगाता है जो दोहराए जाने योग्य या सीरियल करने योग्य थोप देता है।

कभी-कभी, आप एक रिपोर्ट चलाना चाहते हैं, जहाँ आप गति के लिए सटीकता का त्याग करने और एक पढ़ा हुआ पृथक स्तर निर्धारित करने के लिए तैयार हैं। यह शायद ही कभी एक अच्छा विचार है, लेकिन यह कभी-कभार विवाद के मुद्दों पर ताला लगाने के लिए एक उचित स्वीकार्य समाधान है।

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

स्रोत
Translate

SNAPSHOT के बारे में मत भूलना, जो कि SERIALIZABLE के ठीक नीचे है।

यह इस बात पर निर्भर करता है कि रिपोर्ट में आंकड़ों का सटीक होना कितना महत्वपूर्ण है। यह वास्तव में एक कार्य-दर-कार्य है।

स्रोत
Translate

यह वास्तव में बहुत कुछ निर्भर करता है कि आप अपने आवेदन को कैसे डिज़ाइन करते हैं, इसका आसान जवाब सिर्फ READ_COMMITTED पर है।

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

जिस तरह से अलगाव का स्तर आपके प्रश्नों को प्रभावित करता है, वह आपके लक्ष्य डेटाबेस पर निर्भर करता है। उदाहरण के लिए Sybase और MSSQL जैसे डेटाबेस को READ_COMMITTED चलाने पर अधिक संसाधन लॉक करने होंगे, जैसे कि Oracle जैसे डेटाबेस।

स्रोत
Translate

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

स्रोत
Translate

पढ़ें Uncommitted निश्चित रूप से अधिकांश मंचों में दलित है। हालांकि, इसका उपयोग करने के कारण हैं जो अक्सर "गति बनाम सटीकता" के मामले से परे जाते हैं जो अक्सर इंगित किया जाता है।

मान लीजिए कि आपके पास है:

  • ट्रांजैक्शन T1: राइट्स बी, रीड्स ए, (कुछ और काम), कमिट।
  • ट्रांजैक्शन टी 2: राइट्स ए, रीड्स बी, (कुछ और काम), कमिट।

पढ़ने के साथ प्रतिबद्ध, ऊपर लेनदेन लेनदेन तक जारी नहीं होगा। फिर आप ऐसी स्थिति में भाग सकते हैं जहां टी 1 ए को रिलीज करने के लिए टी 2 का इंतजार कर रहा है, और टी 2 बी 1 के रिलीज होने का इंतजार कर रहा है। यहां दोनों लेनदेन एक लॉक में टकराते हैं।

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

विकल्प Read Uncommitted का उपयोग कर रहा है। तब आप अपने लेनदेन को यह मानते हुए डिज़ाइन करते हैं कि गंदे रीड हो सकते हैं। मैं व्यक्तिगत रूप से इंटरलॉकिंग ट्रेनवॉक की तुलना में इस समस्या को बहुत अधिक स्थानीय और उपचार योग्य पाता हूं।

गंदे रीड्स से मुद्दों को पहले से ही समझा जा सकता है

  • (1) रोलबैक: नहीं। यह केवल हार्डवेयर विफलता, नेटवर्क विफलता या प्रोग्राम क्रैश के मामले में रक्षा की अंतिम पंक्ति होनी चाहिए।

  • (2) एक लॉकिंग तंत्र बनाने के लिए एप्लिकेशन लॉक का उपयोग करें जो उच्च स्तर के अमूर्त स्तर पर संचालित होता है, जहां प्रत्येक लॉक वास्तविक दुनिया संसाधन या कार्रवाई के करीब होता है।

स्रोत
Leave a Reply
You must be logged in to post a answer.
लेखक के बारे में