2009-07-17 11 views
6

इस प्रश्न के अधीन, यह सब पूछता है: निष्पादित बैच विधि कितनी प्रभावी है? क्या कोई प्रदर्शन बेंचमार्क है, जो कहता है .. 'यदि आपके पास 1000 रिकॉर्ड्स डालने हैं, तो execute के बजाय executeBatch का उपयोग करके अद्यतन डेटा एक्स चक्रों की एक्स बचाता है?'निष्पादित वक्तव्य पर निष्पादन कितना प्रभावी है?

या यह सिर्फ एक सम्मेलन है?

संपादित करें: यहां मैं यह काम कर रहा हूं: जेड/ओएस पर होस्ट किया गया एक डीबी 2 वी 8.1, एक वेब ऐप जो 80,000 रिकॉर्ड्स को सबसे खराब केस परिदृश्य निष्पादन में एक बार में डालेगा।

+2

हर कोई आपको ऊन संख्या देने की बजाय, इसे अपने लिए क्यों न करें और इसे मापें? केवल आप ही जान सकते हैं कि आप अपने सेट-अप से कितना लाभ प्राप्त करेंगे। – skaffman

+1

@ स्काफमैन मैं ऐसा नहीं करना चाहता जो लोकप्रिय रूप से समयपूर्व अनुकूलन कहलाता हो। हालांकि, मैं समझना चाहता हूं कि यह कितना तेज़ है। – Jay

+0

मैं इसे समझता हूं, लेकिन आप बेंचमार्किंग के बिना एक सूचित विकल्प नहीं बना सकते हैं। – skaffman

उत्तर

8

सुनिश्चित नहीं है कि आप किस डेटाबेस का उपयोग कर रहे हैं। जब मैं इस डीबी 2 के प्रयोग पर एक परीक्षण भाग गया यह मैं क्या देखा है:

डेटाबेस के लिए लिखने के लिए:

1 डालने 2500 माइक्रोसेकंड ले लिया।

10 आवेषण में 6000 माइक्रोसॉन्ड ले गए। (प्रति लिखने के लिए 600 माइक्रोसॉन्ड)

10000 प्रविष्टियों में लगभग 1 मिलियन माइक्रोसेकंड लग गए। (प्रति लिखने के लिए 100 माइक्रोसॉन्ड)

प्रदर्शन अधिकतम हो गया। इसका मतलब यह है कि संदेश भेजने में एक बड़ा ओवरहेड है, और बैच विधि का उपयोग करके इसे कम किया जाता है। बेशक, विशाल बैचों में आवेषण/अपडेट भेजना एप्लिकेशन को दुर्घटनाग्रस्त होने पर उन्हें खोने का जोखिम चलाता है।

यह भी ध्यान दें: सटीक संख्याएं आपके डीबी और सेटिंग्स के आधार पर अलग-अलग होंगी। तो आपको अपना खुद का "मीठा स्थान" ढूंढना होगा। लेकिन यह आपको एक विचार देता है।

+0

@ विन्डफाइंडर ने उपरोक्त सभी के लिए executeBatch का उपयोग किया था? और, आपने कहा 'बड़े बैचों को एप्लिकेशन दुर्घटनाओं में खोने का खतरा है' - अगर मैं लेनदेन प्रबंधन का उपयोग कर रहा हूं - मुझे इस परिदृश्य में अच्छा होना चाहिए? – Jay

+0

हां, मैंने executeBatch का उपयोग किया। लेनदेन प्रबंधन इस जोखिम को पूरी तरह से खत्म नहीं करेगा, लेकिन यह इसे कम कर सकता है। – Alex

+0

तरीकों के सबसे सरल तरीकों से, यदि मैं ऑटोोकॉमिट को झूठी पर सेट करना चाहता था और निष्पादन बैच लौटाता हूं, तो मुझे जोखिम कैसे होता है? – Jay

1

मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं, लेकिन कई हजार पंक्तियों को डालने के लिए, एक बैच किया गया कथन है तेज़। हालांकि, मैं आपको नंबर नहीं दे सकता।

+0

@ स्काफमैन जो मेरा प्रश्न था - यह कितना तेज़ है? क्या आप मुझे अनुमान लगा सकते हैं? – Jay

+0

मैं कहीं 10 और 20 बार के बीच अनुमान लगाता हूं, यह डेटाबेस पर बड़ी हद तक निर्भर करेगा। एक गैर-बैच किए गए बयान में बहुत अधिक नेटवर्क यातायात शामिल है, इसलिए एक निकालने वाला सर्वर स्थानीय की तुलना में बैचिंग से अधिक लाभान्वित होगा, उदाहरण के लिए। – skaffman

+1

मेरे अनुभव में 10-20x से अधिक (मेरे विशेष उपयोग के मामले के लिए)। –

1

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

उस ने कहा, आपको अपनी विशेष स्थिति के प्रदर्शन में सुधार करने के लिए कुछ वास्तविक परीक्षण करना होगा।

0

JDBC विनिर्देश अध्याय 14 का कहना है कि व्यक्तिगत रूप से कई SQL कथन प्रस्तुत करने, के बजाय, बहुत प्रदर्शन

0

सुधार कर सकते हैं batchExecute में() अद्यतन बयान और अधिक समय ले रहे हैं तो 5001 डालने और अद्यतन के साथ बयान मैं tring हूँ सम्मिलित बयान प्रदर्शन का राशन 15:84

+0

और उत्तर कहां है? – Rizier123

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