ऐसा लगता है कि यह उन क्षेत्रों में से एक है जहां पीएल/एसक्यूएल कार्यक्षमता रिलीज पर विकसित हुई है जब ओरेकल ने विभिन्न अनुकूलन लागू किए हैं।
ध्यान दें इसका मतलब यह भी है कि ओपी में सूचीबद्ध कुछ उत्तर भी विशिष्ट हैं, यहां तक कि उन प्रश्नों/उत्तरों में स्पष्ट रूप से उल्लेख नहीं किया गया है। जब समय बीत जाता है और पुराने Oracle रिलीज़ का उपयोग समाप्त हो जाता है (मुझे दिवास्वप्न?) तो वह जानकारी पुरानी हो जाएगी (इसमें दशकों लग सकते हैं)।
उपरोक्त निष्कर्ष निम्नलिखित उद्धरणके साथ समर्थित है। ए> अध्याय 12 से प्रदर्शन के लिए PL/SQL अनुप्रयोगों को ट्यून करना PL/SQL भाषा संदर्भ 11g R1 . का :
इस समस्या का अब 11g R2में उल्लेख नहीं किया गया है। ए> न ही 12c R1 दस्तावेज़ का संस्करण। यह अध्याय 3 PL/SQL डेटाटाइप के विकास के अनुरूप है।
उत्तर:
11gR2 के बाद से यह मेमोरी उपयोग . से कोई फर्क नहीं पड़ता varchar2(10)
. का उपयोग करने के दृष्टिकोण से या varchar2(32767)
. Oracle PL/SQL कंपाइलर आपके लिए गंदी जानकारी को इष्टतम तरीके से संभाल लेगा!
11gR2 से पहले रिलीज़ के लिए एक कटऑफ-पॉइंट होता है जहाँ विभिन्न मेमोरी प्रबंधन रणनीतियों का उपयोग किया जाता है और यह प्रत्येक रिलीज़ के PL/SQL भाषा संदर्भ में स्पष्ट रूप से प्रलेखित है। ।
उपरोक्त केवल पीएल/एसक्यूएल-केवल चर पर लागू होता है जब कोई प्राकृतिक लंबाई प्रतिबंध नहीं होता है जिसे समस्या डोमेन से प्राप्त किया जा सकता है। अगर कोई varchar2-चर GTIN-14
को दर्शाता है तो किसी को यह घोषित करना चाहिए कि varchar2(14)
।
जब पीएल/एसक्यूएल-वेरिएबल टेबल कॉलम के साथ इंटरफेस करता है तो %type
. का उपयोग करता है -एट्रिब्यूट क्योंकि यह आपको पीएल/एसक्यूएल-कोड और डेटाबेस संरचना को सिंक में रखने का शून्य-प्रयास तरीका है।
स्मृति परीक्षण के परिणाम:
मैं निम्नलिखित परिणामों के साथ Oracle डेटाबेस 11g एंटरप्राइज़ संस्करण रिलीज़ 11.2.0.0 में स्मृति विश्लेषण चलाता हूँ:
str_size iterations UGA PGA
-------- ---------- ----- ------
10 100 65488 0
10 1000 65488 65536
10 10000 65488 655360
32767 100 65488 0
32767 1000 65488 65536
32767 10000 65488 655360
क्योंकि पीजीए परिवर्तन समान हैं और केवल iterations
. पर निर्भर करते हैं और नहीं str_size
मैंने निष्कर्ष निकाला है कि varchar2 घोषित आकार कोई मायने नहीं रखता। हालांकि परीक्षण बहुत भोला हो सकता है - टिप्पणियों का स्वागत है!
परीक्षण स्क्रिप्ट:
-- plsql_memory is a convenience package wrapping sys.v_$mystat s and
-- sys.v_$statname tables written by Steven Feuerstein and available in the
-- code-zip file accompanying his book.
set verify off
define str_size=&1
define iterations=&2
declare
type str_list_t is table of varchar2(&str_size);
begin
plsql_memory.start_analysis;
declare
v_strs str_list_t := str_list_t();
begin
for i in 1 .. &iterations
loop
v_strs.extend;
v_strs(i) := rpad(to_char(i), 10, to_char(i));
end loop;
plsql_memory.show_memory_usage;
end;
end;
/
exit
टेस्ट रन उदाहरण:
$ sqlplus -SL <CONNECT_STR> @memory-test.sql 32767 10000
Change in UGA memory: 65488 (Current = 1927304)
Change in PGA memory: 655360 (Current = 3572704)
PL/SQL procedure successfully completed.
$