2011-02-01 13 views
13

मेरे पास विभिन्न डेटाबेस अनुप्रयोग हैं जो अनुक्रमों का उपयोग करते हैं, मैं इन अनुप्रयोगों को ओआरकल आरएसी में 10 जी से आरएसी के साथ 11 जी के बिना आरएसी के साथ माइग्रेट कर रहा हूं। मुझे आदेश अनुक्रमों की आवश्यकता है और अंतराल सहन किए जाते हैं।ओरेकल आरएसी और अनुक्रम

मैं आदेश के साथ कैश अनुक्रमों में सोच रहा हूं, मुझे नहीं पता कि प्रदर्शन में क्या प्रभाव है। क्या आपको लगता है कि यह एक अच्छा विकल्प है? अनुक्रम और आरएसी के साथ आपका अनुभव क्या है?

धन्यवाद,

उत्तर

17

वास्तव में आप से क्या मतलब है इस संदर्भ में "का आदेश दिया?"

डिफ़ॉल्ट रूप से, क्लस्टर में प्रत्येक नोड में अनुक्रम संख्याओं का एक अलग कैश होता है। तो नोड 1 मूल्य 1-100 सौंप सकता है जबकि नोड 2 मूल्य 101-200 सौंप रहा है। एक नोड से लौटाए गए मान अनुक्रमिक होते हैं, लेकिन नोड 1 पर सत्र ए को 15 का मान मिल सकता है जबकि सत्र बी पर सत्र बी को 107 का मान मिलता है, इसलिए सत्रों में लौटाए गए मान क्रम से बाहर दिखाई देते हैं।

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

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

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

आमतौर पर टाइम्सस्टैम्प ऑर्डर प्रदान करने के क्रम में वास्तविक टाइमस्टैम्प को स्टोर करने के लिए तालिका में टाइमस्टैम्प कॉलम जोड़ने के लिए प्राथमिकता होगी।

+0

धन्यवाद जस्टिन, मुझे अनुरोध के अनुसार क्रम के क्रम को बनाए रखने की आवश्यकता है। ओरेकल से: ऑर्डर अनुरोध के क्रम में अनुक्रम संख्या उत्पन्न होने की गारंटी देने के लिए ऑर्डर निर्दिष्ट करें। यह खंड उपयोगी है यदि आप अनुक्रम संख्या का उपयोग टाइमस्टैम्प के रूप में कर रहे हैं। प्राथमिक कुंजी उत्पन्न करने के लिए उपयोग किए गए अनुक्रमों के लिए आमतौर पर गारंटीकरण आदेश महत्वपूर्ण नहीं है। – odew

+0

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

+0

मेरे पास कुछ एप्लिकेशन है जो अनुक्रमों का उपयोग टाइमस्टैम्प के प्रकार के रूप में करता है। मैं क्या जानना चाहता हूं कि अगर किसी को नॉकहाउस, कैच, ऑर्डर, नोर्डर पैरामीटर और प्रत्येक मामले में ओवरहेड अंतर के साथ अनुभव है? – odew

2

अनुक्रमों को अर्थ के साथ आदेश देने के लिए डिज़ाइन नहीं किया गया है। इस link to a response by Tom Kyte और उसके कुछ फॉलोअप प्रतिक्रियाओं को उसी थ्रेड में देखें।

11

सारांश

CACHE काफी एक दृश्य ORDER का उपयोग करता है, यहां तक ​​कि आरएसी पर के प्रदर्शन में सुधार कर सकते हैं।

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

टेस्ट केस

SQL> create sequence cache_order cache 20 order; 

Sequence created. 

SQL> create sequence cache_noorder cache 20 noorder; 

Sequence created. 

SQL> create sequence nocache_order nocache order; 

Sequence created. 

SQL> create sequence nocache_noorder nocache noorder; 

Sequence created. 

SQL> set timing on 
SQL> declare 
    2  v_temp number; 
    3 begin 
    4  for i in 1 .. 100000 loop 
    5    v_temp := cache_order.nextval; 
    6  end loop; 
    7 end; 
    8/

PL/SQL procedure successfully completed. 

Elapsed: 00:00:08.44 
SQL> declare 
    2  v_temp number; 
    3 begin 
    4  for i in 1 .. 100000 loop 
    5    v_temp := cache_noorder.nextval; 
    6  end loop; 
    7 end; 
    8/

PL/SQL procedure successfully completed. 

Elapsed: 00:00:07.46 
SQL> declare 
    2  v_temp number; 
    3 begin 
    4  for i in 1 .. 100000 loop 
    5    v_temp := nocache_order.nextval; 
    6  end loop; 
    7 end; 
    8/

PL/SQL procedure successfully completed. 

Elapsed: 00:00:35.15 
SQL> declare 
    2  v_temp number; 
    3 begin 
    4  for i in 1 .. 100000 loop 
    5    v_temp := nocache_noorder.nextval; 
    6  end loop; 
    7 end; 
    8/

PL/SQL procedure successfully completed. 

Elapsed: 00:00:35.10 

टेस्ट प्रकरण नोट्स

मेरे परिणाम एक 2-नोड आरएसी पर प्राप्त किया गया। केवल एक परिणाम सेट दिखाया गया है, लेकिन मैंने अलग-अलग डेटाबेस पर परीक्षण केस कई बार चलाया, और लगभग समान परिणाम प्राप्त किए।

मैंने विभिन्न नोड्स पर समवर्ती रूप से परीक्षण भी चलाए। CACHE अभी भी ORDER में काफी सुधार करता है, हालांकि CACHE NOORDERCACHE ORDER जितना तेज़ से अधिक है।

मैंने अतीत में अन्य वातावरण में भी इसी तरह के व्यवहार को देखा है, हालांकि मेरे पास उनके लिए कोई परिणाम नहीं है।

क्यों?

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

इसके अलावा, यह उत्तर केवल अनुक्रम उत्पन्न करने के लिए समय पर चर्चा करता है। NOORDER का उपयोग करने के अन्य लाभ हो सकते हैं। उदाहरण के लिए, here वर्णित के रूप में, कम सूचकांक विवाद।

+0

कैच-नोर्डर के मामले में, प्रत्येक नोड अनुक्रमों की विभिन्न श्रृंखला लेता है, इसलिए प्रत्येक नोड को वैश्विक रूप से किसी भी लॉक का उपयोग करने की आवश्यकता नहीं होती है। लेकिन, कैच-ऑर्डर विकल्प में, प्रत्येक नोड अनुक्रमों की एक ही श्रृंखला प्राप्त कर सकता है, इसलिए उन्हें कभी-कभी नेटवर्क के माध्यम से लॉकिंग तंत्र का उपयोग करने की आवश्यकता होती है। आप नीचे दी गई तस्वीर का संदर्भ ले सकते हैं। विवरण अंग्रेजी नहीं है, लेकिन आप चित्रों से अंतर्दृष्टि प्राप्त कर सकते हैं। http://wiki.gurubee.net/pages/viewpage.action?pageId=6259656 – cloudrain21

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