2011-03-31 9 views
6

एक जावा परियोजना में, मैं एक ojdbc6 जारओरेकल getConnection धीमी

<dependency> 
     <groupId>com.oracle</groupId> 
     <artifactId>ojdbc6</artifactId> 
     <version>11.2.0.1.0</version> 
     <scope>compile</scope> 
    </dependenc> 

एक दिन मैं चलाने के लिए पहली बार उपयोग कर रहा हूँ, dataSource.getConnection() तेजी से है। दूसरी बार आमतौर पर ठीक है। अगले कुछ बार लगभग 45 सेकंड लगते हैं। उसके बाद, इसमें कई मिनट लगते हैं। एक बार मेरे पास किसी दिए गए एप्लिकेशन रन का पहला कनेक्शन हो जाने के बाद, मुझे प्राप्त होने वाले किसी भी नए कनेक्शन बहुत तेज़ होते हैं। यह देरी केवल दिए गए रन के लिए पहला कनेक्शन प्राप्त कर रही है।

मेरा पहला कनेक्शन इतना धीमा कर रहा है क्या?

मैं नेटस्टैट देख रहा हूं और सफल रन के बाद किसी भी कनेक्शन को लटकाना नहीं देख रहा हूं। किसी भी भाग्य के साथ कई अलग-अलग कनेक्शन पूल (डीबीसीपी, सी 3 पीओ) की कोशिश की है।

Connection con = dataSource.getConnection(); 

कोई भी विचार: स्रोत कोड के माध्यम से डीबगिंग, देरी org.springframework.jdbc.datasource.DataSourceUtils की लाइन पर 100% है?

अधिक जानकारी

1) मैं एक कनेक्शन पूल (DBCP या C3PO) जो भविष्य में उपयोग के लिए कनेक्शन की बचत होती है उपयोग कर रहा हूँ के लिए संपादित। जब मैं एक नया कनेक्शन प्राप्त करने के बारे में बात करता हूं, मेरा मतलब है कि पहला कनेक्शन उपयोग में है .. मुझे डीबी में जाना और नया कनेक्शन प्राप्त करना है। निस्संदेह मैं वापस लौट सकता हूं और कनेक्शन पूल से बार-बार अपना कनेक्शन प्राप्त कर सकता हूं। लेकिन एक ही समय में एक सेकंड प्राप्त करना भी तेज़ है।

2) मुझे नहीं पता कि मेरे डीबी ने मुझे कितने कनेक्शन लॉग इन किए हैं। कोई विचार जहां यह संपत्ति ओरेकल में है?

+1

शायद इस लेख तय करने जा [कैसे जाँच करने के लिए ओरेकल डेटाबेस के लिए अधिकतम कनेक्शन की अनुमति?] (http://stackoverflow.com/questions/162255/how-to-check-the- अधिकतम- संख्या-of-allowed-connections-to-an-oracle-डेटाबेस) आपके लिए दिलचस्प है – lkdg

उत्तर

7

का उपयोग कर/dev/बजाय/dev/urandom के यादृच्छिक डेटाबेस के साथ एक ssh कनेक्शन बनाने के लिए जावा के कारण था ..../dev/urandom इस

+1

यह उल्लेख करने लायक है कि आप इसे पूरा करने के लिए JVM तर्क -Djava.security.egd = फ़ाइल:/dev /./ urandom का उपयोग कर सकते हैं।अतिरिक्त '।' पर ध्यान दें तर्क में Http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom देखें। – Ryan

3

2 प्रश्न।

सबसे पहले, आपको पहला कनेक्शन मिलने के बाद, आप इसके साथ क्या कर रहे हैं? क्या आप इसे सही तरीके से बंद कर रहे हैं (जिसमें आपके द्वारा खोले गए सभी संसाधनों सहित, स्टेटमेंट और परिणामसेट) शामिल हैं?

दूसरा, आपके डीबी ने आपके द्वारा लॉग इन किए गए प्रमाण-पत्रों के लिए कितने कनेक्शन की अनुमति दी है?

कारण मैं इन सवालों को पूछने समय देरी समय की राशि डीबी आप के बाद साफ करने के लिए के लिए (क्योंकि आप इसे सही नहीं किया है हो सकता है) यह लेता है और नि: शुल्क आप को देने के लिए एक कनेक्शन हो सकता है। संसाधनों को मजबूती से रिलीज़ करने से पहले इसमें से अधिकांश समय-समय पर हो सकता है।

+0

नीचे – bwawok

1

क्या आप अपने कनेक्शन पूल में अपने अधिकतम सक्रिय कनेक्शन से अधिक हैं और अपने प्रोग्राम को पुराने कनेक्शन जारी करने की प्रतीक्षा करनी है?

+0

पर अद्यतन ओपी मैं अपने कार्यक्रमों को एक के बाद चलाता हूं। ऐसा लगता है कि यह ठीक से सब कुछ बंद कर रहा है, लेकिन पूरी तरह से सुनिश्चित नहीं है कि कैसे जानना है। – bwawok

+0

यदि आप डीबीसीपी का उपयोग करते हैं, तो आप फिर से एक और कनेक्शन प्राप्त करने का प्रयास करने से पहले datasource.getNumActive() (आपको इसे BasicDataSource पर डालने की आवश्यकता है) प्रिंट कर सकते हैं। – Ray