Документ создан: 05.10.2010

Советы по вычислению UNDO.

Нашёл здесь полезную мне информацию о том, как можно попробовать подобрать оптимальное значение "undo_retention" и/или размер табличного пространства "undo". С удовольствием делюсь:

UNDO_RETENTION по существующему UNDO-tablespace.

Необходимое оптимальное значение "undo_retention" вычисляется по формуле:

Optimal Undo Retention = Actual Undo Size / (DB_BLOCK_SIZE × UNDO_BLOCK_REP_ESC)

Получить это значение можно выполнив следующий запрос (внимание на "OPTIMAL UNDO RETENTION [Sec]"):

SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]"
     , SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]"
         , ROUND((d.undo_size / (to_number(f.value) * g.undo_block_per_sec))) "OPTIMAL UNDO RETENTION [Sec]"
FROM (SELECT SUM(a.bytes) undo_size
      FROM v$datafile a
             , v$tablespace b
         , dba_tablespaces c
          WHERE c.contents = 'UNDO'
        AND c.status = 'ONLINE'
        AND b.name = c.tablespace_name
        AND a.ts# = b.ts#
     ) d
   , v$parameter e
   , v$parameter f
   , (SELECT MAX(undoblks/((end_time-begin_time)*3600*24)) undo_block_per_sec
      FROM v$undostat
     ) g
WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size'
;

Размер UNDO-tablespace по активности базы.

Необходимый размер UNDO-tablespace вычисляется по формуле:

Undo Size = Optimal Undo Retention × DB_BLOCK_SIZE × UNDO_BLOCK_REP_ESC

Получить его можно запросом (внимание на "NEEDED UNDO SIZE [MByte]"):

SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]"
     , SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]"
     , (TO_NUMBER(e.value) * TO_NUMBER(f.value) * g.undo_block_per_sec) / (1024*1024) "NEEDED UNDO SIZE [MByte]"
FROM (SELECT SUM(a.bytes) undo_size
      FROM v$datafile a
         , v$tablespace b
         , dba_tablespaces c
      WHERE c.contents = 'UNDO'
        AND c.status = 'ONLINE'
        AND b.name = c.tablespace_name
        AND a.ts# = b.ts#
     ) d
   , v$parameter e
   , v$parameter f
   , (SELECT MAX(undoblks/((end_time-begin_time)*3600*24)) undo_block_per_sec
      FROM v$undostat
     ) g
WHERE e.name = 'undo_retention'
  AND f.name = 'db_block_size'
;
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate