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

Oracle के लिए JDBC का उपयोग करके ResultSet को पुनरावृत्त करने में लगभग 16s में बहुत समय लगता है?

मैंने 4000 पंक्तियों और 10 स्तंभों के साथ 10 वर्णों वाली एक तालिका स्थापित की है और निम्नलिखित दृष्टिकोण (RealTimeCounter का उपयोग करके एक सरल प्रदर्शन परीक्षण किया है। एक वर्ग है जो start() . के बीच के वास्तविक समय को मापता है और stop() ):

List<String> myResult = new ArrayList<>();
ResultSet rs = s.executeQuery("SELECT * FROM Performance");

RealTimeCounter rtc = new RealTimeCounter();
rtc.start();
while(rs.next()) {
    myResult.add(rs.getString(1));
}
rtc.stop();
System.out.println(rtc);

परिणाम:

  • डिफ़ॉल्ट फ़ेच आकार:निष्पादन समय लगभग है। 20 सेकंड
  • लाने का आकार =100:निष्पादन का समय लगभग 2.2 सेकंड . है
  • लाने का आकार =500:निष्पादन का समय लगभग 450 मिसे . है
  • लाने का आकार =2000:निष्पादन का समय लगभग 120 मिसे . है
  • लाने का आकार =4000:निष्पादन का समय लगभग 50 मिसे . है
  • लाने का आकार =4001:निष्पादन का समय लगभग 10 मिसे . है (!!)

तो, लाने का आकार करता है निष्पादन की गति पर महत्वपूर्ण प्रभाव पड़ता है।

ध्यान दें कि, दूसरी ओर, फ़ेच आकार का मेमोरी खपत पर कुछ प्रभाव पड़ता है। दिलचस्प रूप से पर्याप्त है, Runtime.getRuntime().freeMemory(); का उपयोग करके एक त्वरित विश्लेषण उपरोक्त कोड से पहले और बाद में पता चला कि प्रभाव मेरी अपेक्षा से बहुत कम है, हालाँकि। मुझे जो नंबर मिले हैं वे हैं:

  • डिफ़ॉल्ट फ़ेच आकार:665k
  • लाने का आकार =100:665k
  • लाने का आकार =500:665k
  • लाने का आकार =2000:743k
  • लाने का आकार =4000:821k
  • लाने का आकार =4001:861k


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Concatenate स्ट्रिंग और संख्या उदाहरण

  2. EM13c . में अलर्ट लॉग फ़िल्टर करना

  3. स्पूल कमांड:फाइल करने के लिए SQL स्टेटमेंट आउटपुट न करें

  4. ADDM टास्क कैसे बनाएं और उसकी रिपोर्ट कैसे चेक करें

  5. क्या डेटाबेस संरचना में परिवर्तन के लिए कोई संस्करण नियंत्रण प्रणाली है?