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

Oracle 10g छोटा ब्लॉब या क्लोब इनलाइन संग्रहीत नहीं किया जा रहा है?

Oracle LOBs का व्यवहार निम्नलिखित है।

एक LOB को इनलाइन स्टोर किया जाता है जब:

(
  The size is lower or equal than 3964
  AND
  ENABLE STORAGE IN ROW has been defined in the LOB storage clause
) OR (
  The value is NULL
)

एक LOB को आउट-ऑफ़-रो तब संग्रहित किया जाता है जब:

(
  The value is not NULL
) AND (
  Its size is higher than 3964
  OR
  DISABLE STORAGE IN ROW has been defined in the LOB storage clause
)

अब यह एकमात्र मुद्दा नहीं है जो प्रदर्शन को प्रभावित कर सकता है।

यदि LOB को अंततः इनलाइन संग्रहीत नहीं किया जाता है, तो Oracle का डिफ़ॉल्ट व्यवहार उन्हें कैशिंग से बचाना है (केवल इनलाइन LOB को पंक्ति के अन्य क्षेत्रों के साथ बफर कैश में कैश किया जाता है)। Oracle को गैर इनलाइन LOB को कैश करने के लिए कहने के लिए, LOB परिभाषित होने पर CACHE विकल्प का उपयोग किया जाना चाहिए।

डिफ़ॉल्ट व्यवहार पंक्ति में सक्षम भंडारण है, और NOCACHE, जिसका अर्थ है कि छोटे LOB इनलाइन होंगे, बड़े LOB नहीं होंगे (और कैश नहीं किए जाएंगे)।

अंत में, संचार प्रोटोकॉल स्तर पर एक प्रदर्शन समस्या भी है। विशिष्ट Oracle क्लाइंट उन्हें लाने के लिए प्रति LOB में 2 अतिरिक्त राउंडट्रिप करेंगे:- एक LOB के आकार को पुनः प्राप्त करने के लिए और तदनुसार मेमोरी आवंटित करने के लिए- एक डेटा को स्वयं लाने के लिए (बशर्ते LOB छोटा हो)

ये अतिरिक्त राउंडट्रिप किए जाते हैं, भले ही परिणामों को पुनः प्राप्त करने के लिए एक सरणी इंटरफ़ेस का उपयोग किया जाता है। यदि आप 1000 पंक्तियों को पुनः प्राप्त करते हैं और आपके सरणी का आकार काफी बड़ा है, तो आप पंक्तियों को पुनः प्राप्त करने के लिए 1 राउंडट्रिप और LOB की सामग्री को पुनः प्राप्त करने के लिए 2000 राउंडट्रिप का भुगतान करेंगे।

कृपया ध्यान दें कि यह नहीं करता है इस तथ्य पर निर्भर करता है कि LOB इनलाइन संग्रहीत है या नहीं। वे पूरी तरह से अलग समस्याएं हैं।

प्रोटोकॉल स्तर पर अनुकूलन करने के लिए, Oracle ने एक राउंडट्रिप (OCILobArrayRead) में कई LOB लाने के लिए एक नई OCI क्रिया प्रदान की है। मुझे नहीं पता कि जेडीबीसी के साथ भी ऐसा ही कुछ मौजूद है या नहीं।

एक अन्य विकल्प क्लाइंट पक्ष पर LOB को बांधना है जैसे कि यह एक बड़ा रॉ/VARCHAR2 था। यह केवल तभी काम करता है जब LOB का अधिकतम आकार परिभाषित किया जा सकता है (चूंकि अधिकतम आकार बाइंड समय पर प्रदान किया जाना चाहिए)। यह ट्रिक अतिरिक्त राउंडट्रिप्स से बचाती है:LOB को RAW या VARCHAR2 की तरह ही प्रोसेस किया जाता है। हम अपने LOB गहन अनुप्रयोगों में इसका बहुत उपयोग करते हैं।

एक बार राउंडट्रिप की संख्या को अनुकूलित करने के बाद, स्थिति को बेहतर ढंग से फिट करने के लिए पैकेट आकार (एसडीयू) को नेट कॉन्फ़िगरेशन में आकार दिया जा सकता है (यानी सीमित संख्या में बड़ी राउंडट्रिप)। यह "एसक्यूएल*नेट मोर डेटा टू क्लाइंट" और "एसक्यूएल*नेट मोर डेटा फ्रॉम क्लाइंट" प्रतीक्षा घटनाओं को कम करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओआरए 00936 गुम अभिव्यक्ति त्रुटि को कैसे हल करें?

  2. कास्ट बनाम एसएसआईएस डेटा प्रवाह निहित रूपांतरण अंतर

  3. एसक्यूएल (ओरेकल) में गतिशील 'पसंद' कथन

  4. ओरेकल में ज्ञात विभाजन कुंजी मान दिए जाने पर कैसे बताएं कि एक पंक्ति किस विभाजन में जाएगी?

  5. जीआई 12.1.0.2 और सेगमेंटेशन फॉल्ट को संकलित नहीं कर सकता