సేల్స్‌ఫోర్స్ అపెక్స్ - గవర్నర్ పరిమితులు

Sels Phors Apeks Gavarnar Parimitulu



సేల్స్‌ఫోర్స్ ఒక సమయంలో నిర్దిష్ట సంఖ్యలో స్టేట్‌మెంట్‌లు/రికార్డులను ప్రాసెస్ చేయడానికి లేదా అమలు చేయడానికి అనుమతిస్తుంది. అమలు చేయడానికి లేదా ప్రాసెస్ చేయడానికి DML స్టేట్‌మెంట్‌లు, అపెక్స్ క్లాస్‌లు మొదలైన వాటికి కొన్ని పరిమితులు ఉన్నాయి. ఈ పరిమితులను గవర్నర్ పరిమితులు అంటారు. ఈ ట్యుటోరియల్‌లో, గవర్నర్ పరిమితులు ఏమిటి మరియు వాటిని ఎలా నిర్వహించవచ్చో చూద్దాం. అలాగే, సేల్స్‌ఫోర్స్ అపెక్స్ కాల్‌అవుట్‌లు, అపెక్స్ క్లాస్‌లు, మెరుపు వెబ్ భాగాలు, SOSL మరియు SOQL స్టేట్‌మెంట్‌లకు సంబంధించిన పరిమితులను తెలుసుకోవడానికి “లిమిట్” క్లాస్‌ను అందిస్తుంది.

గవర్నర్ పరిమితులు

సేల్స్‌ఫోర్స్ ఆర్గ్‌ని ఉపయోగిస్తున్న ఇద్దరు వ్యక్తులు అలీష్ మరియు సుబాష్ అనే దృష్టాంతాన్ని పరిగణించండి. ఆలిస్ ఒక లావాదేవీలో 1000 DML స్టేట్‌మెంట్‌లను  ప్రాసెస్ చేయాలనుకుంటున్నారు. సమాంతరంగా, సుబాష్ ఒకేసారి 5000 రికార్డులను లోడ్ చేయాలనుకుంటున్నారు. వారు దీన్ని సమాంతరంగా చేస్తే, సేల్స్‌ఫోర్స్ అంగీకరించదు మరియు తీవ్ర ఒత్తిడికి గురవుతుంది. అందువల్ల, గవర్నర్ పరిమితులు చిత్రంలోకి వస్తాయి. ఈ సందర్భంలో, అలీష్ ఒకేసారి 100 DMLని ప్రాసెస్ చేయగలడు మరియు సుబాష్ ఒకేసారి 500 రికార్డ్‌లను ప్రాసెస్ చేయగలడు. వారు AsynchronousBatch Apexని ఉపయోగించి ప్రతి లావాదేవీని ఒక్కొక్క థ్రెడ్‌లో ప్రతిదానికీ అంతరాయం కలిగించకుండా మరియు వారి పనిని పూర్తి చేయవచ్చు.







ప్రాథమికంగా, సేల్స్‌ఫోర్స్‌లోని గవర్నర్ పరిమితులు బహుళ లావాదేవీలలో ప్రాసెసింగ్ మరియు అమలును పరిమితం చేస్తాయి. ప్రతి లావాదేవీకి 'ప్రతి లావాదేవీ అపెక్స్ పరిమితులు' గణనలు మరియు 'పరిమాణం-నిర్దిష్ట అపెక్స్ పరిమితి' కోడ్ పరిమాణంతో డీల్ చేస్తుంది. సేల్స్‌ఫోర్స్ రెండు ప్రక్రియలకు మద్దతు ఇస్తుంది: సింక్రోనస్ మరియు అసమకాలిక ప్రక్రియలు. సమకాలీకరణ ప్రక్రియలో, అపెక్స్ స్క్రిప్ట్ ఒకే ప్రయాణంలో అమలు చేయబడుతుంది, అయితే అసమకాలిక ప్రక్రియలో, అపెక్స్ స్క్రిప్ట్ బహుళ ఉద్యోగాలుగా విభజించడం ద్వారా అమలు చేయబడుతుంది.



అనుమతించబడిన పరిమితులు

విభిన్న దృశ్యాల కోసం పరిమితి గణనను చర్చిద్దాం:



  1. సింక్రోనస్ అపెక్స్‌లో 100 SOQL ప్రశ్నలను మరియు అసమకాలిక అపెక్స్‌లో 200 SOQL ప్రశ్నలను ప్రాసెస్ చేయడం/రన్ చేయడం సాధ్యమవుతుంది.
  2. సింక్రోనస్ మరియు ఎసిన్క్రోనస్ అపెక్స్ రెండింటికీ SOQL ప్రశ్న నుండి 50,000 రికార్డ్‌లు మాత్రమే తిరిగి వస్తాయి.
  3. మేము Database.getQueryLocator()ని ఉపయోగిస్తే, సింక్రోనస్ మరియు ఎసిన్క్రోనస్ అపెక్స్ రెండింటికీ ఒకేసారి 10,000 మాత్రమే తిరిగి ఇవ్వబడతాయి.
  4. రెండు దృశ్యాలలో, జారీ చేయబడిన SOSL ప్రశ్నల సంఖ్య 20.
  5. సింక్రోనస్ అపెక్స్‌ను ప్రాసెస్ చేయడానికి అవసరమైన హీప్ పరిమాణం 6 MB. అసమకాలిక అపెక్స్ కోసం, అవసరమైన హీప్ పరిమాణం రెండింతలు, ఇది 12 MBగా ఉంటుంది.
  6. సింక్రోనస్ అపెక్స్ కోసం అనుమతించబడే గరిష్ట CPU సమయం 10,000 మిల్లీసెకన్లు మరియు అసమకాలిక అపెక్స్ కోసం 60,000 మిల్లీసెకన్లు.
  7. అపెక్స్ రెండింటికీ అమలు చేయడానికి 10 నిమిషాలు మాత్రమే అనుమతించబడుతుంది.
  8. రెండు సందర్భాల్లో, మేము 100 మంది గ్రహీతలతో 10 sendEmail() పద్ధతిని మాత్రమే ఉపయోగించగలము.
  9. అపెక్స్ క్లాస్‌లో లేదా అపెక్స్ ట్రిగ్గర్‌లో ఉన్న అక్షరాలు తప్పనిసరిగా 1 మిలియన్ లోపల ఉండాలి.
  10. బ్యాచ్ అపెక్స్ (అసమకాలిక)లో పరిమాణం 200. 'డేటాబేస్' క్లాస్ యొక్క క్వెరీలోకేటర్() ప్రతి లావాదేవీకి 50 మిలియన్ రికార్డ్‌లను అందిస్తుంది.
  11. కేవలం 5 అపెక్స్ ఉద్యోగాలు మాత్రమే క్యూలో లేదా యాక్టివ్‌గా ఉంటాయి.

LIMIT తరగతి ఉదాహరణ:

అపెక్స్ 'పరిమితి' తరగతిలో గవర్నర్ పరిమితులను పేర్కొనవచ్చు. ఈ తరగతి గవర్నర్ పరిమితులను చెప్పే కొన్ని పద్ధతులను అందిస్తుంది. కొన్ని గవర్నర్ పరిమితులను ప్రదర్శించే క్రింది ఉదాహరణను చూద్దాం:





System.debug('మొత్తం ప్రశ్నల సంఖ్యను ప్రాసెస్ చేయవచ్చు: '+ Limits.getLimitAggregateQueries());

System.debug('వెబ్ సర్వీస్ స్టేట్‌మెంట్‌ల సంఖ్యను ప్రాసెస్ చేయవచ్చు: '+ Limits.getLimitCallouts());

System.debug('రికార్డుల సంఖ్యను ప్రాసెస్ చేయవచ్చు: '+ Limits.getLimitDmlRows());

System.debug('DML స్టేట్‌మెంట్‌ల సంఖ్యను ఇలా పిలవవచ్చు: '+ Limits.getLimitDmlStatements());

System.debug('బైట్‌లలో మెమరీ మొత్తం: '+ Limits.getLimitHeapSize());

System.debug('SOQL ప్రశ్నల సంఖ్యను జారీ చేయవచ్చు: '+ Limits.getLimitQueries());

System.debug('రికార్డుల సంఖ్యను జారీ చేయవచ్చు: '+ Limits.getLimitQueryRows());

System.debug('SOSL ప్రశ్నల సంఖ్య జారీ చేయవచ్చు:  '+ Limits.getLimitSoslQueries());

అవుట్‌పుట్:

“LIMIT” క్లాస్‌లో ఉన్న “డోమ్” పద్ధతులను ఉపయోగించి ఎన్ని DML స్టేట్‌మెంట్‌లు/వరుసలను తిరిగి ఇవ్వవచ్చో తనిఖీ చేయడం కూడా సాధ్యమవుతుంది.



  1. Limits.getDMLStatements() ఒక సందర్భంలో ఉపయోగించిన మొత్తం DML స్టేట్‌మెంట్‌లను అందిస్తుంది.
  2. Limits.getDMLRows() DML స్టేట్‌మెంట్‌ల ద్వారా అందించబడిన మొత్తం వరుసల సంఖ్యను అందిస్తుంది.
  3. Limits.getCpuTime() ప్రస్తుత లావాదేవీ కోసం ఉపయోగించిన CPU సమయాన్ని మిల్లీసెకన్లలో అందిస్తుంది.

వినియోగ ఉదాహరణ:

'Workorder' ఆబ్జెక్ట్ నుండి రెండు రికార్డ్‌లను తిరిగి ఇచ్చే SOQL ప్రశ్నను వ్రాద్దాం. ఆ తర్వాత, 'తొలగించు' DMLని ఉపయోగించి ఈ రెండు రికార్డులను తొలగించండి.

System.debug('DML స్టేట్‌మెంట్‌లు:'+Limits.getDMLStatements());

System.debug('వరుసలు: '+Limits.getDmlRows());

System.debug('CPU సమయం '+Limits.getCpuTime());

// వర్క్‌ఆర్డర్ ఆబ్జెక్ట్ నుండి 2 అడ్డు వరుసలను ఎంచుకోవడానికి SOQL ప్రశ్న

జాబితా ఖాతాలు = [Workorder LIMIT 2 నుండి IDని ఎంచుకోండి];

//రెండు అడ్డు వరుసలను తొలగించడానికి డిలీట్ DMLని ఉపయోగించండి

ఖాతాలను తొలగించండి;

System.debug('**SOQL తర్వాత:**');

System.debug('DML స్టేట్‌మెంట్‌లు:'+Limits.getDMLStatements());

System.debug('వరుసలు: '+Limits.getDmlRows());

System.debug('CPU సమయం '+Limits.getCpuTime());

అవుట్‌పుట్:

ఇచ్చిన ఉదాహరణలో, DML స్టేట్‌మెంట్‌లు మరియు 0 అడ్డు వరుసలు లేవు. ప్రస్తుతం ఉన్న CPU సమయం 1 మిల్లీసెకన్లు. SOQL ప్రశ్న నుండి 2 అడ్డు వరుసలను తిరిగి ఇచ్చిన తర్వాత మరియు ఈ రెండు అడ్డు వరుసలను తొలగించిన తర్వాత, Limits.getDMLStatements() ద్వారా అందించబడిన మొత్తం DML స్టేట్‌మెంట్‌ల సంఖ్య 1, Limits.getDMLRows()  ద్వారా అందించబడిన మొత్తం అడ్డు వరుసలు 2 మరియు CPU ఈ లావాదేవీని అమలు చేయడానికి అవసరమైన సమయం 51 మిల్లీసెకన్లు.

ఉత్తమ అభ్యాస ఉదాహరణ:  “లూప్ లోపల DMLని ఎప్పుడూ ఉపయోగించవద్దు”

గవర్నర్ పరిమితిని పొందకుండా కోడ్‌ను ఎలా అమలు చేయవచ్చో చూద్దాం. 'ఫర్' లూప్‌లోనే 'ఉత్పత్తి పేరు'కి లోబడి 'వర్క్‌ఆర్డర్'ని కేటాయించడం ద్వారా  'వర్క్‌ఆర్డర్' ఆబ్జెక్ట్ నుండి మేము ముందుగా 'ప్రొడక్ట్' ఆబ్జెక్ట్ (API – Product2)పై రికార్డ్‌ను క్రియేట్ చేస్తాము. కింది కోడ్‌ని చూద్దాం:

ఉత్పత్తి2 prod_obj;

కోసం (Workorder wo_object : [వర్క్‌ఆర్డర్ నుండి సబ్జెక్ట్ ఎంచుకోండి])

{

prod_obj = కొత్త ఉత్పత్తి2(పేరు = wo_object.Subject);

prod_obj చొప్పించు;

}

మేము జాబితాను (prod_s) ప్రకటించి, ఆపై జాబితాలో prod_objని నిల్వ చేయడం ద్వారా దీన్ని మెరుగైన మార్గంలో చేయవచ్చు. మేము ఈ జాబితాను లూప్ వెలుపల ఉత్పత్తిలో చేర్చవచ్చు.

జాబితా prod_s = కొత్త జాబితా();

ఉత్పత్తి2 prod_obj;

కోసం (Workorder wo_object : [వర్క్‌ఆర్డర్ నుండి సబ్జెక్ట్ ఎంచుకోండి])

{

prod_obj = కొత్త ఉత్పత్తి2(పేరు = wo_object.Subject);

prod_s.add(prod_obj);

}

prod_obj చొప్పించు;

ముగింపు

మేము ఇప్పుడు సేల్స్‌ఫోర్స్‌లో అపెక్స్ పరిమితులు ఏమిటో వివరణాత్మక వివరణతో తెలుసుకున్నాము. సింక్రోనస్ అపెక్స్‌తో పోల్చినప్పుడు మెరుగైన గవర్నర్ పరిమితులను పొందేందుకు అసమకాలిక అపెక్స్ ప్రక్రియతో వెళ్లడం ఉత్తమం. మేము విభిన్న దృశ్యాల కోసం గవర్నర్ పరిమితుల గురించి కూడా తెలుసుకున్నాము మరియు “పరిమితి” తరగతి నుండి పరిమితి గణనకు సంబంధించి నమూనా ప్రదర్శనను అందించాము. మేము ఒక DML స్టేట్‌మెంట్‌ను అమలు చేయడం ద్వారా DML స్టేట్‌మెంట్‌లు, అడ్డు వరుసలు మరియు CPU సమయాన్ని కూడా ధృవీకరించాము. మేము ఒక ఉత్తమ అభ్యాస ఉదాహరణను చర్చించడం ద్వారా ఈ గైడ్‌ను ముగించాము.