सेल्सफोर्स हमें एक समय में एक विशेष संख्या में स्टेटमेंट/रिकॉर्ड को प्रोसेस या निष्पादित करने की अनुमति देता है। निष्पादित या संसाधित करने के लिए डीएमएल स्टेटमेंट, एपेक्स क्लास आदि की कुछ सीमाएं हैं। इन सीमाओं को गवर्नर सीमा के रूप में जाना जाता है। इस ट्यूटोरियल में, हम देखेंगे कि गवर्नर की सीमाएँ क्या हैं और उन्हें कैसे नियंत्रित किया जा सकता है। इसके अलावा, सेल्सफोर्स एपेक्स कॉलआउट, एपेक्स क्लास, लाइटनिंग वेब कंपोनेंट्स, एसओएसएल और एसओक्यूएल स्टेटमेंट से संबंधित सीमाओं को जानने के लिए 'सीमा' वर्ग प्रदान करता है।
राज्यपाल की सीमा
एक ऐसे परिदृश्य पर विचार करें जहां अलीश और सुभाष सेल्सफोर्स संगठन का उपयोग करने वाले दो व्यक्ति हैं। ऐलिस एक लेन-देन में 1000 डीएमएल स्टेटमेंट को संसाधित या निष्पादित करना चाहता है। समानांतर में, सुभाष एक बार में 5000 रिकॉर्ड लोड करना चाहता है। यदि वे इसे समानांतर में करते हैं, तो Salesforce स्वीकार नहीं करेगा और व्यस्त हो जाएगा। इसलिए, राज्यपाल की सीमा तस्वीर में आती है। इस मामले में अलीश एक समय में 100 डीएमएल संसाधित कर सकता है और सुभाष एक समय में 500 रिकॉर्ड संसाधित कर सकता है। वे एसिंक्रोनसबैच एपेक्स का उपयोग प्रत्येक लेनदेन को एक अलग थ्रेड पर करने के लिए उनमें से प्रत्येक को परेशान किए बिना कर सकते हैं और अपना कार्य पूरा कर सकते हैं।
मूल रूप से, सेल्सफोर्स में गवर्नर की सीमाएँ कई लेनदेन में प्रसंस्करण और निष्पादन को सीमित करती हैं। 'प्रति-लेन-देन शीर्ष सीमा' प्रत्येक लेन-देन के लिए गिना जाता है और 'आकार-विशिष्ट शीर्ष सीमा' कोड के आकार से संबंधित है। सेल्सफोर्स दो प्रक्रियाओं का समर्थन करता है: सिंक्रोनस और एसिंक्रोनस प्रक्रियाएं। सिंक्रोनस प्रक्रिया में, एपेक्स स्क्रिप्ट को एक ही बार में निष्पादित किया जाता है जबकि एसिंक्रोनस प्रक्रिया में, एपेक्स स्क्रिप्ट को कई नौकरियों में विभाजित करके निष्पादित किया जाता है।
अनुमत सीमाएँ
आइए विभिन्न परिदृश्यों के लिए सीमा गणना पर चर्चा करें:
- सिंक्रोनस एपेक्स में 100 SOQL प्रश्नों और एसिंक्रोनस एपेक्स में 200 SOQL प्रश्नों को प्रोसेस/चलाना संभव हो सकता है।
- सिंक्रोनस और एसिंक्रोनस एपेक्स दोनों के लिए एक SOQL क्वेरी से केवल 50,000 रिकॉर्ड वापस आएंगे।
- यदि हम Database.getQueryLocator() का उपयोग करते हैं, तो सिंक्रोनस और एसिंक्रोनस एपेक्स दोनों के लिए एक बार में केवल 10,000 ही वापस किए जाते हैं।
- दोनों ही स्थितियों में जारी किए गए SOSL प्रश्नों की संख्या 20 है।
- सिंक्रोनस एपेक्स को प्रोसेस करने के लिए आवश्यक ढेर का आकार 6 एमबी है। एसिंक्रोनस एपेक्स के लिए, आवश्यक हीप आकार दोगुना है जो इसे 12 एमबी बनाता है।
- सिंक्रोनस एपेक्स के लिए अनुमत अधिकतम CPU समय 10,000 मिलीसेकंड और एसिंक्रोनस एपेक्स के लिए 60,000 मिलीसेकंड है।
- दोनों एपेक्स के निष्पादन के लिए केवल 10 मिनट की अनुमति है।
- दोनों ही मामलों में, हम 100 प्राप्तकर्ताओं के साथ केवल 10 SendEmail () विधि का उपयोग कर सकते हैं।
- एपेक्स क्लास या एपेक्स ट्रिगर में मौजूद वर्ण 1 मिलियन के भीतर होने चाहिए।
- बैच एपेक्स (एसिंक्रोनस) में, आकार 200 है। 'डेटाबेस' वर्ग का क्वेरीलोकेटर () प्रति लेनदेन 50 मिलियन रिकॉर्ड लौटाता है।
- केवल 5 एपेक्स जॉब कतार में या सक्रिय होंगे।
सीमा वर्ग उदाहरण:
एपेक्स 'लिमिट' वर्ग में राज्यपाल की सीमा निर्दिष्ट कर सकता है। यह वर्ग कुछ ऐसी विधियाँ प्रदान करता है जो राज्यपाल की सीमाएँ बताती हैं। आइए निम्नलिखित उदाहरण देखें जो कुछ गवर्नर सीमाओं को प्रदर्शित करता है:
System.debug ('कुल प्रश्नों की संख्या संसाधित की जा सकती है:' + Limits.getLimitAggregateQueries ());
System.debug ('वेब सेवा विवरणों की संख्या संसाधित की जा सकती है:' + Limits.getLimitCallouts ());
System.debug ('रिकॉर्ड की संख्या संसाधित की जा सकती है:' + Limits.getLimitDmlRows ());
System.debug ('डीएमएल बयानों की संख्या कहा जा सकता है:' + Limits.getLimitDmlStatements ());
System.debug ('बाइट्स में मेमोरी की कुल मात्रा:' + Limits.getLimitHeapSize ());
System.debug ('SOQL प्रश्नों की संख्या जारी की जा सकती है:' + Limits.getLimitQueries ());
System.debug ('रिकॉर्ड की संख्या जारी की जा सकती है:' + Limits.getLimitQueryRows ());
System.debug('SOSL प्रश्नों की संख्या जारी की जा सकती है: '+ Limits.getLimitSoslQueries());
आउटपुट:
यह जांचना भी संभव हो सकता है कि 'लिमिट' वर्ग में मौजूद 'डोम' विधियों का उपयोग करके कितने डीएमएल स्टेटमेंट/पंक्तियों को लौटाया जा सकता है।
- सीमाएँ। getDMLStatements () एक उदाहरण में उपयोग किए जाने वाले कुल डीएमएल विवरण लौटाता है।
- सीमाएँ। getDMLRows () डीएमएल स्टेटमेंट द्वारा लौटाई गई पंक्तियों की कुल संख्या लौटाता है।
- सीमाएं.getCpuTime () मिलीसेकंड में वर्तमान लेनदेन के लिए सीपीयू द्वारा उपयोग किया गया समय लौटाता है।
उपयोग उदाहरण:
चलिए एक SOQL क्वेरी लिखते हैं जो 'वर्कऑर्डर' ऑब्जेक्ट से दो रिकॉर्ड लौटाती है। उसके बाद, 'डिलीट' डीएमएल का उपयोग करके इन दो रिकॉर्ड को हटा दें।
System.debug ('डीएमएल स्टेटमेंट्स:'+Limits.getDMLStatements());System.debug ('पंक्तियाँ:' + सीमाएँ। getDmlRows ());
System.debug ('CPU समय' + Limits.getCpuTime ());
// SOQL क्वेरी वर्कऑर्डर ऑब्जेक्ट से 2 पंक्तियों का चयन करने के लिए
सूची <वर्कऑर्डर> खाते = [वर्कऑर्डर लिमिट 2 से आईडी चुनें];
// दो पंक्तियों को हटाने के लिए डीएमएल हटाएं का उपयोग करें
खाते हटाएं;
System.debug ('** SOQL के बाद: **');
System.debug ('डीएमएल स्टेटमेंट्स:'+Limits.getDMLStatements());
System.debug ('पंक्तियाँ:' + सीमाएँ। getDmlRows ());
System.debug ('CPU समय' + Limits.getCpuTime ());
आउटपुट:
दिए गए उदाहरण में, कोई DML स्टेटमेंट और 0 पंक्तियाँ नहीं हैं। मौजूदा CPU समय 1 मिलीसेकंड है। SOQL क्वेरी से 2 पंक्तियों को वापस करने और इन दो पंक्तियों को हटाने के बाद, DML स्टेटमेंट्स की कुल संख्या जो Limits.getDMLStatements() द्वारा लौटाई जाती है, Limits.getDMLRows() द्वारा लौटाई गई कुल पंक्तियों की संख्या 2 है, और CPU इस लेन-देन को निष्पादित करने के लिए आवश्यक समय 51 मिलीसेकंड है।
सर्वोत्तम अभ्यास उदाहरण: 'कभी भी लूप के अंदर डीएमएल का उपयोग न करें'
आइए देखें कि हम राज्यपाल की सीमा प्राप्त किए बिना कोड कैसे चला सकते हैं। हम सबसे पहले 'वर्कऑर्डर' ऑब्जेक्ट से 'प्रोडक्ट' ऑब्जेक्ट (एपीआई - प्रोडक्ट2) पर 'वर्कऑर्डर' ऑब्जेक्ट को 'फॉर' लूप में 'प्रोडक्ट नेम' के अधीन असाइन करके एक रिकॉर्ड बनाते हैं। आइए निम्नलिखित कोड देखें:
उत्पाद2 prod_obj;के लिए (वर्कऑर्डर wo_object : [वर्कऑर्डर से विषय चुनें])
{
prod_obj = नया उत्पाद 2 (नाम = wo_object.Subject);
prod_obj डालें;
}
हम सूची (prod_s) की घोषणा करके और फिर सूची में prod_obj को संग्रहीत करके इसे बेहतर तरीके से कर सकते हैं। हम इस सूची को लूप के बाहर उत्पाद में सम्मिलित कर सकते हैं।
सूची <उत्पाद 2> prod_s = नई सूची <उत्पाद 2> ();उत्पाद2 prod_obj;
के लिए (वर्कऑर्डर wo_object : [वर्कऑर्डर से विषय चुनें])
{
prod_obj = नया उत्पाद 2 (नाम = wo_object.Subject);
prod_s.add (prod_obj);
}
prod_obj डालें;
निष्कर्ष
अब हमने विस्तृत विवरण के साथ सीखा कि सेल्सफोर्स में एपेक्स की सीमाएँ क्या हैं। सिंक्रोनस एपेक्स की तुलना में बेहतर गवर्नर सीमा हासिल करने के लिए एसिंक्रोनस एपेक्स प्रक्रिया के साथ जाना बेहतर है। हमने विभिन्न परिदृश्यों के लिए गवर्नर की सीमाओं के बारे में भी जाना और 'सीमा' वर्ग से सीमा गणना के संबंध में एक नमूना प्रदर्शन दिया। हमने एक डीएमएल स्टेटमेंट चलाकर डीएमएल स्टेटमेंट, पंक्तियों और सीपीयू समय की गिनती भी सत्यापित की। हमने एक सर्वोत्तम अभ्यास उदाहरण पर चर्चा करके इस मार्गदर्शिका को समाप्त किया।