Многораздельное разбиение Oracle по сравнению с использованием подраздела - PullRequest
7 голосов
/ 07 декабря 2010

Помимо очевидного, кто-нибудь может объяснить, что отличается между многоколоночным разбиением и использованием подраздела?И какой из них лучше для сценария OLTP?Подробнее см. Управление секционированными таблицами и индексами в Руководстве администратора базы данных Oracle.

(тупой) пример таблицы, разбитой на несколько столбцов:

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
);

Аналогично, пример таблицы с разделами:

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
);

В чем разница между этими таблицами?Разве они не "логически" одинаковы?Я знаю, что гораздо проще добавить разделы в demo2, так как вам нужно разделить разделы в demo1, чтобы получить больше разделов с течением времени.Что лучше в сценарии OLTP?

Кстати, причина, по которой я разбиваю по номеру INSTANCE, связана с Oracle RAC.Я пытаюсь создать «привязку экземпляра», чтобы остановить «горячий блок» от замедления базы данных, поскольку они должны быть отправлены через межсоединение между узлами RAC.(Мы эмпирически доказали, что это имеет значение в нашем тестировании).

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

В вашем случае, вероятно, нет никакой разницы, но в целом разбиение на разделы позволяет вам разделить двумя разными способами, такими как range-hash, range-list. Ваш пример подраздела является range-list, но эквивалентен одноуровневому разделению диапазона. Однако вы не могли бы использовать одноуровневый, если ваше подразделение было похоже на этот пример из документа, который вы связали:

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 голосов
/ 15 августа 2012

Одним из преимуществ подразделов является то, что они позволяют осуществлять индивидуальное тонкое управление подразделами.Например, в таблице архива данных предположим, что существуют различные требования к хранению, основанные не только на дате, но и на другом значении.

Используя ваш пример, возможно, вам потребуется хранить данные со значением instance = 1 for 7лет, но данные с экземпляром = 2 могут быть отброшены через 4 года.Подразделение позволит вам отбрасывать подразделы, содержащие данные с instance = 2, независимо от других значений.

...