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

Откуда: Минск
Сообщений: 744
Всем Привет, давно не виделись. :)

Не то что бы проблема, просто интерестно теоретическое объяснение происходящего:

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production

SQL> Create Table Zvv1(Col Varchar2(30), Id Number)
2 /

Table created.

SQL> Insert Into Zvv1
2 Select lpad ( 'A', 30, 'A' ), rownum
3 From All_objects, All_objects
4 Where rownum <= 1000000
5 /

1000000 rows created.

SQL> Select Count ( * )
2 From User_extents
3 Where Segment_name = 'ZVV1'
4 /

COUNT(*)
----------
60

SQL> Alter Table Zvv1 Move
2 /

Table altered.

SQL> Select Count ( * )
2 From User_extents
3 Where Segment_name = 'ZVV1'
4 /

COUNT(*)
----------
61

Т.е. после МУВа таблицы, она начинает занимать больше места.
Не понятно почему, вроде как данные те же, параметры хранения тоже.
В чём же причина?

TableSpace:
Extent_Management LOCAL
Allocation_Type SYSTEM
Segment_Space_Management AUTO

Спасибо!
----------------
Zhirenkov Vitaly
21 ноя 08, 17:55    [6473614]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
в 10ке все ок
21 ноя 08, 18:03    [6473646]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ZVV
Member

Откуда: Минск
Сообщений: 744
pravednik, на 10-ке у меня например тоже самое. (Винда и там и там)

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> Create Table Zvv1(Col Varchar2(30), Id Number)
2 /

Table created.

SQL> Insert Into Zvv1
2 Select lpad ( 'A', 30, 'A' ), rownum
3 From All_objects, All_objects
4 Where rownum <= 1000000
5 /

1000000 rows created.

SQL> Select Count ( * )
2 From User_extents
3 Where Segment_name = 'ZVV1'
4 /

COUNT(*)
----------
60

SQL> Alter Table Zvv1 Move
2 /

Table altered.

SQL> Select Count ( * )
2 From User_extents
3 Where Segment_name = 'ZVV1'
4 /

COUNT(*)
----------
61
21 ноя 08, 18:08    [6473675]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
SQL> Create Table Zvv1(Col Varchar2(30), Id Number);

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

Затрач.время: 00:00:04.57
SQL> insert Into Zvv1
  2      Select lpad ( 'A', 30, 'A' ), rownum
  3       From All_objects, All_objects
  4      Where rownum <= 1000000;

1000000 строк создано.

Затрач.время: 00:00:31.50
SQL> Select Count ( * )
  2     From User_extents
  3   Where Segment_name = 'ZVV1';

  COUNT(*)
----------
        60

Затрач.время: 00:00:03.32
SQL> Alter Table Zvv1 Move;

Таблица изменена.

Затрач.время: 00:00:10.78
SQL> Select Count ( * )
  2     From User_extents
  3    Where Segment_name = 'ZVV1';

  COUNT(*)
----------
        60

Затрач.время: 00:00:00.43
SQL> drop table Zvv1;

Таблица удалена.

Затрач.время: 00:00:04.90
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

Затрач.время: 00:00:03.03
SQL>
21 ноя 08, 18:16    [6473712]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ZVV
Member

Откуда: Минск
Сообщений: 744
Ну поварьируйте с кол-вом строк, я думаю и у Вас тоже получится такого добиться при желании.
У меня тоже с ко-вом строк 1010000 получается нормально, 61 и 61. :)
21 ноя 08, 18:24    [6473749]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Пример воспроизводится на 11g. В принципе, если сравнивать родственные операции, Alter Table Zvv1 Move и Insert /*+ append */ Into Zvv1, то кол-во экстентов/блоков будет одинаковым. Тест показывает, что после direct path load кол-во строк в блоке в среднем на одну меньше, чем при conventional, соответственно блоков требуется больше. Дампы блоков показали, что после direct path количество ITL слотов в блоке увеличилось с двух до трех, что собственно и привело к уменьшению строк в блоке. Интересно будет услышать комментарии к такому поведению (навскидку в инете не нашел) :)
23 ноя 08, 09:22    [6476703]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ora_live
Member

Откуда: http://cleanmonday.ru/
Сообщений: 198
ZVV
TableSpace:
Extent_Management LOCAL
Allocation_Type SYSTEM
Segment_Space_Management AUTO


Как вам удалось для табличного пространства SYSTEM сделать Segment_Space_Management AUTO?
23 ноя 08, 11:22    [6476737]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ora_live
Member

Откуда: http://cleanmonday.ru/
Сообщений: 198
Насколько я понимаю, это по-определению невозможно, так как SYSTEM содержит сегменты отката, которые нельзя создавать в табличном пространстве с ASSM (ora-30574)
23 ноя 08, 11:42    [6476755]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
Тынц.
Guest
ora_live,
http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/tspaces.htm#sthref1279
23 ноя 08, 11:46    [6476760]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ora_live
Member

Откуда: http://cleanmonday.ru/
Сообщений: 198
Тынц.
ora_live,
http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/tspaces.htm#sthref1279


Вы путаете способ управления экстентами и способ управления свободным пространством.

Я говорю про способ управления свободным пространством(SSM). Он может быть только MANUAL для SYSTEM.
23 ноя 08, 12:04    [6476779]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 940
ora_live
ZVV
TableSpace:
Extent_Management LOCAL
Allocation_Type SYSTEM
Segment_Space_Management AUTO


Как вам удалось для табличного пространства SYSTEM сделать Segment_Space_Management AUTO?


Это Вы путаете Allocation Type SYSTEM с Tablespace по имени SYSTEM

Best regards

Maxim
23 ноя 08, 12:22    [6476799]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ora_live
Member

Откуда: http://cleanmonday.ru/
Сообщений: 198
Maxim Demenko
ora_live
ZVV
TableSpace:
Extent_Management LOCAL
Allocation_Type SYSTEM
Segment_Space_Management AUTO


Как вам удалось для табличного пространства SYSTEM сделать Segment_Space_Management AUTO?


Это Вы путаете Allocation Type SYSTEM с Tablespace по имени SYSTEM

Best regards

Maxim


А разве данный тип Allocation Type System можно указать вручную при создании табличного пространства? Данный тип используется только для SYSTEM, UNDO-табличных пространств.
23 ноя 08, 12:26    [6476801]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ora_live
Member

Откуда: http://cleanmonday.ru/
Сообщений: 198
Похоже я действительно неправ. При autoallocate он называется system для любых пространств.
23 ноя 08, 12:29    [6476805]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ZVV
Member

Откуда: Минск
Сообщений: 744
ora_live
Похоже я действительно неправ. При autoallocate он называется system для любых пространств.

Именно.
Про TS SYSTEM речь не шла...
23 ноя 08, 12:43    [6476826]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ZVV
Member

Откуда: Минск
Сообщений: 744
wurdu
Пример воспроизводится на 11g. В принципе, если сравнивать родственные операции, Alter Table Zvv1 Move и Insert /*+ append */ Into Zvv1, то кол-во экстентов/блоков будет одинаковым. Тест показывает, что после direct path load кол-во строк в блоке в среднем на одну меньше, чем при conventional, соответственно блоков требуется больше. Дампы блоков показали, что после direct path количество ITL слотов в блоке увеличилось с двух до трех, что собственно и привело к уменьшению строк в блоке. Интересно будет услышать комментарии к такому поведению (навскидку в инете не нашел) :)


Ага, спасибо!
Собственно, я и предполагал нечто подобное и тоже было бы интересно узнать в теории причины происходящего...
23 ноя 08, 12:44    [6476828]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4023
Господа, вы забыли про PCT_FREE.
Так что при MOVE таблицы остается 10 % (по умолчанию) свободного пространства в блоке, так что размер таблицы может и увеличиться, если в старой таблице это пространство было занято.
24 ноя 08, 11:12    [6478745]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Aliona
Господа, вы забыли про PCT_FREE.
Так что при MOVE таблицы остается 10 % (по умолчанию) свободного пространства в блоке, так что размер таблицы может и увеличиться, если в старой таблице это пространство было занято.
От чего же. Просто не понятно, как в примере, предложенном ZVV, "это пространство было занято". Про 10%, я надеюсь, имелся в виду тот же пример, где pctfree не был задан при создании таблицы?
24 ноя 08, 13:58    [6479947]     Ответить | Цитировать Сообщить модератору
 Re: Alter Table ... Move  [new]
ZVV
Member

Откуда: Минск
Сообщений: 744
Aliona
Господа, вы забыли про PCT_FREE.
Так что при MOVE таблицы остается 10 % (по умолчанию) свободного пространства в блоке, так что размер таблицы может и увеличиться, если в старой таблице это пространство было занято.


В общем случае может оно и так, но как это связано с данным примером? :)
24 ноя 08, 15:36    [6480548]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить