सारांश
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 NOORDER
CACHE ORDER
जितना तेज़ से अधिक है।
मैंने अतीत में अन्य वातावरण में भी इसी तरह के व्यवहार को देखा है, हालांकि मेरे पास उनके लिए कोई परिणाम नहीं है।
क्यों?
मुझे समझ में नहीं आता कि CACHE
ORDER
का उपयोग करने पर इतना अंतर क्यों आएगा। नेटवर्क पर डेटा भेजने के समय की तुलना में संख्या उत्पन्न करने के लिए समय की अवधि अप्रासंगिक होनी चाहिए। इससे मुझे लगता है कि या तो ओरेकल एक खराब एल्गोरिदम का उपयोग कर रहा है, या मेरा टेस्ट केस गलत है। (अगर किसी को मेरे टेस्ट केस में कोई समस्या हो सकती है, तो कृपया मुझे बताएं।)
इसके अलावा, यह उत्तर केवल अनुक्रम उत्पन्न करने के लिए समय पर चर्चा करता है। NOORDER
का उपयोग करने के अन्य लाभ हो सकते हैं। उदाहरण के लिए, here वर्णित के रूप में, कम सूचकांक विवाद।
स्रोत
2012-10-09 18:08:28
धन्यवाद जस्टिन, मुझे अनुरोध के अनुसार क्रम के क्रम को बनाए रखने की आवश्यकता है। ओरेकल से: ऑर्डर अनुरोध के क्रम में अनुक्रम संख्या उत्पन्न होने की गारंटी देने के लिए ऑर्डर निर्दिष्ट करें। यह खंड उपयोगी है यदि आप अनुक्रम संख्या का उपयोग टाइमस्टैम्प के रूप में कर रहे हैं। प्राथमिक कुंजी उत्पन्न करने के लिए उपयोग किए गए अनुक्रमों के लिए आमतौर पर गारंटीकरण आदेश महत्वपूर्ण नहीं है। – odew
फिर कैश निर्दिष्ट करना सबसे अधिक संभावनाहीन है - मैं बस आगे बढ़ूंगा और नोकाच निर्दिष्ट करता हूं और स्वीकार करता हूं कि आप अपनी अनुक्रम पीढ़ी के लिए ओवरहेड जोड़ देंगे। आप यह जांचना चाहेंगे कि यह एप्लिकेशन आरएसी पर लोड के तहत कैसे व्यवहार करता है यह सुनिश्चित करने के लिए कि यह अतिरिक्त ओवरहेड स्वीकार्य है। –
मेरे पास कुछ एप्लिकेशन है जो अनुक्रमों का उपयोग टाइमस्टैम्प के प्रकार के रूप में करता है। मैं क्या जानना चाहता हूं कि अगर किसी को नॉकहाउस, कैच, ऑर्डर, नोर्डर पैरामीटर और प्रत्येक मामले में ओवरहेड अंतर के साथ अनुभव है? – odew