2012-01-12 14 views
5

में खराब प्रदर्शन प्राप्त करने के लिए खराब प्रदर्शन। मैं नेट में ऑरैकल से क्लॉब कॉलम पढ़ने की कोशिश कर रहा हूं और बहुत खराब प्रदर्शन और नेटवर्क यातायात के बहुत सारे देख रहा हूं।ओरेकल से नैट

मैंने ओडीपी + ओसीआई, devArt + OCI परिणामों को उसी परिणाम के साथ डेटा तक पहुंचने का प्रयास किया है - डेटा रीडर में 1000 पंक्तियां प्राप्त करने में प्रत्येक 20 सेकंड लगते हैं और प्रत्येक पंक्ति के लिए क्लोब मान पढ़ते हैं।

वायरशर्क निशान की जांच करना, यह पता चला है कि हर बार जब मैं पाठक में एक पंक्ति के लिए क्लोब फ़ील्ड पढ़ने की कोशिश करता हूं, तो क्लाइंट और सर्वर के बीच अतिरिक्त एकाधिक टीसीपी पैकेट भेजे जाते हैं। तो 1000 पंक्तियों के लिए यह केवल एक पंक्ति पूछताछ से 1000 गुना धीमा हो जाता है।

उसी समय, यदि मैं SQL डेवलपर में एक ही क्वेरी चलाता हूं (जो मुझे लगता है कि ओसीआई के बजाय पतली जेडीबीसी ड्राइवर का उपयोग करता है), तो मुझे क्लोब वैल्यू सहित तुरंत परिणाम मिलते हैं। यह प्रत्येक पंक्ति के लिए क्लोब पूछने की कोशिश नहीं करता है - यह सब एक ही बार में जाता है!

लेकिन मुझे .NET के लिए पतला ग्राहक नहीं दिख रहा है। मैं चीजों को कैसे गति दे सकता हूं? कृपया सहायता कीजिए!

संपादित करें: मेरा फ़ील्ड प्रकार वास्तव में XMLTYPE को क्लोब के रूप में संग्रहीत किया गया है, एक वास्तविक क्लोब नहीं। GetClobVal का उपयोग करके यह 1000 पंक्तियों के लिए 50% से 10 सेकंड तक परिणाम में सुधार करता है। लेकिन साथ ही, एसक्यूएल डेवलपर तुरंत परिणाम लौटा रहा है, 10 सेकेंड में नहीं।

+0

क्या आपने कभी इस मुद्दे को हल किया है? क्या आपने विक्रेता के साथ एक समर्थन अनुरोध लॉग किया था? –

उत्तर

1

आपने सही ढंग से देखा है कि ओरेकल एलओबी की पुनर्प्राप्ति में देरी करता है। इस प्रकार, प्रदर्शन आपके नेटवर्क नेटवर्क राउंड-ट्रिप समय से सीमित है।

OracleCommand वर्ग के InitialLOBFetchSize संपत्ति के साथ

(ODP.NET में, documentation देखें), पंक्ति की प्रारंभिक पुनः प्राप्ति के साथ LOB का भाग प्राप्त करने के लिए ओरेकल बता सकते हैं। यदि आपके एलओबी बहुत लंबे नहीं हैं, तो इससे काफी अंतर हो सकता है।

+0

धन्यवाद, मैं कल भी इसे देख रहा था लेकिन यह मेरे लिए कोई फर्क नहीं पड़ रहा था। मैं वास्तव में अपने संदेश में बहुत ईमानदार नहीं था - हमारे पास XmlType फ़ील्ड क्लोब के रूप में संग्रहीत है, न कि सीधे क्लोब और शायद यह समस्याएं पैदा कर रहा है। मैंने GetClobVal को कॉल करने का भी प्रयास किया है और यह 50% प्रदर्शन वृद्धि देता है, लेकिन यह 1000 पंक्तियों के लिए केवल 10 सेकंड है जबकि एसक्यूएल डेवलपर तुरंत 5000 लाता है। – neonknight