2011-07-19 9 views
5

हम अपने डेटाबेस को साइबेस से ओरेकल में परिवर्तित करने की प्रक्रिया में हैं और हमने प्रदर्शन समस्या को मारा है। साइबेस में, हमारे पास एक टेक्स्ट फ़ील्ड था और इसे ओरेकल में एक सीएलओबी के साथ बदल दिया गया।साइबेस टेक्स्ट बनाम ओरेकल सीएलओबी प्रदर्शन

यह कि हम अपने जावा कोड में डेटा को एक्सेस किया है:

while(rs.next()) { 
    String clobValue = rs.getString(1); // This takes 176ms in Oracle! 
    . 
    . 
} 

डेटाबेस देश भर में है, लेकिन अभी भी, हम Sybase के साथ किसी भी प्रदर्शन की समस्याओं और पाठ डेटा के अपने पुनः प्राप्ति नहीं था।

क्या इस प्रदर्शन को बढ़ाने के लिए हम कुछ कर सकते हैं?

उत्तर

3

कुछ अन्य विकल्प:

LOB स्तंभों (डेटा पंक्ति में) या बाहर के लाइन (एक अलग जगह में) में लाइन संग्रहीत किया जा रहा है? यदि LOB कॉलम छोटे होते हैं (आकार में 4k के तहत), तो आप ENABLE STORAGE IN ROW क्लॉज का उपयोग ओरेकल को यथासंभव डेटा को स्टोर करने के लिए कह सकते हैं।

यदि आपके LOB बड़े हैं और अक्सर उपयोग किए जाते हैं, तो क्या वे बफर कैश में संग्रहीत किए जा रहे हैं? 10 जी में डिफ़ॉल्ट यह है कि LOB NOCACHE हैं, जिसका अर्थ है कि उनके खिलाफ प्रत्येक I/o ऑपरेशन डेटाबेस में सीधे पढ़ता है, एक सिंक्रोनस डिस्क इवेंट, जो धीमा हो सकता है। एक डेटाबेस ट्रेस direct path read/direct path write घटनाओं पर महत्वपूर्ण प्रतीक्षा करेगा।

This chapter ओरेकल एप्लिकेशन डेवलपर की मार्गदर्शिका - बड़े ऑब्जेक्ट्स मूल्यवान पढ़ने होंगे।

+0

इसे उत्तर के रूप में फ़्लैग करना क्योंकि यह जानकारी प्रदान करने के सबसे नज़दीक आया है जिसने मई को जवाब दिया है :) – wsaxton

4

डिफ़ॉल्ट रूप से, LOBs तालिका डेटा के साथ दिलवाया नहीं कर रहे हैं और यह उन्हें getString में लाने के लिए डेटाबेस के लिए एक अतिरिक्त राउंड ट्रिप ले जाता है।

आप Oracle की .NET प्रदाता का उपयोग कर रहे हैं, तो आप काफी बड़ी स्मृति में अपनी बड़ी वस्तुओं को समायोजित करने के तो वे अन्य डेटा के साथ अपने सभी संपूर्णता में दिलवाया जा सकता है एक मूल्य के लिए डेटा पाठक सेटिंग्स में InitialLOBFetchSize निर्धारित कर सकते हैं।

+0

दुर्भाग्य से हम इस ढांचे का उपयोग नहीं कर रहे हैं। हम सोलारिस पर जेडीबीसी का उपयोग कर रहे हैं। – wsaxton

0

हमने एक अलग दृष्टिकोण लेने का फैसला किया जो हमें क्लोब प्रदर्शन को अनदेखा करने की अनुमति देगा।

हमारे वर्तमान कोड (मैंने इसे नहीं लिखा है!) डेटाबेस में एक टेबल से पूछताछ करता है और मेज सहित सभी जानकारी को पुनर्प्राप्त करता है, भले ही उन्हें सभी को पुनः प्राप्त करने के लिए पर्याप्त नहीं था, पहर। इसके बजाए, हमने एक वर्चर में पहले 4k वर्णों के साथ एक और फ़ील्ड बनाया और इसके बजाय क्वेरी। फिर, जब हमें पूर्ण क्लोब की आवश्यकता होती है, तो हम सभी रिकॉर्ड के लिए सभी समूहों की बजाय व्यक्तिगत आधार पर पूछते हैं।

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