RAC DD4D v3 - работа над ошибками

На нашем семинаре RAC DD4D я предложил одну идею для снижения конкуренции за "горячие" блоки.

Идея заключалась в том, чтобы "горячую" таблицу/индекс секционировать по времени (в каждой секции будут лежат данные за определенный период). и далее поместить секцию за текущий период (а как правило конкуренция идет за данные именно незакрытого периода) в табличное пространство с меньшим размером блока (4K или даже 2K).





К сожалению, выяснилось, что эта идея на практике не может быть реализована, потому что в СУБД Oracle Database есть ограничение: все секции таблицы, либо индекса должны лежать в табличных пространствах с одинаковым размером блока:

sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Сб Июн 20 23:15:43 2009

Copyright (c) 1982, 2008, Oracle. All rights reserved.

Присоединен к:

Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> CREATE TABLESPACE hot_data

2 datafile '+GR1/orcl/hot_data01.dbf' size 20M
3 BLOCKSIZE 4K;

Раздел создан.

SQL> create table customers

2 (
3 Id number,
4 Name varchar2(32),
5 Created date
6 )
7 partition by range (Created)
8 (
9 partition before_05_2009 values less than (TO_DATE('01.01.2009','dd.mm.yyyy'))
10 tablespace users,
11 partition current_month values less than (TO_DATE('31.05.2009','dd.mm.yyyy'))
12 tablespace hot_data
13 );

tablespace hot_data
*
ошибка в строке 12:

ORA-14519: Несовместимые размеры блоков табличного пространства для table : У
табличного пространства HOT_DATA размер блока 4096 [partition specification] не
соответствует ранее заданному или подразумеваемому для табличного пространства
USERS размеру блока 8192 [partition specification]

SQL>
Приношу свои извинения и благодарю участников семинара, написавшим мне об этой ошибке и поправивших меня.

Но тем, не менее, вторая наша идея: исскуственно увеличить PCTFREE у секции за текущий период - работает ! И тотже самый эффект мы можем достичь с помощью второго способа:
SQL> create table customers

2 (
3 Id number,
4 Name varchar2(32),
5 Created date
6 )
7 partition by range (Created)
8 (
9 partition before_05_2009 values less than (TO_DATE('01.01.2009','dd.mm.yyyy'))
10 tablespace users,
11 partition current_month values less than (TO_DATE('31.05.2009','dd.mm.yyyy'))
12 tablespace users pctfree 80
13 );

Таблица создана.

SQL>


Комментариев нет:

Отправить комментарий