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

एक्सए बनाम गैर-एक्सए जेडीबीसी चालक प्रदर्शन?

जैसा कि सभी चीजों के प्रदर्शन से संबंधित है, उत्तर है:यह निर्भर करता है। विशेष रूप से, यह इस बात पर निर्भर करता है कि आप ड्राइवर का उपयोग कैसे कर रहे हैं।

एक डेटाबेस के साथ लेन-देन करने की लागत को मोटे तौर पर विभाजित किया गया है:कोड जटिलता ओवरहेड, संचार ओवरहेड, एसक्यूएल प्रोसेसिंग और डिस्क I/O।

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

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

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

अब हम डिस्क I/O ओवरहेड पर विचार करते हैं। यहां हम व्यावसायिक तर्क के लिए उपयोग किए जाने वाले SQL के बजाय XA प्रोटोकॉल द्वारा उत्पन्न I/O से संबंधित हैं, क्योंकि उत्तरार्द्ध किसी भी मामले में अपरिवर्तित है। केवल-पढ़ने के लिए लेन-देन के लिए स्थिति सरल है:एक समझदार डीबी और टीएक्स प्रबंधक कोई लॉग लिखता नहीं है, इसलिए कोई ओवरहेड नहीं है। लिखने के मामलों के लिए वही सच है जहां एक्सए के एक चरण प्रतिबद्ध अनुकूलन के कारण डीबी एकमात्र संसाधन शामिल है। 2पीसी मामले के लिए प्रत्येक डीबी सर्वर या अन्य संसाधन प्रबंधक को गैर-एक्सए मामलों में उपयोग किए जाने के बजाय दो डिस्क लिखने की आवश्यकता होती है, और इसी तरह टीएक्स प्रबंधक को दो की आवश्यकता होती है। डिस्क संग्रहण की धीमी गति के लिए धन्यवाद, यह XA बनाम गैर-XA में प्रदर्शन ओवरहेड का प्रमुख स्रोत है।

कई पैराग्राफ वापस मैंने कोड जटिलता का उल्लेख किया। XA को गैर-XA की तुलना में थोड़ा अधिक कोड निष्पादन की आवश्यकता होती है। ज्यादातर मामलों में जटिलता लेनदेन प्रबंधक में दफन है, हालांकि यदि आप चाहें तो आप निश्चित रूप से सीधे एक्सए ड्राइव कर सकते हैं। लागत ज्यादातर तुच्छ है, पहले से उल्लेखित चेतावनियों के अधीन। जब तक आप विशेष रूप से खराब लेनदेन प्रबंधक का उपयोग नहीं कर रहे हैं, उस स्थिति में आपको कोई समस्या हो सकती है। केवल-पढ़ने का मामला विशेष रूप से दिलचस्प है - लेन-देन प्रबंधक प्रदाता आमतौर पर डिस्क I/O कोड में अपना अनुकूलन प्रयास डालते हैं, जबकि लॉक विवाद केवल-पढ़ने के लिए उपयोग के मामलों के लिए एक अधिक महत्वपूर्ण मुद्दा है, खासकर अत्यधिक समवर्ती सिस्टम पर।

यह भी ध्यान दें कि tx प्रबंधक में कोड जटिलता एक ऐप सर्वर या अन्य मानक लेनदेन प्रबंधक प्रदाता की विशेषता वाले आर्किटेक्चर में एक रेड-हेरिंग है, क्योंकि ये आमतौर पर XA और गैर-XA लेनदेन समन्वय के लिए समान कोड का उपयोग करते हैं। गैर-एक्सए मामलों में, टीएक्स प्रबंधक को पूरी तरह से याद करने के लिए आपको आम तौर पर कनेक्शन को गैर-लेनदेन के रूप में मानने के लिए ऐप सर्वर/फ्रेमवर्क को बताना होगा और फिर जेडीबीसी का उपयोग करके सीधे प्रतिबद्धता को ड्राइव करना होगा।

तो सारांश है:एक्सए/गैर-एक्सए विकल्प के बावजूद आपके एसक्यूएल प्रश्नों की लागत केवल-पढ़ने के लिए लेनदेन समय पर हावी होने जा रही है , जब तक आप कॉन्फ़िगरेशन में कुछ गड़बड़ नहीं करते हैं या प्रत्येक tx में विशेष रूप से तुच्छ sql संचालन करते हैं, बाद वाला एक संकेत है कि आपका व्यावसायिक तर्क संभवतः प्रत्येक tx में tx प्रबंधन ओवरहेड के अनुपात को व्यावसायिक तर्क में बदलने के लिए कुछ पुनर्गठन का उपयोग कर सकता है।

केवल-पढ़ने के मामलों के लिए सामान्य लेनदेन प्रोटोकॉल अज्ञेय सलाह इसलिए लागू होती है:प्रत्येक बार डीबी को मारने के बजाय ओआरएम समाधान में लेनदेन जागरूक स्तर के दूसरे स्तर के कैश पर विचार करें। विफल होने पर, एसक्यूएल को ट्यून करें, फिर डीबी के बफर कैश को तब तक बढ़ाएं जब तक कि आप 90% + हिट रेट न देखें या आप सर्वर के रैम स्लॉट को अधिकतम न करें, जो भी पहले आए। XA बनाम गैर-XA के बारे में केवल तभी चिंता करें जब आपने ऐसा कर लिया और पाया कि चीजें अभी भी बहुत धीमी हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या मैं इस utf8 कैरेक्टर को बदल सकता हूँ?

  2. MYSQL sha1 से संबंधित होने पर नमक क्या है?

  3. mysql 5.7 मध्यम वर्ग में mysql 5.6 की तुलना में बहुत धीमा है

  4. तालिका में एक बार में डेटा डालें जो MySQL सेलेक्ट कमांड से पुनर्प्राप्त करें

  5. पूरे पृष्ठ को पुनः लोड किए बिना AJAX के साथ क्वेरी डालें