Многоколоночное разбиение Oracle против использования подраздела

Помимо очевидного, Может ли кто-нибудь объяснить, чем отличается разбиение на несколько столбцов от использования подразделов? И какой из них лучше для сценария 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. (Мы эмпирически доказали, что это действительно имеет значение в нашем тестировании).

8
задан VinceJS 7 December 2010 в 15:47
поделиться