Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 структура хранения таблиц в нескольких дат файлах  [new]
neiron
Member

Откуда:
Сообщений: 156
Есть table space в нем пока один датафайл около 25 гигов.
Имеет ли смысл разбивать на 3 и более файлов? Не понятно как оракле будет размещать данные, таблица привязана к файлу, или будет добавляться во все по какомоту алгоритму.
Идея в разбрасывании таблиц в три файла соответсвенно нагрузке.
7 апр 09, 17:11    [7034746]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Таблица привязана не к файлу, а к TS. Если в TS несколько файлов, то каждый новый экстент будет выделяться в новом файле по кругу. Кроме того, есть ALTER TABLE, с пом. которого можно вручную выделить экстент в том файле, который явно указан в команде
7 апр 09, 17:22    [7034861]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
neiron
Member

Откуда:
Сообщений: 156
по кругу это как? если можно писать в 3 файла то где будет выделен сегмент? и если ts с extent local managment разве можно самому выделять ?

и глобально как решать проблему роста TS коль макс дат файл сайз 32 гига (9.2 win)
делать файлы по макимуму или резать ?
7 апр 09, 21:02    [7035881]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
Халдурды Амандурдыевич Бердыев
Member

Откуда: Киргизский тракторист
Сообщений: 149
neiron
по кругу это как? если можно писать в 3 файла то где будет выделен сегмент? и если ts с extent local managment разве можно самому выделять ?

и глобально как решать проблему роста TS коль макс дат файл сайз 32 гига (9.2 win)
делать файлы по макимуму или резать ?
Очень много вопросов, ответы на которые можно получить самостоятельно
7 апр 09, 21:12    [7035912]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
neiron
по кругу это как? если можно писать в 3 файла то где будет выделен сегмент? и если ts с extent local managment разве можно самому выделять ?

и глобально как решать проблему роста TS коль макс дат файл сайз 32 гига (9.2 win)
делать файлы по макимуму или резать ?
по кругу - это по кругу...первый екстент в один датафайл(первый созданый для ТП), следующий екстент - во второй...
по поводу алоцирования, а почему нет...
ALTER TABLE ... ALLOCATE EXTENT никто не отменял.
По поводу глобального решения "проблемы",
32 гига - это для размера блока в 8 килобайт. Макс число датафайлов в одно ТП вам за глаза хватит.

ЗЫ: полностью поддерживаю Халдурды Амандурдыевич Бердыев
7 апр 09, 21:41    [7035959]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
neiron
Member

Откуда:
Сообщений: 156
самостоятольно тоже ищу, но в документации инфа поверхностная, по крайней мере в админ рефер.
Подскажите тогда какие доки, или книги почитать, плиз
7 апр 09, 22:47    [7036102]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
neiron
самостоятольно тоже ищу, но в документации инфа поверхностная, по крайней мере в админ рефер.
Подскажите тогда какие доки, или книги почитать, плиз

вам этой "поверхностной" инфы за глаза хватит
8 апр 09, 00:30    [7036272]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
neiron
Member

Откуда:
Сообщений: 156
Allocating Extents in Locally-Managed Tablespaces

In locally-managed tablespaces, Oracle looks for free space to allocate to a new extent by first determining a candidate datafile in the tablespace and then searching the datafile's bitmap for the required number of adjacent free blocks. If that datafile does not have enough adjacent free space, Oracle looks in another datafile.
что-то не хватает инфы, как он определяет ???
8 апр 09, 14:44    [7039323]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
neiron

что-то не хватает инфы, как он определяет ???

если вам чего то не хватает в явном виде, всегда есть поле для экспериментов....
создаете ТП с тремя датафайлами...
SQL> select FILE_NAME, FILE_ID from dba_data_files where TABLESPACE_NAME='TEST';

FILE_NAME                                             FILE_ID
-------------------------------------------------- ----------
+DATA/racgrid/datafile/test.360.683646979                   9
+DATA/racgrid/datafile/test.358.683646997                  10
+DATA/racgrid/datafile/test.318.683647001                  11
создаете табличку в этом ТП
SQL> create table test (x number) tablespace test;
смотрите, где и сколько выделилось...
SQL> select EXTENT_ID, FILE_ID, RELATIVE_FNO, bytes from dba_EXTENTS where SEGMENT_NAME='TEST';

 EXTENT_ID    FILE_ID RELATIVE_FNO      BYTES
---------- ---------- ------------ ----------
         0         11           11      65536

добавляете екстенты табличке....
SQL> alter table test allocate extent;

Table altered.

SQL> alter table test allocate extent;

Table altered.
опять смотрите...
SQL> select EXTENT_ID, FILE_ID, RELATIVE_FNO, bytes from dba_EXTENTS where SEGMENT_NAME='TEST';

 EXTENT_ID    FILE_ID RELATIVE_FNO      BYTES
---------- ---------- ------------ ----------
         0         11           11      65536
         1         11           11      65536
         2         11           11      65536

вроде ниче не понятно, и я ошибся вместе с паном tru55.... идем дальше
SQL> alter table test allocate extent;

Table altered.
...........
...........
..........
SQL> select EXTENT_ID, FILE_ID, RELATIVE_FNO, bytes from dba_EXTENTS where SEGMENT_NAME='TEST';

 EXTENT_ID    FILE_ID RELATIVE_FNO      BYTES
---------- ---------- ------------ ----------
         0         11           11      65536
         1         11           11      65536
         2         11           11      65536
         3         11           11      65536
         4         11           11      65536
         5         11           11      65536
         6         11           11      65536
         7         11           11      65536
         8         11           11      65536
         9         11           11      65536
        10         11           11      65536
        11         11           11      65536
        12         11           11      65536
        13         11           11      65536
        14         11           11      65536
        15         11           11      65536
        16          9            9    1048576
        17         10           10    1048576

делаем еще пару раз для надежности и проверяем
SQL> select EXTENT_ID, FILE_ID, RELATIVE_FNO, bytes from dba_EXTENTS where SEGMENT_NAME='TEST';

 EXTENT_ID    FILE_ID RELATIVE_FNO      BYTES
---------- ---------- ------------ ----------
         0         11           11      65536
         1         11           11      65536
         2         11           11      65536
         3         11           11      65536
         4         11           11      65536
         5         11           11      65536
         6         11           11      65536
         7         11           11      65536
         8         11           11      65536
         9         11           11      65536
        10         11           11      65536
        11         11           11      65536
        12         11           11      65536
        13         11           11      65536
        14         11           11      65536
        15         11           11      65536
        16          9            9    1048576
        17         10           10    1048576
        18         11           11    1048576
        19          9            9    1048576

20 rows selected.
потом смотрим, что у нас в данном тп с методом алоцирования
SQL> select ALLOCATION_TYPE from DBA_TABLESPACES where TABLESPACE_NAME='TEST';

ALLOCATIO
---------
SYSTEM
из чего делаем выводы, что первые 16 екстентов на читом ТП выделяеются в одном датафайле и их размер 64кб, все же остальные начинают выделятся циклически, начиная с первого датафайла, созданного в ТП....

ЗЫ..для остальных, думаю, вам не составит труда проверить самому...
8 апр 09, 15:18    [7039674]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
neiron
Member

Откуда:
Сообщений: 156
Снимаю шляпу, теперь понятно как выделяет. Благодарю.
Еще хотел из опыта спросить, то что идет такое выделение(в разных файлах) это хорошо для производительности ? исходя из фрагментации(неравномерного выделения extent-ов) для таблиц
9 апр 09, 13:14    [7044237]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
neiron

Еще хотел из опыта спросить, то что идет такое выделение(в разных файлах) это хорошо для производительности ? исходя из фрагментации(неравномерного выделения extent-ов) для таблиц


Дык это и сделано для повышения производительности :)
Особенно, если идет full scan по таблице, а файлы на разных дисках
9 апр 09, 13:40    [7044454]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
Халдурды Амандурдыевич Бердыев
Member

Откуда: Киргизский тракторист
Сообщений: 149
pravednik
из чего делаем выводы, что первые 16 екстентов на читом ТП выделяеются в одном датафайле и их размер 64кб, все же остальные начинают выделятся циклически, начиная с первого датафайла, созданного в ТП....
Сомнительные выводы :)



SQL> create tablespace t1 datafile 'd:\t1.dbf' size 16m, 'd:\t2.dbf' size 16m, 'd:\t3.dbf' size 16m
  2  uniform size 16k;

Tablespace created.

SQL> create table t1(n number) tablespace t1;

Table created.

SQL> alter table t1 allocate extent;

Table altered.

SQL> alter table t1 allocate extent;

Table altered.

SQL> alter table t1 allocate extent;

Table altered.

SQL> select extent_id,file_id from dba_extents where tablespace_name='T1' order by 1;

 EXTENT_ID    FILE_ID
---------- ----------
         0         10
         1         11
         2          9
         3         10

SQL> drop tablespace t1 including contents and datafiles;

Tablespace dropped.

SQL> create tablespace t1 datafile 'd:\t1.dbf' size 16m, 'd:\t2.dbf' size 16m, 'd:\t3.dbf' size 16m
  2  autoallocate;

Tablespace created.

SQL> create table t1(n number) tablespace t1;

Table created.

SQL> alter table t1 allocate extent;

Table altered.

SQL> alter table t1 allocate extent;

Table altered.

SQL> alter table t1 allocate extent;

Table altered.

SQL> select extent_id,file_id from dba_extents where tablespace_name='T1' order by 1;

 EXTENT_ID    FILE_ID
---------- ----------
         0         10
         1         10
         2         10
         3         10

SQL> drop tablespace t1 including contents and datafiles;

Tablespace dropped.

SQL> create tablespace t1 datafile 'd:\t1.dbf' size 16m, 'd:\t2.dbf' size 16m, 'd:\t3.dbf' size 16m
  2  autoallocate;

Tablespace created.

SQL> create table t1(n number) tablespace t1 storage(initial 16m);

Table created.

SQL> alter table t1 allocate extent;

Table altered.

SQL> alter table t1 allocate extent;

Table altered.

SQL> alter table t1 allocate extent;

Table altered.

SQL> select extent_id,file_id from dba_extents where tablespace_name='T1' order by 1;

 EXTENT_ID    FILE_ID
---------- ----------
         0         10
         1         11
         2          9
         3         10
         4         11
         5          9
         6         10
         7         11
         8          9
         9         10
        10         11

 EXTENT_ID    FILE_ID
---------- ----------
        11          9
        12         10
        13         11
        14          9
        15         10
        16         11
        17          9
        18         10

19 rows selected.

pravednik
думаю, вам не составит труда проверить самому...
Вот это - правильный вывод
9 апр 09, 13:48    [7044524]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
neiron
Member

Откуда:
Сообщений: 156
всем спасибо за помощь.
9 апр 09, 13:57    [7044603]     Ответить | Цитировать Сообщить модератору
 Re: структура хранения таблиц в нескольких дат файлах  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
Халдурды Амандурдыевич Бердыев
pravednik
из чего делаем выводы, что первые 16 екстентов на читом ТП выделяеются в одном датафайле и их размер 64кб, все же остальные начинают выделятся циклически, начиная с первого датафайла, созданного в ТП....
Сомнительные выводы :)

)))...нет предела совершенству...да и делались они для конкретного случая " на чистом ТП выделяеются"
у вас, правда, не ахти как прозрачно....)))
SQL> create tablespace t1 datafile 'd:\t1.dbf' size 16m, 'd:\t2.dbf' size 16m, 'd:\t3.dbf' size 16m
  2  uniform size 16k;
вы тут ниче не потеряли??...или у вас систем <=3-х килобайтно блочный ;))))
SQL> create tablespace t1 datafile 'd:\t1.dbf' size 16m, 'd:\t2.dbf' size 16m, 'd:\t3.dbf' size 16m
  2  autoallocate;
вроде это как раз то, что я и показывал....

ЗЫ: спасибо за примеры
9 апр 09, 14:58    [7045106]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить