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

Откуда:
Сообщений: 948
как можно объяснить подобное? может я что-то не понимаю.. OLTP-компрессия по сути не работает

SQL> DROP TABLE compress_test_none PURGE;

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

SQL> DROP TABLE compress_test_basic PURGE;

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

SQL> DROP TABLE compress_test_oltp PURGE;

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

SQL> CREATE TABLE compress_test_none (x VARCHAR2(4000));

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

SQL> CREATE TABLE compress_test_basic (x VARCHAR2(4000)) COMPRESS;

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

SQL> CREATE TABLE compress_test_oltp (x VARCHAR2(4000)) COMPRESS FOR OLTP;

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

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    v_start NUMBER;
  3    v_end NUMBER;
  4    v_size NUMBER;
  5  BEGIN
  6    SELECT VALUE INTO v_start FROM v$sysstat WHERE NAME = 'redo size';
  7    INSERT INTO compress_test_none (x) SELECT LPAD(MOD(ROWNUM, 10), 4000, ' ') FROM dual CONNECT BY LEVEL < 10001;
  8    SELECT VALUE INTO v_end FROM v$sysstat WHERE NAME = 'redo size';
  9    SELECT bytes / 1024 / 1024 INTO v_size FROM user_segments WHERE segment_name = 'COMPRESS_TEST_NONE';
 10    dbms_output.put_line('NONE:  редо вырос на ' || (v_end - v_start) || ', размер таблички ' || v_size || 'M');
 11  
 12    SELECT VALUE INTO v_start FROM v$sysstat WHERE NAME = 'redo size';
 13    INSERT /*+ APPEND */ INTO compress_test_basic (x) SELECT LPAD(MOD(ROWNUM, 10), 4000, ' ') FROM dual CONNECT BY LEVEL < 10001;
 14    SELECT VALUE INTO v_end FROM v$sysstat WHERE NAME = 'redo size';
 15    SELECT bytes / 1024 / 1024 INTO v_size FROM user_segments WHERE segment_name = 'COMPRESS_TEST_BASIC';
 16    dbms_output.put_line('BASIC: редо вырос на ' || (v_end - v_start) || ', размер таблички ' || v_size || 'M');
 17  
 18    SELECT VALUE INTO v_start FROM v$sysstat WHERE NAME = 'redo size';
 19    INSERT INTO compress_test_oltp (x) SELECT LPAD(MOD(ROWNUM, 10), 4000, ' ') FROM dual CONNECT BY LEVEL < 10001;
 20    SELECT VALUE INTO v_end FROM v$sysstat WHERE NAME = 'redo size';
 21    SELECT bytes / 1024 / 1024 INTO v_size FROM user_segments WHERE segment_name = 'COMPRESS_TEST_OLTP';
 22    dbms_output.put_line('OLTP:  редо вырос на ' || (v_end - v_start) || ', размер таблички ' || v_size || 'M');
 23  END;
 24  /
NONE:  редо вырос на 45160964, размер таблички 80M                              
BASIC: редо вырос на 41688692, размер таблички 40M                              
OLTP:  редо вырос на 95212424, размер таблички 80M                              

Процедура PL/SQL успешно завершена.

SQL> EXIT


где можно доступно почитать, в различие компрессии basic и oltp?
3 фев 12, 15:04    [12027234]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
А где /*+ APPEND */ во втором случае ?
3 фев 12, 15:10    [12027332]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
bdsm_sql
Member

Откуда:
Сообщений: 948
_Nikotin
А где /*+ APPEND */ во втором случае ?

в смысле? append нужен только для basic.. для oltp не требуется

на самом деле для varchar2(40) все становится более реальным

NONE:  редо вырос на 574348, размер таблички ,5625M
BASIC: редо вырос на 138764, размер таблички ,1875M
OLTP:  редо вырос на 1699600, размер таблички ,25M


но все равно интересно, почему при OLTP рез-т хуже
3 фев 12, 15:16    [12027412]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
zzveroboy
Member

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

А какая у вас версия?
Может стоит попробовать Compress for all operations?
3 фев 12, 15:39    [12027752]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
bdsm_sql
Member

Откуда:
Сообщений: 948
zzveroboy
bdsm_sql,

А какая у вас версия?
Может стоит попробовать Compress for all operations?

не стоит. начиная с 11.2, это называется FOR OLTP
Compress for all operations оставлено для обратной совместимости
3 фев 12, 17:13    [12028850]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
tim_scn
Member

Откуда: Ukraine
Сообщений: 384
bdsm_sql
zzveroboy
bdsm_sql,

А какая у вас версия?
Может стоит попробовать Compress for all operations?

не стоит. начиная с 11.2, это называется FOR OLTP
Compress for all operations оставлено для обратной совместимости


вы тут бывали ID 1223705.1?
3 фев 12, 18:00    [12029274]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
rrrruuuu
Guest
посмотри какие у них PCTFREE
3 фев 12, 18:02    [12029284]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
bdsm_sql, предлагаю для начала разобраться с понятием "блок", затем с basic compression, повторив тест и добавив order by в тест,
INSERT /*+ APPEND */ INTO compress_test_basic (x) SELECT LPAD(MOD(ROWNUM, 10), 4000, ' ') FROM dual CONNECT BY LEVEL < 10001 order by 1
4 фев 12, 03:17    [12031537]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
Забавная фича:

+
drop table t1  purge;
create table t1 (x varchar2(4000)) compress for oltp;

declare
  rc number;
  c number := dbms_sql.open_cursor;
begin
  dbms_sql.parse(c, 'insert into t1 select lpad(1,40,1) from dual connect by level <= 157', dbms_sql.native);
  rc := dbms_sql.execute(c);
  rc := dbms_sql.execute(c);
  rc := dbms_sql.execute(c);
  dbms_sql.close_cursor(c);
end;
/

select count(*) from t1 group by dbms_rowid.rowid_block_number(rowid);

drop table t1  purge;
create table t1 (x varchar2(4000)) compress for oltp;

declare
  rc number;
  c number;
begin
  for i in 1 .. 3 loop
    c := dbms_sql.open_cursor;
    dbms_sql.parse(c, 'insert into t1 select lpad(1,40,1) from dual connect by level <= 157', dbms_sql.native);
    rc := dbms_sql.execute(c);
    dbms_sql.close_cursor(c);
  end loop;
end;
/

select count(*) from t1 group by dbms_rowid.rowid_block_number(rowid);


SQL> select count(*) from t1 group by dbms_rowid.rowid_block_number(rowid);
 
  COUNT(*)
----------
       471

...

SQL> select count(*) from t1 group by dbms_rowid.rowid_block_number(rowid);
 
  COUNT(*)
----------
       157
       157
       157
4 фев 12, 12:40    [12031988]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
_Nikotin
Забавная фича:
А компрессия тут не при чем. Это ASSM.
4 фев 12, 13:03    [12032018]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
wurdu,

Не-а, проверил в tbs с EXTENT MANAGEMENT LOCAL, то же самое. Да и в данном случае играет роль не сессия и не транзакция, а открыт или закрыт курсор делавший вставку.
4 фев 12, 13:45    [12032138]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
_Nikotin
wurdu,

Не-а, проверил в tbs с EXTENT MANAGEMENT LOCAL, то же самое. Да и в данном случае играет роль не сессия и не транзакция, а открыт или закрыт курсор делавший вставку.
+ 11.2.0.2
SQL> CREATE TABLESPACE t_manual DATAFILE
  '/oracle/oradata/dw/man01.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL;
  2    3    4    5
Tablespace created.

SQL> create table t1 (x varchar2(4000)) compress for oltp tablespace t_manual;

Table created.

SQL> declare
  rc number;
  c number;
  2  begin
  for i in 1 .. 3 loop
    c := dbms_sql.open_cursor;
  3      dbms_sql.parse(c, 'insert into t1 select lpad(1,40,1) from dual connect        by level <= 157', dbms_sql.native);
    rc := dbms_sql.execute(c);
    dbms_sql.close_cursor(c);
  4    end loop;
end;
/
  5    6    7    8    9   10   11   12
PL/SQL procedure successfully completed.

SQL> select count(*) from t1 group by dbms_rowid.rowid_block_number(rowid);

  COUNT(*)
----------
       471

SQL> drop table t1  purge;

Table dropped.

SQL> create table t1 (x varchar2(4000)) compress for oltp tablespace users;

Table created.

SQL> declare
  2    rc number;
  c number;
begin
  for i in 1 .. 3 loop
  3    4    5    6      c := dbms_sql.open_cursor;
    dbms_sql.parse(c, 'insert into t1 select lpad(1,40,1) from dual connect by l       evel <= 157', dbms_sql.native);
    rc := dbms_sql.execute(c);
    dbms_sql.close_cursor(c);
  7    8    9   10    end loop;
end;
/
 11   12
PL/SQL procedure successfully completed.

SQL> select count(*) from t1 group by dbms_rowid.rowid_block_number(rowid);

  COUNT(*)
----------
       157
       157
       157

4 фев 12, 14:07    [12032193]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
wurdu,

И? То же самое.
4 фев 12, 14:25    [12032238]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
_Nikotin
wurdu,

И? То же самое.
Может я чего-то недопонимаю, но я вроде как привел один и тот же тест с ASSM и MSSM с соответственно разными результатами.
4 фев 12, 14:32    [12032255]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
-------------
Guest
_Nikotin
wurdu,

И? То же самое.

tablespace mssm & users
4 фев 12, 14:36    [12032267]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
Увидел, невнимательно смотрел. Странно отформатирован вывод.
4 фев 12, 20:29    [12033495]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Схожая проблема с ASSM и не парсингом приводит к тому, что пустые листовые блоки индекса не попадают в список свободных. Curious Case Of The Ever Increasing Index Quiz (по крайней мере мне так кажется, что я комментарии 11 и написал).
5 фев 12, 01:15    [12034558]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
wurdu,

Да действительно, спасибо за информацию. Нет ли ещё ссылок по теме?
5 фев 12, 22:29    [12037316]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
A.
Guest
wurdu
Схожая проблема с ASSM и не парсингом приводит к тому, что пустые листовые блоки индекса не попадают в список свободных. Curious Case Of The Ever Increasing Index Quiz (по крайней мере мне так кажется, что я комментарии 11 и написал).

не оно?
http://nigelnoble.wordpress.com/2010/07/23/10gr2-11gr2-assm-space-management-bug/
6 фев 12, 01:26    [12037831]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
_Nikotin
wurdu,

Да действительно, спасибо за информацию. Нет ли ещё ссылок по теме?
Lewis вот о том же: ASSM wreck
6 фев 12, 07:19    [12037992]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
Alex_D
Member

Откуда:
Сообщений: 988
wurdu
bdsm_sql, предлагаю для начала разобраться с понятием "блок", затем с basic compression, повторив тест и добавив order by в тест,
INSERT /*+ APPEND */ INTO compress_test_basic (x) SELECT LPAD(MOD(ROWNUM, 10), 4000, ' ') FROM dual CONNECT BY LEVEL < 10001 order by 1
Ага, и также можно увеличить размер блока.
Понятно, что basic компресия работает на уровне блока.

to ALL
А на каком уровне работает OLTP компресия, так же на уровне блока или на уровне строки в блоке?
Где можно почитать об этом?

И главный вопрос, почему так сурово возрастает REDO при использовании OLTP компрессии?
9 фев 12, 14:22    [12062320]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Alex_D
wurdu
bdsm_sql, предлагаю для начала разобраться с понятием "блок", затем с basic compression, повторив тест и добавив order by в тест,
INSERT /*+ APPEND */ INTO compress_test_basic (x) SELECT LPAD(MOD(ROWNUM, 10), 4000, ' ') FROM dual CONNECT BY LEVEL < 10001 order by 1
Ага, и также можно увеличить размер блока.
Понятно, что basic компресия работает на уровне блока.

to ALL
А на каком уровне работает OLTP компресия, так же на уровне блока или на уровне строки в блоке?
Где можно почитать об этом?

И главный вопрос, почему так сурово возрастает REDO при использовании OLTP компрессии?
Смысл моего поста был в том, что в твоем тесте компрессия вообще не была задействована. OLTP также работает на уровне блока. С теми же migrated rows при update, так что для OLTP она не особо подходит.
9 фев 12, 14:26    [12062368]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
wurdu
Member

Откуда: Владивосток
Сообщений: 4441
Master Note for OLTP Compression
9 фев 12, 14:39    [12062581]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
Alex_D
Member

Откуда:
Сообщений: 988
wurdu
Master Note for OLTP Compression
Спасибо, большое. Note ID 829068.1 - все объяснила. Сам не нашел, так как искал по ключевым словам "COMPRESS FOR OLTP".
9 фев 12, 15:36    [12063275]     Ответить | Цитировать Сообщить модератору
 Re: compress oltp  [new]
Alex_D
Member

Откуда:
Сообщений: 988
wurdu
Смысл моего поста был в том, что в твоем тесте компрессия вообще не была задействована.
Тест не мой, но не суть. А вот почему компрессия вообще не была задействована - Этого не понял. В твоем примере при order by просто будет лучше степень сжатия. А компресия и в том и в другом случае будет работать, так как там и там direct insert.
9 фев 12, 15:48    [12063467]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить