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

Откуда:
Сообщений: 258
Добрый день, коллеги,
Есть партицированная по дням таблицы t1 (довольно большая, ~300 Гб), таблицу необходимо сжать. При выполнениии
create table user.t2 tablespace TBS
  PARTITION BY RANGE (START_TIME) 
  (  
    PARTITION PART_20111201 VALUES LESS THAN (TO_DATE(' 2011-12-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
      NOLOGGING
      COMPRESS
      TABLESPACE TBS,
    PARTITION PART_20111202 VALUES LESS THAN (TO_DATE(' 2011-12-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
      NOLOGGING
      COMPRESS
      TABLESPACE TBS,
....
     TABLESPACE TBS,
PARTITION PART_20111231 VALUES LESS THAN (TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
      NOLOGGING
      COMPRESS
      TABLESPACE TBS)
  compress as 
          select /*+PARALLEL(sh 6)*/
              *
           from
              user.t1 sh ;

каждая партиция, имея изначальный размер около 9,5Гб сжимается до 6Гб.

Если же сначала создать пустую таблицу, а потом производить insert, партиции сжимаются не более чем на 500Мб.
Почему?
Буду благодрен за любой дельный ответ.
18 фев 12, 11:25    [12114842]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
-2-
Member

Откуда:
Сообщений: 15330
WillIm,

сжатие работает только для direct load. в 11.2 появились опции сжатия для conventional dml.
18 фев 12, 11:58    [12114879]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
-2-
Member

Откуда:
Сообщений: 15330
помимо create table as select можно сжимать еще через alter table move.
18 фев 12, 11:59    [12114881]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Чтобы сжималось, надо вставлять через direct path - insert /*+ append */ select. Также надо учитывать, что компрессия идет на уровне блока, поэтому для достижения дучшей компрессии часто бывает полезно упорядочить данные.
18 фев 12, 11:59    [12114883]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
WillIm
Member

Откуда:
Сообщений: 258
автор
помимо create table as select можно сжимать еще через alter table move.

Таблица, которую нужно "двигать", должна быть постоянна доступна для пользователей, поэтому этот способ не подходит. А возможности 11 версии с удовольствием испытаю через несколько месяцев, когда мигрируем, а пока 10g. Спасибо за советы.
wurdu
Чтобы сжималось, надо вставлять через direct path - insert /*+ append */ select. Также надо учитывать, что компрессия идет на уровне блока, поэтому для достижения дучшей компрессии часто бывает полезно упорядочить данные.

Скажите, каким образом в моем случае я могу упорядочить данные? У меня:
тбс1 - в ней хранится t1, которая должны быть постоянно доступна
тбс2 - размером, как раз необходиммым для уже сжатой t1
В моем случае я создаю копию, потом удаляю t1 и переименовываю сжатую t2 в t1, тем самым экономлю место.
18 фев 12, 12:32    [12114946]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
WillIm
wurdu
Чтобы сжималось, надо вставлять через direct path - insert /*+ append */ select. Также надо учитывать, что компрессия идет на уровне блока, поэтому для достижения дучшей компрессии часто бывает полезно упорядочить данные.

Скажите, каким образом в моем случае я могу упорядочить данные? У меня:
тбс1 - в ней хранится t1, которая должны быть постоянно доступна
тбс2 - размером, как раз необходиммым для уже сжатой t1
В моем случае я создаю копию, потом удаляю t1 и переименовываю сжатую t2 в t1, тем самым экономлю место.
insert /*+ append */ select ... order by ...
18 фев 12, 12:37    [12114958]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
-2-
Member

Откуда:
Сообщений: 15330
WillIm
Таблица, которую нужно "двигать", должна быть постоянна доступна для пользователей, поэтому этот способ не подходит
WillIm
В моем случае я создаю копию, потом удаляю t1 и переименовываю сжатую t2 в t1, тем самым экономлю место.
в показаниях путанница.
18 фев 12, 12:41    [12114971]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
WillIm
Member

Откуда:
Сообщений: 258
wurdu
WillIm
пропущено...

Скажите, каким образом в моем случае я могу упорядочить данные? У меня:
тбс1 - в ней хранится t1, которая должны быть постоянно доступна
тбс2 - размером, как раз необходиммым для уже сжатой t1
В моем случае я создаю копию, потом удаляю t1 и переименовываю сжатую t2 в t1, тем самым экономлю место.
insert /*+ append */ select ... order by ...


Спасибо, буду пробовать!

-2-
WillIm
Таблица, которую нужно "двигать", должна быть постоянна доступна для пользователей, поэтому этот способ не подходит
WillIm
В моем случае я создаю копию, потом удаляю t1 и переименовываю сжатую t2 в t1, тем самым экономлю место.
в показаниях путанница.

согласен )
другая последовательность
rename t1 -> rt1
rename t2 -> t1
а потом только удаляю rt1 после проверки, что все прошло нормально
18 фев 12, 13:01    [12115031]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
WillIm
Member

Откуда:
Сообщений: 258
wurdu
Также надо учитывать, что компрессия идет на уровне блока, поэтому для достижения дучшей компрессии часто бывает полезно упорядочить данные.

Все-таки не понял, почему при упорядочивании компрессия лучше. Объясните пожалуйста.
18 фев 12, 13:10    [12115047]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
hoarfrost
Member

Откуда: Волгоград
Сообщений: 438
WillIm
wurdu
Также надо учитывать, что компрессия идет на уровне блока, поэтому для достижения дучшей компрессии часто бывает полезно упорядочить данные.

Все-таки не понял, почему при упорядочивании компрессия лучше. Объясните пожалуйста.

Данные сжимаются на уровне блока, а не сегмента в целом. Чем больше в строках, которые в итоге попадут в блок, одинаковых данных, тем лучше будет сжатие.
18 фев 12, 13:13    [12115056]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
WillIm
wurdu
Также надо учитывать, что компрессия идет на уровне блока, поэтому для достижения дучшей компрессии часто бывает полезно упорядочить данные.

Все-таки не понял, почему при упорядочивании компрессия лучше. Объясните пожалуйста.
Потому что сжимаются повторяющиеся значения на уровне блока. Поэтому имеет смысл сделать чтобы в блоке было сгруппировано больше одинаковых значений.
18 фев 12, 13:16    [12115063]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51780

WillIm
Есть партицированная по дням таблицы t1 (довольно большая, ~300 Гб), таблицу необходимо сжать.

А в чём, собственно, цель сжатия? Какая проблема с этой таблицей?

Posted via ActualForum NNTP Server 1.5

18 фев 12, 14:14    [12115233]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
WillIm
Member

Откуда:
Сообщений: 258
Dimitry Sibiryakov
WillIm
Есть партицированная по дням таблицы t1 (довольно большая, ~300 Гб), таблицу необходимо сжать.

А в чём, собственно, цель сжатия? Какая проблема с этой таблицей?

Размер таблицы 300Гб, а при сжатии 180, экономия дискового пространства почти 40%
18 фев 12, 14:28    [12115274]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
hoarfrost
Member

Откуда: Волгоград
Сообщений: 438
WillIm
Dimitry Sibiryakov
пропущено...

А в чём, собственно, цель сжатия? Какая проблема с этой таблицей?

Размер таблицы 300Гб, а при сжатии 180, экономия дискового пространства почти 40%

А добавление/удаление столбцов делать не планируете?
Если планируете, то лучше учитывать Bug 9163477. Аналогичный есть и для несекционированных таблиц, но он исправлен в 10.2.0.4.3.
18 фев 12, 14:45    [12115326]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51780

WillIm
экономия дискового пространства

А не проще ещё один диск прикупить чем устраивать такие танцы с бубном?..

Posted via ActualForum NNTP Server 1.5

18 фев 12, 15:41    [12115524]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
WillIm
Member

Откуда:
Сообщений: 258
hoarfrost
WillIm
пропущено...

Размер таблицы 300Гб, а при сжатии 180, экономия дискового пространства почти 40%

А добавление/удаление столбцов делать не планируете?
Если планируете, то лучше учитывать Bug 9163477. Аналогичный есть и для несекционированных таблиц, но он исправлен в 10.2.0.4.3.

Тбс где находится данная таблица потом переводится в режим "read only", поэтому все ок.
Dimitry Sibiryakov
А не проще ещё один диск прикупить чем устраивать такие танцы с бубном?..

Так и дисков не напасешься )
Дело в том что это не просто один диск, это массив RAID01 ограниченного размера на ближайший год учитывая подобные "танцы", более того есть standby база, которой тоже треубется отдельный массив, поэтому сжатие в данном случае необходимо.

Вставка при помощи хинта /*append*/, к сожалению не решила ситуацию, размер партиции после вставки в новую таблицу - 9150Мб, исходный размер - 9842. В чем причина? И есть ли еще какие-то решения, которые помогут добиться сжатия при вставке?
19 фев 12, 00:11    [12117047]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
WillIm
Вставка при помощи хинта /*append*/, к сожалению не решила ситуацию
Не /*append*/, а /*+ append*/. Покажи как вставлял.
19 фев 12, 00:50    [12117122]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
wurdu
insert /*+ append */ select ... order by ...
order by для 300 исходных гигабайт?
19 фев 12, 09:55    [12117655]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
scela
Member

Откуда: Москва
Сообщений: 565
Dimitry Sibiryakov,

1. Зависит от базы и что за СХД.
Например - на 70TB базе и на EMC VMAX я думаю, лучше головой подумать, как сжать, а не заниматься поиском места для размещения новой стойки, энергетики и охлаждения.

2. Зависит от конторы - скорость закупки. бывает и до 8 месяцев - так что опять есть повод подумать - делать и компрессию и закупку.
В любом случае экономия места на диске обычно приводит к уменьшению накладных расходов

WillIm
PCTFREE = 0 ?

andreymx
>>order by для 300 исходных гигабайт?
Да. Частями. а в чем проблема?
19 фев 12, 10:41    [12117680]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
scela
andreymx
>>order by для 300 исходных гигабайт?
Да. Частями. а в чем проблема?
в том, что
1. в неё до постоянно пишут
2. даже 1/30 (со 2 дек по 1 янв) - это 20 гб, что уже немало и не каждая система потянет
19 фев 12, 11:07    [12117716]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
andreymx
scela
andreymx
>>order by для 300 исходных гигабайт?
Да. Частями. а в чем проблема?
в том, что
1. в неё до постоянно пишут
2. даже 1/30 (со 2 дек по 1 янв) - это 20 гб, что уже немало и не каждая система потянет
Автор переводит архивные данные в read only и у него партиции по дням. Очевидно, в архивные партиции никто не пишет. Размер одной партиции 10Гб. Если процент сжатия не важен, естественно, можно не упорядочивать. Опять же, не факт что упорядочивание даст существенный выигрыш, поэтому надо тестировать. Упорядочивать можно по-разному, поэтому тоже надо тестировать.
19 фев 12, 11:34    [12117744]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
WillIm
Member

Откуда:
Сообщений: 258
Коллеги, доброго времени суток,
Все-таки добился нужного..
Сжатие заработало после того как я убрал hint распараллеливания (
/*+PARALLEL(sh 4)*/
). Сейчас отлично сжимает, места в тбс осталось на 3 дня, поэтому успешно заканчиваю заливку последних нескольких дней, удаляю исходную таблицу и теперь спокоен, т.к. через 10 дней при переносе следующего месяца в архив, я уже буду знать как быстро это сделать. )
На самом деле не ясно почему так, ведь у меня при
create table as select
с хинтом параллельности все отлично сжимает. Можете знаете?
Кстати, также менял с /*+append*/ на /*+ append*/. Может здесь наличие пробела между "+" и "append" играет роль и поэтому не работало сжатие. Если все же играет, то параллельность не причем. Как раз после того как я добавил пробел и убрал параллельность у меня все заработало, после этого не пробовал по-другому.
20 фев 12, 12:49    [12121638]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
-2-
Member

Откуда:
Сообщений: 15330
WillIm
Может здесь наличие пробела между "+" и "append" играет роль...
На девятке, а может и на десятке, plsql в статических запросах затирал первый символ после + на пробел.
20 фев 12, 13:10    [12121880]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
На восьмерке и только в PL/SQL
21 фев 12, 02:35    [12127125]     Ответить | Цитировать Сообщить модератору
 Re: Сжатие таблицы при create и insert  [new]
pectopatop
Member

Откуда:
Сообщений: 765
hoarfrost
WillIm
Размер таблицы 300Гб, а при сжатии 180, экономия дискового пространства почти 40%

А добавление/удаление столбцов делать не планируете?
Если планируете, то лучше учитывать Bug 9163477. Аналогичный есть и для несекционированных таблиц, но он исправлен в 10.2.0.4.3.

Испугавшись, перечитав несколько раз:
т.е. я правильно понял что сжатие для "живой" таблицы лучше не делать? (version=11.2)
(если таблица возможно потом модифицироваться будет - столбцы добавлятся)
21 фев 12, 15:25    [12131015]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить