ओरेकलबल्ककॉपी (ओडीपी.नेट) और एसक्यूएल * लोडर के बीच कुछ महत्वपूर्ण प्रदर्शन अंतर देख रहा हूं जब ओरेकल सर्वर दूसरी मशीन पर है।ओरेकलबल्ककॉपी बनाम एसक्यूएल * लोडर प्रदर्शन
मेरे पास ओरेकल में तीन कॉलम (एक BINARY_FLOAT, दो NUMBER (18,0)) के साथ एक बहुत ही बुनियादी तालिका है। कोई प्राथमिक कुंजी, इंडेक्स, ट्रिगर्स इत्यादि नहीं हैं। डीबी में थोक डेटा प्राप्त करने के लिए इसे स्टेजिंग टेबल के रूप में उपयोग किया जाता है।
एसक्यूएल * लोडर को तालिका में 4.5 मिलियन पंक्तियों को लोड करने के लिए लगभग 27 सेकंड लगते हैं।
ओरेकलबल्ककॉपी केवल 1 मिलियन पंक्तियों को लोड करने में लगभग 10 मिनट लगते हैं।
दस्तावेज के अनुसार ओरेकलबल्ककॉपी, * "... प्रत्यक्ष पथ लोड दृष्टिकोण का उपयोग करता है, जो समान है, लेकिन ओरेकल एसक्यूएल * लोडर के समान नहीं है।" * यह एसक्यूएल * लोडर के साथ नहीं हो सकता है प्रदर्शन के मामले में, लेकिन यह अंतर हास्यास्पद है।
नेटवर्क यातायात के कुछ बुनियादी विश्लेषण के बाद, मैंने पाया कि ओरेकलबल्ककॉपी बड़ी संख्या में छोटे पैकेट भेज रहा था और प्राप्त कर रहा था। मैंने प्रत्येक के लिए पैकेट की तुलना करने के लिए वायरशर्क का उपयोग किया और कुछ दिलचस्प परिणाम पाये।
एसक्यूएल * लोडर - प्रारंभिक कनेक्शन हेन्डशेकिंग के बाद - 8 किलोबाइट पैकेट (टीएनएस प्रोटोकॉल) की एक श्रृंखला भेजता है और जवाब में 60 बाइट ACKs प्राप्त करता है।
OracleBulkCopy 102 बाइट पैकेट (टीएनएस प्रोटोकॉल) की एक श्रृंखला भेजता है और जवाब में एक 133 बाइट पैकेट (टीएनएस प्रोटोकॉल) प्राप्त करता है। क्या...!? ऐसा लगता है कि यह एक समय में एक पंक्ति भेज रहा है!
ओरेकलबल्ककॉपी कक्षा के साथ, मैं 100,000 का बैच आकार का उपयोग कर रहा हूं और डेटा फ़ाइल से पढ़ने के लिए कस्टम IDataReader का उपयोग कर रहा हूं।
तो, मेरे सवाल कर रहे हैं:
क्या कभी किसी ने इस व्यवहार देखा है?
क्या ओरेकलबल्ककॉपी वास्तव में थोक लोडिंग टूल के रूप में कार्य करता है?
क्या मुझे कुछ ठीक से काम करने के लिए कॉन्फ़िगर करने की आवश्यकता है? (ग्राहक/सर्वर सेटिंग्स, आदि)
किसी भी मदद की बहुत सराहना की जाती है।
मुझे डेटाटेबल का उपयोग करके समान सम्मिलित समय मिल रहा है। इससे भी बदतर, कुछ कॉलम टाइपस्टैम्प प्रकार हैं इसलिए मुझे डेटाटेबल कॉलम को ओरेकलटाइमस्टैम्प प्रकार में सेट करना होगा, जो कि जब मैं एप्लिकेशन को प्रोफाइल करता हूं तो एक अच्छा हिट भी लगता है। क्या आप बल्ककॉपी को बढ़ा सकते थे? Sqlloader चलाने के लिए कमांडलाइन पर बाहर निकलना वेब सर्वर पर बड़ी फ़ाइलों को संभालने के लिए वास्तव में खराब तरीका लगता है! – Dan