2008-09-27 23 views
7

मैं पीएल/एसक्यूएल में एक डेटा रूपांतरण लिख रहा हूं जो डेटा को संसाधित करता है और इसे एक तालिका में लोड करता है। पीएल/एसक्यूएल प्रोफाइलर के अनुसार, रूपांतरण के सबसे धीमे हिस्सों में से एक लक्ष्य तालिका में वास्तविक डालने है। तालिका में एक ही इंडेक्स है।ओरेकल तालिका में डेटा डालने का सबसे तेज़ तरीका क्या है?

लोड के लिए डेटा तैयार करने के लिए, मैं एक चर तालिका के rowtype का उपयोग कर पॉप्युलेट, तो इस तरह की मेज में डालें:

insert into mytable values r_myRow;

ऐसा लगता है कि मैं हासिल कर सकता निम्न कार्य करके प्रदर्शन:

  • बारी डालने के दौरान बंद प्रवेश करने
  • एक बार में कई रिकॉर्ड डालें

क्या ये विधियां सलाह दी जाती हैं? यदि हां, तो वाक्यविन्यास क्या है?

उत्तर

14

यह निम्न आलेख में सुधार प्रदर्शन के लिए विभिन्न तकनीकों का एक बहुत का संदर्भ पीएल/एसक्यूएल टेबल का उपयोग करके, एक समय में कुछ सौ पंक्तियों को सम्मिलित करने के लिए बेहतर है और सम्मिलित कथन में बाध्य करने के लिए आगे बढ़ें। इस पर विवरण के लिए here देखें।

यह भी सावधान रहें कि आप पीएल/एसक्यूएल टेबल कैसे बनाते हैं। यदि संभव हो, तो पीएल/एसक्यूएल में पंक्ति-दर-पंक्ति संचालन करने के रूप में एसक्यूएल से धीमा हो जाएगा, "टी 1 चयन में इंसर्ट करें ..." का उपयोग करके सीधे अपने सभी ट्रांसफॉर्म को एसक्यूएल में करना पसंद करते हैं।

किसी भी मामले में, आप INSERT /*+APPEND*/ का उपयोग कर प्रत्यक्ष-पथ आवेषण का भी उपयोग कर सकते हैं, जो मूल रूप से डीबी कैश को छोड़ देता है और सीधे डेटा फ़ाइलों को नए ब्लॉक आवंटित करता है और लिखता है। यह लॉगिंग की मात्रा को भी कम कर सकता है, इस पर निर्भर करता है कि आप इसका उपयोग कैसे करते हैं। इसमें कुछ प्रभाव भी हैं, इसलिए कृपया पहले fine manual पढ़ें।

अंत में, यदि आप तालिका को छोटा कर रहे हैं और पुनर्निर्माण कर रहे हैं तो पहले ड्रॉप (या अनुपयोगी चिह्नित करें) और बाद में इंडेक्स पुनर्निर्माण के लिए उपयुक्त हो सकता है।

0

सूचकांक ड्रॉप करें, फिर पंक्तियां डालें, फिर अनुक्रमणिका को फिर से बनाएं।

+0

के बारे में अधिक सीख सकते हैं के बाद -

थोक

उपयोग प्रतिबन्ध डालें पद्धति यद्यपि सूचकांक होने के प्रभाव को कम कर देगी। –

0

चेक इस लिंक http://www.dba-oracle.com/t_optimize_insert_sql_performance.htm

  1. मुख्य बिंदु अपने मामले के लिए विचार करने के लिए संलग्न संकेत का उपयोग करने के रूप में इस सीधे freelist उपयोग करने के बजाय टेबल में संलग्न कर देगा है। आप लॉगिंग बंद करने के लिए की तुलना में उपयोग nologging संकेत के साथ संलग्न यह
  2. उपयोग PL/SQL में पुनरावृत्ति के एक थोक डालने करने के लिए बजाय बजाय खर्च कर सकते हैं, तो
  3. उपयोग करता है, तो आप डेटा हो रही है तालिका में सीधे डेटा लोड करने के sqlloaded फ़ाइल फीड
2

नियमित सम्मिलित विवरण तालिका में डेटा प्राप्त करने का सबसे धीमा तरीका है और थोक आवेषण के लिए नहीं है। http://www.dba-oracle.com/oracle_tips_data_load.htm

+0

वह लिंक भयानक सलाह से भरा है। –

1

सूचकांक गिर बातें काफी तेजी लाने नहीं है, तो आप Oracle SQL जरूरत * लोडर:

http://www.oracle.com/technology/products/database/utilities/htdocs/sql_loader_overview.html

+0

आप अभी भी कमांड लाइन उपकरण का उपयोग किये बिना एसक्यूएल * लोडर उपयोग के रूप में लोड को अनुकूलित करने के लिए एक ही तंत्र का उपयोग कर सकते हैं। –

0

शायद आपके सबसे अच्छे विकल्प में से एक ओरेकल से जितना संभव हो सके से बचने के लिए है। मैं इसे स्वयं से परेशान कर रहा हूं, लेकिन अक्सर जावा प्रक्रिया ओरेकल की कई उपयोगिताओं को बेहतर प्रदर्शन कर सकती है जो या तो ओसीआई (पढ़ें: एसक्यूएल प्लस) का उपयोग करती हैं या सही होने के लिए अपना अधिक समय ले लेती हैं (पढ़ें: एसक्यूएल * लोडर)।

यह आपको विशिष्ट संकेतों का उपयोग करने से नहीं रोकता है (जैसे/APPEND /)।

हर बार जब मैं उस तरह के समाधान में बदल गया हूं तो मुझे सुखद आश्चर्य हुआ है।

चीयर्स,

रोलो

1

मान लीजिए आप ईद, Ename, साल, काम ले लिया है। तो सबसे पहले एक तालिका बनाने के रूप में:

SQL>create table tablename(eid number, ename varchar2(20),sal number,job char(10)); 

अब डेटा सम्मिलित करें: -

SQL>insert into tablename values(&eid,'&ename',&sal,'&job'); 
0

यहाँ तेजी से डालने पर अपने सुझाव दिए गए हैं।

ट्रिगर - किसी तालिका से जुड़े किसी भी ट्रिगर्स को अक्षम करें। सम्मिलित होने के बाद सक्षम करें।

इंडेक्स - ड्रॉप इंडेक्स और अपने इन्सर्ट पूर्ण होने के बाद इसे फिर से बनाएं।

स्थिर आंकड़े - तालिका और अनुक्रमणिका आंकड़ों का दोबारा विश्लेषण करें।

इंडेक्स डी-फ्रैगमेंटेशन - यदि आवश्यक हो तो सूचकांक पुनर्निर्माण करें कोई लॉगिंग का उपयोग न करें - INSERT APPEND (केवल ओरेकल) का उपयोग करके प्रवेश करें। यह दृष्टिकोण बहुत जोखिम भरा दृष्टिकोण है, इसलिए कोई भी रेडो लॉग उत्पन्न नहीं होता है इसलिए आप रोलबैक नहीं कर सकते - शुरू करने से पहले तालिका का बैकअप लें और लाइव टेबल पर प्रयास न करें। जांचें कि क्या आपके डीबी के पास समान विकल्प है

समांतर सम्मिलित करें: समानांतर सम्मिलन चलाना नौकरी को तेज़ी से प्राप्त करेगा। आवेषण के दौरान ज्यादा नहीं भूमि के ऊपर, लेकिन अभी भी एक अच्छा विचार की जाँच करने, अगर यह अभी भी धीमी है कदम के बाद भी 1

आप एक थोक insetr का उपयोग http://www.dbarepublic.com/2014/04/slow-insert.html

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

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