2013-10-17 8 views
7

हम ऑरैकल 10 जी का उपयोग कर रहे हैं और तालिका में से एक को डेटा पूछने/हटाने के लिए बहुत समय लगता है। इस तालिका में लगभग 10 मिलियन रिकॉर्ड हैं।ओरेकल 10 जी में ROW_MOVEMENT को सक्षम/अक्षम करने का क्या प्रभाव है?

हाल ही में हम पता चला कि ROW_MOVEMENT इस मेज पर अक्षम किया गया है, हम निम्नलिखित को समझना चाहते हैं:

  1. अगर ROW_MOVEMENT सक्षम हम क्या प्रदर्शन लाभ मिल सकता है?
  2. क्या ROW_MOVEMENT को सक्षम करने के कोई डाउनसाइड्स हैं?
  3. क्या ट्रिगर की पंक्ति आंदोलन? ओरेकल कैसे तय करता है कि इसे ROWS को स्थानांतरित करने की आवश्यकता है?

किसी भी मदद की अत्यधिक सराहना की जाएगी।

अग्रिम धन्यवाद !!

उत्तर

8

पंक्ति आंदोलन मुख्य रूप से applied to partition tables है। यह पंक्तियों को विभाजन में स्थानांतरित करने की अनुमति देता है।

SQL> CREATE TABLE part_table (ID NUMBER) 
    2 PARTITION BY RANGE (ID) 
    3  (PARTITION p0 VALUES LESS THAN (1), 
    4  PARTITION p1 VALUES LESS THAN (MAXVALUE)); 

Table created 

SQL> INSERT INTO part_table VALUES (0); 

1 row inserted 

SQL> UPDATE part_table SET ID = 2; 

UPDATE part_table SET ID = 2 

ORA-14402: updating partition key column would cause a partition change 

जब आप पंक्ति आंदोलन की अनुमति देते हैं, तो आप एक अद्यतन के साथ पंक्तियों स्थानांतरित कर सकते हैं:

SQL> ALTER TABLE part_table ENABLE ROW MOVEMENT; 

Table altered 

SQL> UPDATE part_table SET ID = 2; 

1 row updated 

यह पंक्ति आंदोलन अक्षम के साथ, जो डिफ़ॉल्ट है, तो आप एक पंक्ति एक अद्यतन के साथ नहीं ले जा सकते सुविधा अधिकांश मामलों में प्रदर्शन को प्रभावित नहीं करती है: पंक्तियों को संग्रहीत किया जाता है और वैसे ही पूछताछ की जाती है कि सुविधा सक्षम है या नहीं। हालांकि, जब पंक्ति आंदोलन सक्षम होता है, उदाहरण के लिए ALTER TABLE SHRINK SPACE के साथ पंक्तियों को भौतिक रूप से स्थानांतरित किया जा सकता है (हटाएं + डालने के समान)। यह बदले में इंडेक्स क्लस्टर कारक को प्रभावित कर सकता है, जो कुछ प्रश्नों के प्रदर्शन को प्रभावित कर सकता है।

पंक्ति आंदोलन डिफ़ॉल्ट रूप से अक्षम है क्योंकि इसका तात्पर्य है कि पंक्ति के rowid बदल सकते हैं, जो ओरेकल में सामान्य व्यवहार नहीं है।

+2

पंक्ति आंदोलन को सक्षम करने से तालिका को कम करने वाली जगह को कम करने में भी सुविधा मिलती है, जो कुछ मामलों में पुनर्निर्माण के बिना किसी तालिका के आकार को कम करने की अनुमति दे सकता है। –

+0

बहुत बहुत धन्यवाद !! तो अगर हम इसे सक्षम करते हैं तो भी प्रश्न एक ही समय ले रहे हैं। मैं कुछ प्रदर्शन सुधार की उम्मीद कर रहा था। –

+0

पंक्ति आंदोलन प्रदर्शन को प्रभावित कर सकता है। इंडेक्स प्रश्नों के लिए बहुत सारे अतिरिक्त I/O संचालन की आवश्यकता हो सकती है। आप इसे यहां भी पढ़ सकते हैं: http://www.dba-oracle.com/t_enable_row_movement.htm –

1

भी देखें निम्न कार्रवाई के लिए http://www.dba-oracle.com/t_callan_oracle_row_movement.htm

पंक्ति आंदोलन आवश्यक है: विभाजन के बीच

  • ले जाएँ पंक्तियाँ (विभाजित टेबल्स)
  • टेबल
  • टेबल्स (सिकोड़ें कॉम्पैक्ट, झरना के फ़्लैश बैक, सामान्य)

आपके प्रश्न का उत्तर: कोई पे यदि आप पंक्ति आंदोलन को सक्षम करते हैं तो सुधार बढ़ता है, लेकिन आप टेबल को कम कर सकते हैं जो पूर्ण तालिका प्रश्नों के लिए आपके प्रदर्शन को बढ़ाएगा।

ASKTOM भी अपने प्रश्न का एक बहुत अच्छा जवाब देता है:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:35203106066718

हटना (जो पंक्ति आंदोलन की आवश्यकता है) के बारे में:

मैं बेंचमार्किंग सुझाव है - एकत्र के बारे में प्रदर्शन मेट्रिक्स ऑपरेशन करने से पहले और बाद में तालिका।आप स्कैन के बाद अधिक कुशलतापूर्वक काम करने की अपेक्षा करेंगे, आप इंडेक्स रेंज स्कैन को अपरिवर्तित या "बेहतर" होने की उम्मीद करेंगे क्योंकि आपके पास प्रति पंक्ति पैक (कम डेटा फैल) के साथ अधिक पंक्तियां हैं। स्टेटस्पेक या उपकरण dbconsole में उपलब्ध कि (समय के साथ अपने प्रश्नों द्वारा किया काम की राशि)

1

पंक्ति आंदोलन का नकारात्मक पहलू यह है कि आकलन के लिए उपयोगी हो सकता है - आप कि ऐसा करने के लिए तलाश कर रहा होगा ROWID एस बदला जा सकता है। तो यदि आपके पास ROWID पर आधारित कोई प्रश्न हैं तो वे गलत परिणाम वापस कर सकते हैं

+0

ज्ञान आधार पर एक और अच्छा बिंदु जोड़ने के लिए धन्यवाद। –

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