Início > Oracle > Calculo do tamanho da Tablespace de UNDO e o parametro UNDO_RETENTION

Calculo do tamanho da Tablespace de UNDO e o parametro UNDO_RETENTION

Segue simples select para verificar as transações correntes do banco de dados e seu segmento de UNDO que está utilizando:

select t.start_time,t.used_ublk,s.username,r.segment_name from v$transaction t,v$session s, dba_rollback_segs r where t.ses_addr=s.saddr and t.xidusn=r.segment_id;

   Segue Calculo da UNDO_RETENTION

O valor UNDO_RETENTION deve ser pelo menos igual ao comprimento das mais longas consulta em execução em um determinada instância do banco de dados.
Isto pode ser determinado por meio de consulta visão V$UNDOSTAT uma vez que o banco de dados foi executado por um tempo, segue query:

select max(maxquerylen) from v$undostat;

Isso precisa ser capturado quando o sistema tem funcionado por um tempo e é plenamente utilizado.

   Segue Calculo do tamanho da Tablespace de UNDO

UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)

(UR) UNDO_RETENTION em segundos
(UPS) Numero do undo data blocks gerado por segundo
(DBS) Sobrecarga varia de acordo com o extend e o tamanho do arquivo (db_block_size)

Você pode obter o resulatado nos arquivo de parametros(pfile e spfile) UNDO_RETENTION(UR) e DB_BLOCK_SIZE(DBS)
O UPS requer uma query para pegar o numero de segmentos de undo gerado por segundo na v$undostat
A query para calcular o total de blocos gerados e dividido pela quantidade de tempo monitorado, segue:

SELECT (SUM(undoblks))/ SUM ((end_time – begin_time) * 86400) FROM v$undostat;

A coluna END_TIME e BEGIN_TIME são colunas do tipo data, o resultado gerará em dias você terá que converter para segundos, você pode multiplucas por 86400 segundos que é o numero de segundos no dia

O resultado da consulta retorna o número de blocos de undo por segundo e este valor precisa ser multiplicado pelo tamanho de um bloco de undo (DB_BLOCK_SIZE).

A query a seguir calcula o número de bytes que é necessário

SQL> SELECT (UR * (UPS * DBS)) + (DBS * 24) AS “Bytes”
FROM (SELECT value AS UR FROM v$parameter WHERE name = ‘undo_retention’),
(SELECT (SUM(undoblks)/SUM(((end_time – begin_time)*86400))) AS UPS FROM v$undostat),
(select block_size as DBS from dba_tablespaces where tablespace_name=
(select upper(value) from v$parameter where name = ‘undo_tablespace’));

Espero ter ajudado.

Abraços

Categorias:Oracle
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: