2011-02-16 8 views
5

मेरा एएसपीनेट एप्लिकेशन तालिका प्राथमिक प्राथमिक कुंजी उत्पन्न करने के लिए कुछ अनुक्रमों का उपयोग करता है। डीबी प्रशासकों ने कैश आकार को 20 तक सेट कर दिया है। अब आवेदन परीक्षण में है और कुछ रिकॉर्ड दैनिक जोड़े जाते हैं (प्रत्येक उपयोगकर्ता परीक्षण सत्र के लिए 4 कहें)। मुझे पता चला है कि नए टेस्ट सत्र रिकॉर्ड हमेशा नए कैश भागों का उपयोग करते हैं जैसे कि प्रवीण दिन कैश की संख्या समाप्त हो गई थी, हर रोज दसवीं चाबियाँ खो रही थीं। मैं समझना चाहता हूं कि क्या यह कुछ गलती के कारण है, मैंने अपने आवेदन में (टेबलडैप्टर या किसी भी चीज़ का निपटान) किया हो सकता है या यदि यह सामान्य व्यवहार है। ऑरैकल अनुक्रमों को संभालने के दौरान प्रोग्रामिंग सर्वोत्तम प्रथाओं को ध्यान में रखना है?ओरेकल अनुक्रम कैश उम्र बढ़ने अक्सर

चूंकि आवेदन को भारी भार का भार नहीं उठाना पड़ेगा (दिन में 20-40 नए रिकॉर्ड कहें), मैं छोटा कैश आकार या कोई भी सेट करने का मामला नहीं हो सकता था। अनुक्रम कैश आकार बदलने से वर्तमान सूचकांक का रीसेट होता है?

किसी भी संकेत

+2

तो आपके आईडी में अंतराल है। तो क्या? मुझे समस्या नहीं दिख रही है। –

+0

जबकि अंतराल एक समस्या नहीं होनी चाहिए, 9 5% मूल्यों को बर्बाद करना सिर्फ इतना है: –

+0

को साफ़ करने के लिए अपशिष्ट: अंतराल मुझे इतना चिंता न करें, मुझे पता था कि अनुक्रमों में अंतराल हो सकता है। –

उत्तर

7

इस सूत्र में जस्टिन गुफा से जवाब आप के लिए दिलचस्प हो सकता है:

http://forums.oracle.com/forums/thread.jspa?threadID=640623

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

यदि यह आपके लिए बहुत बार होता है, तो ऐसा लगता है कि आपके अनुक्रम का अक्सर उपयोग नहीं किया जाता है।

मुझे लगता है कि कैश आकार को कम करने (या पूरी तरह से इसे अक्षम) अपने मामले में प्रदर्शन पर एक उल्लेखनीय प्रभाव नहीं पड़ेगा

+0

चूंकि यह एक परीक्षण वातावरण है, इसलिए मुझे भी संदेह होगा कि डेटाबेस हर रात पुनरारंभ किया जा रहा था। यह मानते हुए कि उत्पादन में मामला नहीं है, यह एक पर्यावरणीय मुद्दा हो सकता है। –

+0

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

2

Oracle Sequences के लिए अग्रिम धन्यवाद अंतराल से मुक्त नहीं हैं। कैश आकार को कम करने से अंतराल कम हो जाएगा ... लेकिन आपके पास अभी भी अंतराल होगा। अनुक्रम डेटाबेस द्वारा तालिका से जुड़ा नहीं है, लेकिन आपके कोड (ट्रिगर/एसक्यूएल/पीकेजी एपीआई के माध्यम से डालने पर अगली कड़ी के माध्यम से) - उस नोट पर आप एकाधिक तालिकाओं पर एक ही अनुक्रम का उपयोग कर सकते हैं (यह नहीं है एसक्यूएल सर्वर की पहचान की तरह जहां यह कॉलम/टेबल से जुड़ा हुआ है)

इस प्रकार अनुक्रम को बदलने से इंडेक्स पर कोई प्रभाव नहीं पड़ेगा।

यदि आप वर्तमान मूल्य के +1 के लिए अनुक्रम ड्रॉप और उसे पुन: प्रारंभ, तुम reseed 'तुम सुनिश्चित करने के लिए बस की आवश्यकता होगी (जैसे अनुक्रम 125 nocache के साथ शुरू seqer बनाने;)

, लेकिन

आपके आवेदन नंबर की एक अंतराल से मुक्त सेट की आवश्यकता है, तो आप ओरेकल दृश्यों का उपयोग नहीं कर सकते हैं। आपको डेटाबेस में अपने स्वयं के विकसित कोड का उपयोग करके गतिविधियों को क्रमबद्ध करना होगा।

लेकिन पूर्ववर्ती रहें, यदि आप अनुक्रमों का उपयोग न करना चुनते हैं तो आप डिस्क आईओ और संभावित लेनदेन लॉकिंग बढ़ा सकते हैं।

अनुक्रम जनरेटर के डिस्क मैं/हे या लेन-देन लॉकिंग ओवरहेड बिना अद्वितीय संख्या पैदा करने के लिए बहुउपयोगकर्ता वातावरण में उपयोगी है।

a_horse_with_no_name की टिप्पणियों को दोहराने के लिए, आईडी में अंतराल के साथ समस्या क्या है?


संपादित भी कैशिंग तर्क पर एक नज़र आप यहाँ स्थित का उपयोग करना चाहिए: http://download.oracle.com/docs/cd/E11882_01/server.112/e17120/views002.htm#i1007824


0

के रूप में उल्लेखित व्यक्ति: अंतराल, एक समस्या नहीं होनी चाहिए, इसलिए यदि आप कर रहे हैं की आवश्यकता नहीं है कोई अंतराल आप कुछ गलत कर रहे हैं। (लेकिन मुझे नहीं लगता कि यह वही है जो आप चाहते हैं)।

कैश को कम करने से संख्या को कम करना चाहिए और अनुक्रम के प्रदर्शन को कम करना चाहिए, विशेष रूप से समवर्ती पहुंच के साथ। (जो आपके उपयोग के मामले में कोई समस्या नहीं होनी चाहिए)।

परिवर्तन अनुक्रम कथन (http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_2011.htm) का उपयोग करके अनुक्रम को बदलना अनुक्रम के वर्तमान/अगले वैल को रीसेट नहीं करना चाहिए ।

+2

अनुक्रम कैश सिस्टम ग्लोबल एरिया (एसजीए) में एसजीए ("अनुक्रम कैश [संग्रहीत किया जाता है] में है।") नए सत्र बनाने का एक त्वरित परीक्षण इंगित करता है कि वे समवर्ती हैं (जो कि दोनों में अपेक्षित वृद्धि के साथ है एक ही कैश का उपयोग कर सत्र)। यदि आप इसका परीक्षण करते हैं तो आपके पास अलग-अलग परिणाम हैं, लेकिन मुझे लगता है कि विपरीत कनेक्शन पूलिंग मुद्दों के रूप में एक नई गिनती शुरू करने के लिए निष्क्रियता के कारण कैश सिर्फ समय समाप्त हो गया है। – Harrison

+0

आपके द्वारा प्रदान किया गया लिंक पढ़ें, इसलिए मुझे लगता है कि आप सही हैं ... आश्चर्य है कि मैंने उस झूठी बुद्धि को उठाया है: -/ –

1
(भी जब 20-40 नए रिकॉर्ड को ध्यान में एक दिन के अपने बयान ले रही है)

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

आप कहते हैं कि आपका सिस्टम बहुत व्यस्त नहीं है, इस मामले में आपके अनुक्रम को कोई कैश नहीं बदला जाता है। आप एक तर्क समस्या को ठीक करने के लिए एक नगण्य प्रदर्शन हिट लेने की स्थिति में हैं ताकि आप भी हो सकें।

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