Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Advanced compression после update / 6 сообщений из 6, страница 1 из 1
13.03.2020, 14:09
    #39937097
brzl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Advanced compression после update
Таблица с 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
13.03.2020, 15:13
    #39937142
brzl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Advanced compression после update
brzl,

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

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

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

не помню источник, но заполнилось, что:
1. строка сначала вставляется несжатой, при накоплении % несжатых записей в блоке = PCTFREE, блок сжимается
2. При Update строка становится мигрированной и хранится сначала не сжатой, но потом при накоплении PCTFREE % несжатых записей, блок аналогично сжимается
( возможно, в миграции строки причина изначально такого большого объема )
картинкой:
...
Рейтинг: 0 / 0
16.03.2020, 11:12
    #39937757
brzl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Advanced compression после update
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Advanced compression после update / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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