Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 truncate table и undo  [new]
puck futin
Guest
Добрый вереч али день?!

Делаю truncate table <table_name>
по умолчанию сюда добавляется drop storage
получается truncate table <table_name> drop storage

При этом пухнет ТП UNDO
Собственно вопрос - зачем пухнет при этом UNDO, не сильно конечно, но так подпухает малось

Мне приходится делать много truncate-ов и при этом UNDO подпухает нормально.

что пишеться в UNDO ? Как этого избежать ?

подскажите...
23 ноя 07, 17:10    [4956864]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
stranger.
Member

Откуда: ... а откуда не скажу
Сообщений: 236
А почему ты считаешь что undo генерит именно truncate.
23 ноя 07, 17:44    [4957160]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
DВА
Member

Откуда:
Сообщений: 5439
а изменения в словаре?
23 ноя 07, 17:49    [4957190]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3909
puck futin
Добрый вереч али день?!

Делаю truncate table <table_name>
по умолчанию сюда добавляется drop storage
получается truncate table <table_name> drop storage

При этом пухнет ТП UNDO
Собственно вопрос - зачем пухнет при этом UNDO, не сильно конечно, но так подпухает малось

Мне приходится делать много truncate-ов и при этом UNDO подпухает нормально.

что пишеться в UNDO ? Как этого избежать ?

подскажите...

Единственное предположение, что у тебя ТП поддерживаемое словарем и большие сегменты с маленьким размером экстентов...
23 ноя 07, 17:55    [4957229]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
puck futin
Guest
ну как я же вижу, вот тест:
rent@rent> SELECT
  2  D.TABLESPACE_NAME,
  3  D.STATUS,
  4  ROUND((A.BYTES/1024/1024),2) as "Size(M)",
  5  ROUND(((A.BYTES-DECODE(F.BYTES,NULL,0,F.BYTES))/1024/1024),2) as "Used(M)",
  6  ROUND(((A.BYTES/1024/1024)-(A.BYTES-DECODE(F.BYTES,NULL,0,F.BYTES))/1024/1024),2) as "Free(M)",
  7  ROUND((((A.BYTES/1024/1024)-(A.BYTES-DECODE(F.BYTES,NULL,0,F.BYTES))/1024/1024)/(A.BYTES/1024/1024))*100.0,2) as "%Free"
  8      FROM
  9   SYS.DBA_TABLESPACES D,
 10   SYS.SM$TS_AVAIL A,
 11   SYS.SM$TS_FREE F
 12      WHERE
 13   D.TABLESPACE_NAME = A.TABLESPACE_NAME AND
 14   F.TABLESPACE_NAME(+)=D.TABLESPACE_NAME UNION ALL
 15    SELECT  d.tablespace_name,
 16     d.status,
 17     ROUND((a.bytes / 1024 / 1024),2), 
 18     ROUND(NVL(t.bytes, 0)/1024/1024,2),
 19     ROUND((a.bytes / 1024 / 1024) - (NVL(t.bytes, 0)/1024/1024),2),
 20     ROUND(100 - (NVL(t.bytes /a.bytes * 100, 0)),2) 
 21    FROM 
 22     sys.dba_tablespaces d,
 23     (select
 24      tablespace_name,
 25      sum(bytes) bytes 
 26      from 
 27      dba_temp_files
 28      group by tablespace_name) a,
 29      (select
 30       tablespace_name,
 31       sum(bytes_cached) bytes
 32       from 
 33       SYS.v_$temp_extent_pool 
 34      group by tablespace_name) t
 35     WHERE d.tablespace_name = a.tablespace_name(+) AND
 36   d.tablespace_name = t.tablespace_name(+) AND 
 37   d.extent_management like 'LOCAL' AND 
 38   d.contents like 'TEMPORARY';

TABLESPACE_NAME  STATUS       Size(M)    Used(M)    Free(M)      %Free
---------------- --------- ---------- ---------- ---------- ----------
DRSYS            ONLINE            10       4.81       5.19      51.88
SYSTEM           ONLINE           320     318.75       1.25        .39
TOOLS            ONLINE            10        .06       9.94      99.38
TS_DATA          ONLINE           200      56.56     143.44      71.72
TS_INDX          ONLINE           400      51.81     348.19      87.05
TS_UNDO          ONLINE           200       6.81     193.19      96.59
USERS            ONLINE            10        .06       9.94      99.38
XDB              ONLINE         21.88      21.88          0          0
TEMP             ONLINE           100          3         97         97

9 rows selected.

Elapsed: 00:00:00.00
rent@rent> 
rent@rent> begin
  2    execute immediate ('truncate table RENT.COST_VALUE');
  3    execute immediate ('truncate table RENT.COST_ZONE');
  4    execute immediate ('truncate table RENT.TARGET_USE');
  5    execute immediate ('truncate table RENT.FARM');
  6    execute immediate ('truncate table RENT.CONTRACT');
  7    execute immediate ('truncate table RENT.CUSTOMER');
  8    execute immediate ('truncate table RENT.PLOT');
  9    execute immediate ('truncate table RENT.CONTRACT_PLOT');
 10    execute immediate ('truncate table RENT.MEMBERS');
 11    execute immediate ('truncate table RENT.MEMBER_FINE_RATE');
 12    execute immediate ('truncate table RENT.MEMBER_VALUE');
 13    execute immediate ('truncate table RENT.PAY');
 14    execute immediate ('truncate table RENT.CALCED_SALDO');
 15    execute immediate ('truncate table RENT.CHARGE');
 16  end;
 17  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:04.01
rent@rent> SELECT
  2  D.TABLESPACE_NAME,
  3  D.STATUS,
  4  ROUND((A.BYTES/1024/1024),2) as "Size(M)",
  5  ROUND(((A.BYTES-DECODE(F.BYTES,NULL,0,F.BYTES))/1024/1024),2) as "Used(M)",
  6  ROUND(((A.BYTES/1024/1024)-(A.BYTES-DECODE(F.BYTES,NULL,0,F.BYTES))/1024/1024),2) as "Free(M)",
  7  ROUND((((A.BYTES/1024/1024)-(A.BYTES-DECODE(F.BYTES,NULL,0,F.BYTES))/1024/1024)/(A.BYTES/1024/1024))*100.0,2) as "%Free"
  8      FROM
  9   SYS.DBA_TABLESPACES D,
 10   SYS.SM$TS_AVAIL A,
 11   SYS.SM$TS_FREE F
 12      WHERE
 13   D.TABLESPACE_NAME = A.TABLESPACE_NAME AND
 14   F.TABLESPACE_NAME(+)=D.TABLESPACE_NAME UNION ALL
 15    SELECT  d.tablespace_name,
 16     d.status,
 17     ROUND((a.bytes / 1024 / 1024),2), 
 18     ROUND(NVL(t.bytes, 0)/1024/1024,2),
 19     ROUND((a.bytes / 1024 / 1024) - (NVL(t.bytes, 0)/1024/1024),2),
 20     ROUND(100 - (NVL(t.bytes /a.bytes * 100, 0)),2) 
 21    FROM 
 22     sys.dba_tablespaces d,
 23     (select
 24      tablespace_name,
 25      sum(bytes) bytes 
 26      from 
 27      dba_temp_files
 28      group by tablespace_name) a,
 29      (select
 30       tablespace_name,
 31       sum(bytes_cached) bytes
 32       from 
 33       SYS.v_$temp_extent_pool 
 34      group by tablespace_name) t
 35     WHERE d.tablespace_name = a.tablespace_name(+) AND
 36   d.tablespace_name = t.tablespace_name(+) AND 
 37   d.extent_management like 'LOCAL' AND 
 38   d.contents like 'TEMPORARY';

TABLESPACE_NAME  STATUS       Size(M)    Used(M)    Free(M)      %Free
---------------- --------- ---------- ---------- ---------- ----------
DRSYS            ONLINE            10       4.81       5.19      51.88
SYSTEM           ONLINE           320     318.75       1.25        .39
TOOLS            ONLINE            10        .06       9.94      99.38
TS_DATA          ONLINE           200      56.56     143.44      71.72
TS_INDX          ONLINE           400      51.81     348.19      87.05
TS_UNDO          ONLINE           200       8.25     191.75      95.88
USERS            ONLINE            10        .06       9.94      99.38
XDB              ONLINE         21.88      21.88          0          0
TEMP             ONLINE           100          3         97         97

9 rows selected.

Elapsed: 00:00:00.00
rent@rent> 
rent@rent> 
было 6.81 стало 8.25
не select же в UNDO пишет
23 ноя 07, 17:56    [4957232]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
puck futin
Guest
rent@rent> select &dba_tablespaces;
old   1: select &dba_tablespaces
new   1: select tablespace_name, initial_extent, next_extent, status, extent_management, allocation_type from dba_tablespaces

TABLESPACE_NAME  INITIAL_EXTENT NEXT_EXTENT STATUS    EXTENT_MAN ALLOCATIO
---------------- -------------- ----------- --------- ---------- ---------
SYSTEM                    65536 <null>      ONLINE    LOCAL      SYSTEM
TEMP                    1048576     1048576 ONLINE    LOCAL      UNIFORM
DRSYS                     65536 <null>      ONLINE    LOCAL      SYSTEM
TOOLS                     65536 <null>      ONLINE    LOCAL      SYSTEM
TS_DATA                   65536 <null>      ONLINE    LOCAL      SYSTEM
TS_INDX                   65536 <null>      ONLINE    LOCAL      SYSTEM
USERS                     65536 <null>      ONLINE    LOCAL      SYSTEM
XDB                       65536 <null>      ONLINE    LOCAL      SYSTEM
TS_UNDO                   65536 <null>      ONLINE    LOCAL      SYSTEM

9 rows selected.

Elapsed: 00:00:00.00
23 ноя 07, 17:59    [4957244]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
stranger.
Member

Откуда: ... а откуда не скажу
Сообщений: 236
а версия оракла то какая?
вообще изменения словаря генерят откат в системный rollback segment в ts system
кстати таблицы управляются локально или по словарю?
если по словарю и число экстентов очень большое это может надолго подвесить систему но не должно влиять на undo
23 ноя 07, 18:01    [4957259]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
puck futin
Guest
  1* select * from dba_segments where tablespace_name = 'TS_UNDO'
rent@rent> /

OWNER    SEGMENT_NAME                   PARTITION_NAME                 SEGMENT_TYPE TABLESPACE_NAME  HEADER_FILE HEADER_BLOCK      BYTES
-------- ------------------------------ ------------------------------ ------------ ---------------- ----------- ------------ ----------
    BLOCKS    EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE  FREELISTS FREELIST_GROUPS RELATIVE_FNO BUFFER_
---------- ---------- -------------- ----------- ----------- ----------- ------------ ---------- --------------- ------------ -------
SYS      _SYSSMU11$                     <null>                         TYPE2 UNDO   TS_UNDO                    9            9     843776
       103         13         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU12$                     <null>                         TYPE2 UNDO   TS_UNDO                    9           25     647168
        79         10         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU13$                     <null>                         TYPE2 UNDO   TS_UNDO                    9           41     712704
        87         11         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU14$                     <null>                         TYPE2 UNDO   TS_UNDO                    9           57    2088960
       255         17         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU15$                     <null>                         TYPE2 UNDO   TS_UNDO                    9           73     843776
       103         13         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU16$                     <null>                         TYPE2 UNDO   TS_UNDO                    9           89     647168
        79         10         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU17$                     <null>                         TYPE2 UNDO   TS_UNDO                    9          105     647168
        79         10         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU18$                     <null>                         TYPE2 UNDO   TS_UNDO                    9          121     647168
        79         10         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU19$                     <null>                         TYPE2 UNDO   TS_UNDO                    9          137     843776
       103         13         131072       65536           2       32765            0          1               1            9 DEFAULT

SYS      _SYSSMU20$                     <null>                         TYPE2 UNDO   TS_UNDO                    9          153     581632
        71          9         131072       65536           2       32765            0          1               1            9 DEFAULT


10 rows selected.

Elapsed: 00:00:00.02
rent@rent> 

сирри за формат
23 ноя 07, 18:03    [4957265]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
puck futin
Guest
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
PL/SQL Release 9.2.0.7.0 - Production
CORE 9.2.0.7.0 Production
TNS for 32-bit Windows: Version 9.2.0.7.0 - Production
NLSRTL Version 9.2.0.7.0 - Production
23 ноя 07, 18:04    [4957269]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
puck futin
Guest
я не думаю, что это изменения словаря, потому что если прогнать мой тест > 1 раза (тоесть пустые таблицы опять транкейтить) то все равно расчет UNDO
23 ноя 07, 18:07    [4957279]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
puck futin
Guest
буду проверять предположение Apex
23 ноя 07, 18:08    [4957284]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
Полугурок
Member [заблокирован]

Откуда: из гурдома
Сообщений: 56
stranger.
вообще изменения словаря генерят откат в системный rollback segment в ts system
Хм... Одно из распространенных заблуждений. Возьму на заметку :)

puck futin
...
Не баисся? ;-)
23 ноя 07, 18:13    [4957304]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
DВА
Member

Откуда:
Сообщений: 5439
stranger.
а версия оракла то какая?
вообще изменения словаря генерят откат в системный rollback segment в ts system
кстати таблицы управляются локально или по словарю?
если по словарю и число экстентов очень большое это может надолго подвесить систему но не должно влиять на undo


In general, the undo for recursive transactions is constrained to use the same rollback segment as the parent transaction. In particular, that applies to recursive transactions for the space management of that rollback segment itself. When other rollback segments are available, the SYSTEM rollback segment is only used for the changes to UNDO$ associated with bringing other rollback segments online, or taking them offline.
23 ноя 07, 18:15    [4957315]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
DВА
Member

Откуда:
Сообщений: 5439
puck futin
я не думаю, что это изменения словаря, потому что если прогнать мой тест > 1 раза (тоесть пустые таблицы опять транкейтить) то все равно расчет UNDO

undo может расти по разным причинам, и только частично из-за транкейта.
Если интересно, смотрите на undo вашей сессии, а не общий прирост. Увидите, что хоть заполнена таблица, хоть пуста, undo все равно будет. Тут недавно топик как раз был, где акцентировали внимание, что фактически truncate эквивалентно пересозданию сегмента, с соответственными изменениями словаря, так что это не только изменение таблиц управления пространством.

SQL>  select saddr from v$session  v, v$mystat  m   where  m.SID=v.SID and  rownum<2;
  SADDR
  00000000BF3B6C48
SQL> select  max(ktcxbssc) from x$ktcxb where ktcxbses='00000000BF3B6C48' ;
 MAX(KTCXBSSC)
 527771
SQL> select ktcxbssc as scn_tr,  ktcxbubk as used_undo_block, indx  from x$ktcxb where 
  ktcxbses='00000000BF3B6C48' and ktcxbssc>527771 ;
SQL>  truncate table test ;
SQL> select ktcxbssc as scn_tr,  ktcxbubk as used_undo_block, indx  from x$ktcxb where 
  ktcxbses='00000000BF3B6C48' and ktcxbssc>527771 ;


ps кстати запрос на "темпы роста" не выдерживает никакой критики
23 ноя 07, 19:32    [4957624]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
Полугурок
Member [заблокирован]

Откуда: из гурдома
Сообщений: 56
DВА
ps кстати запрос на "темпы роста" не выдерживает никакой критики
Зато ник-то какой :)
23 ноя 07, 20:22    [4957724]     Ответить | Цитировать Сообщить модератору
 Re: truncate table и undo  [new]
puck futin
Guest
DВА
ps кстати запрос на "темпы роста" не выдерживает никакой критики

не спорю, воспользовался тем, что подруку попалось


От модератора.

Интеллигентский бред удален.


Сообщение было отредактировано: 25 ноя 07, 11:20
24 ноя 07, 15:08    [4958662]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить