powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Advanced compression после update
6 сообщений из 6, страница 1 из 1
Advanced compression после update
    #39937097
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица с advanced compression. После update таблицу распирает и не компрессит. В чем выгода? Или нужно heat_map + ILM использовать?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
SQL> set timing on
SQL> 
SQL> drop table bad_compress purge;

Table dropped.

Elapsed: 00:00:00.07
SQL> create table bad_compress
  2  (
  3  	 key_code	     number(18) not null,
  4  	 n		     number(18) not null,
  5  	 n2		     number(18) not null,
  6  	 n3		     number(18) not null,
  7  	 n4		     number(18) not null,
  8  	 d1	       date
  9  )
 10  row store compress advanced;

Table created.

Elapsed: 00:00:00.01
SQL> drop sequence bad_seq;

Sequence dropped.

Elapsed: 00:00:00.01
SQL> create sequence bad_seq start with 1000000000000000 increment by 1;

Sequence created.

Elapsed: 00:00:00.00
SQL> 
SQL> insert /*+ enable_parallel_dml parallel(4)*/ into bad_compress(key_code, n, n2, n3,n4)
  2  select
  3  	 1000000 as key_code,
  4  	 floor(rownum/100000) as n,
  5  	 bad_seq.nextval as n2,
  6  	 floor(rownum/100000) as n3,
  7  	 bad_seq.nextval as n4
  8  from dual
  9  	 connect by level < 1000000;

999999 rows created.

Elapsed: 00:00:09.08
SQL> commit;

Commit complete.

Elapsed: 00:00:00.01
SQL> 
"Table is slim"
SQL> select sum(bytes/1024/1024) from user_segments s where s.segment_name = 'BAD_COMPRESS';

SUM(BYTES/1024/1024)                                                            
--------------------                                                            
                  28

Elapsed: 00:00:00.01
SQL> 
SQL> update /*+ enable_parallel_dml parallel(4)*/  bad_compress
  2  set d1 = sysdate+ dbms_random.value;

999999 rows updated.

Elapsed: 00:00:28.52
SQL> commit;

Commit complete.

Elapsed: 00:00:00.02
SQL> 
"Table gets fat"
SQL> select sum(bytes/1024/1024) from user_segments s where s.segment_name = 'BAD_COMPRESS';

SUM(BYTES/1024/1024)                                                            
--------------------                                                            
                 376

Elapsed: 00:00:00.00
SQL> 
"Table gets slim only after MOVE"
SQL> alter table bad_compress move parallel 4;

Table altered.

Elapsed: 00:00:01.17
SQL> 
SQL> select sum(bytes/1024/1024) from user_segments s where s.segment_name = 'BAD_COMPRESS';

SUM(BYTES/1024/1024)                                                            
--------------------                                                            
             34.0625

Elapsed: 00:00:00.00

...
Рейтинг: 0 / 0
Advanced compression после update
    #39937142
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
brzl,

Судя по следующей статье, апдейты не вызывают компрессию.

Lewis
...
Рейтинг: 0 / 0
Advanced compression после update
    #39937720
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
brzl,

Теперь возник другой вопрос. Почему таблица так сильно распухает от апдейта с компрессией. Такой же сценарий без compression увеличивает таблицу на 20 процентов, а не в 10 раз.
...
Рейтинг: 0 / 0
Advanced compression после update
    #39937722
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brzl
Такой же сценарий без compression увеличивает таблицу на 20 процентов, а не в 10 раз.
Ты с каким объёмом сравниваешь каждый раз?
...
Рейтинг: 0 / 0
Advanced compression после update
    #39937737
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
brzl,

не помню источник, но заполнилось, что:
1. строка сначала вставляется несжатой, при накоплении % несжатых записей в блоке = PCTFREE, блок сжимается
2. При Update строка становится мигрированной и хранится сначала не сжатой, но потом при накоплении PCTFREE % несжатых записей, блок аналогично сжимается
( возможно, в миграции строки причина изначально такого большого объема )
картинкой:
...
Рейтинг: 0 / 0
Advanced compression после update
    #39937757
brzl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic
brzl
Такой же сценарий без compression увеличивает таблицу на 20 процентов, а не в 10 раз.
Ты с каким объёмом сравниваешь каждый раз?


В первом сообщении видно что до update таблица занимала 28 MB, после update - 376 (x14). Хотя заполнился только столбец date. Компрессия ужала до 34.

Если провести тот же тесткейс, но без row store compress advanced. Таблица растет на 11 MB

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
SQL> drop table bad_compress purge;

Table dropped.

SQL> create table bad_compress
  2  (
  3  	 key_code	     number(18) not null,
  4  	 n		     number(18) not null,
  5  	 n2		     number(18) not null,
  6  	 n3		     number(18) not null,
  7  	 n4		     number(18) not null,
  8  	 d1	       date
  9  )
 10  ;

Table created.

SQL> drop sequence bad_seq;

Sequence dropped.

SQL> create sequence bad_seq start with 1000000000000000 increment by 1;

Sequence created.

SQL> 
SQL> insert /*+ enable_parallel_dml parallel(4)*/ into bad_compress(key_code, n, n2, n3,n4)
  2  select
  3  	 1000000 as key_code,
  4  	 floor(rownum/100000) as n,
  5  	 bad_seq.nextval as n2,
  6  	 floor(rownum/100000) as n3,
  7  	 bad_seq.nextval as n4
  8  from dual
  9  	 connect by level < 1000000;

999999 rows created.

SQL> commit;

Commit complete.

SQL> 
SQL> prompt "Table is slim"
"Table is slim"
SQL> select sum(bytes/1024/1024) from user_segments s where s.segment_name = 'BAD_COMPRESS';

SUM(BYTES/1024/1024)                                                            
--------------------                                                            
             37.3125 


SQL> update /*+ enable_parallel_dml parallel(4)*/  bad_compress
  2  set d1 = sysdate+ dbms_random.value;

999999 rows updated.

SQL> commit;

Commit complete.

SQL> select sum(bytes/1024/1024) from user_segments s where s.segment_name = 'BAD_COMPRESS';

SUM(BYTES/1024/1024)                                                            
--------------------                                                            
             48.3125 

SQL> 
SQL> quit

...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Advanced compression после update
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]