2010-12-07 10 views
7

स्पष्ट के अलावा, क्या कोई मल्टीकॉलम विभाजन और उप-विभाजन का उपयोग करने के बीच क्या भिन्न है? और ओएलटीपी परिदृश्य के लिए कौन सा बेहतर है? विवरण के लिए, ओरेकल डेटाबेस प्रशासक गाइड में Managing Partitioned Tables and Indexes देखें।ओरेकल मल्टीकॉलम विभाजन बनाम एक उप-विभाजन का उपयोग कर बनाम

ए (मूक) एकाधिक स्तंभों पर विभाजित तालिका का उदाहरण है:

CREATE TABLE demo1 
(
    year   NUMBER, 
    month   NUMBER, 
    day   NUMBER, 
    instance  NUMBER, /* assuming this can only be 1 or 2 */ 
    other1  VARCHAR2(50), 
    other2  VARCHAR2(50), 
    other3  VARCHAR2(50) 
) 
PARTITION BY RANGE (year,instance) 
(
    PARTITION data_2009_inst1 VALUES less than (2009,2) TABLESPACE data_2009, 
    PARTITION data_2009_inst2 VALUES less than (2009,3) TABLESPACE data_2009, 
    PARTITION data_2010_inst1 VALUES less than (2010,2) TABLESPACE data_2010, 
    PARTITION data_2010_inst2 VALUES less than (2010,3) TABLESPACE data_2010, 
    PARTITION data_2011_inst1 VALUES less than (2011,2) TABLESPACE data_2011, 
    PARTITION data_2011_inst2 VALUES less than (2011,3) TABLESPACE data_2011 
); 

इसी तरह, एक subpartitioned तालिका के उदाहरण है:

CREATE TABLE demo2 
(
    year   NUMBER, 
    month   NUMBER, 
    day   NUMBER, 
    instance  NUMBER, /* assuming this can only be 1 or 2 */ 
    other1  VARCHAR2(50), 
    other2  VARCHAR2(50), 
    other3  VARCHAR2(50) 
) 
PARTITION BY RANGE (year) 
SUBPARTITION BY LIST (instance) /* Cannot subpartition by range in 10gR2 */ 
    SUBPARTITION template 
    (
     SUBPARTITION i1 VALUES (1), 
     SUBPARTITION i2 VALUES (2), 
     SUBPARTITION ix VALUES (DEFAULT) 
    ) 
(
    PARTITION data_2009 VALUES less than (2010) TABLESPACE data_2009, 
    PARTITION data_2010 VALUES less than (2011) TABLESPACE data_2010, 
    PARTITION data_2011 VALUES less than (2012) TABLESPACE data_2011 
); 

अब इन तालिकाओं के बीच क्या अंतर है? क्या वे समान रूप से "तर्कसंगत" नहीं हैं? मुझे डेमो 2 में विभाजन जोड़ने के लिए यह बहुत आसान है क्योंकि आपको समय बीतने के साथ अधिक विभाजन प्राप्त करने के लिए डेमो 1 पर विभाजन को विभाजित करने की आवश्यकता है। ओएलटीपी परिदृश्य में कौन सा बेहतर है?

एक तरफ ध्यान दें, क्योंकि मैं इंस्टेंस नंबर पर विभाजन कर रहा हूं, ओरेकल आरएसी के साथ करना है। मैं डाटाबेस को धीमा करने से "हॉट ब्लॉक" को रोकने के लिए "इंस्टेंस एफ़िनिटी" बनाने की कोशिश कर रहा हूं क्योंकि इन जरूरतों को आरएसी नोड्स के बीच इंटरकनेक्ट में भेजा जाना चाहिए। (हमने अनुभवपूर्वक साबित किया है कि इससे हमारे परीक्षण में कोई फर्क पड़ता है)।

उत्तर

2

शायद आपके मामले में कोई फर्क नहीं पड़ता है, लेकिन सामान्य उप-विभाजन में आपको रेंज-हैश, रेंज-सूची जैसे 2 अलग-अलग तरीकों से विभाजन करने की अनुमति मिलती है। आपका उप-विभाजन उदाहरण श्रेणी-सूची है, लेकिन एकल-स्तरीय श्रेणी विभाजन के बराबर है। हालांकि, अगर आप एक एकल स्तर का उपयोग नहीं कर सकता है, तो अपने उप-विभाजन इस उदाहरण दस्तावेज़ से आप लिंक की तरह था:

उप विभाजन के
ALTER TABLE quarterly_regional_sales 
    ADD PARTITION q1_2000 VALUES LESS THAN (TO_DATE('1-APR-2000','DD-MON-YYYY')) 
     STORAGE (INITIAL 20K NEXT 20K) TABLESPACE ts3 NOLOGGING 
     (
      SUBPARTITION q1_2000_northwest VALUES ('OR', 'WA'), 
      SUBPARTITION q1_2000_southwest VALUES ('AZ', 'UT', 'NM'), 
      SUBPARTITION q1_2000_northeast VALUES ('NY', 'VM', 'NJ'), 
      SUBPARTITION q1_2000_southeast VALUES ('FL', 'GA'), 
      SUBPARTITION q1_2000_northcentral VALUES ('SD', 'WI'), 
      SUBPARTITION q1_2000_southcentral VALUES ('OK', 'TX') 
     ); 
0

एक लाभ यह है कि वे उप के अलग-अलग सुक्ष्म प्रबंधन की अनुमति है -partitions। उदाहरण के लिए डेटा संग्रह तालिका में कहें कि न केवल तारीख पर आधारित विभिन्न प्रतिधारण आवश्यकताएं हैं, बल्कि एक और मूल्य भी है।

अपने उदाहरण का उपयोग करके शायद आपको 7 साल के लिए डेटा आवृत्ति = 1 के साथ डेटा रखना होगा, लेकिन उदाहरण = 2 के साथ डेटा 4 वर्षों के बाद त्याग दिया जा सकता है। सब-विभाजन आपको अन्य मानों के स्वतंत्र रूप से उदाहरण = 2 के साथ डेटा वाले उप-विभाजन को छोड़ने की अनुमति देगा।

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