Esse artigo faz parte da revista SQL Magazine edição 48. Clique aqui para ler todos os artigos desta edição

AN> 

Uma questão de visão – Parte 2

Explorando outras visões do banco de dados Oracle

 

No artigo anterior, vimos que através de consultas em visões do Oracle é possível obter diversas informações úteis ao gerenciamento como o tempo de execução de uma determinada declaração, os eventos de wait de uma sessão, as sessões que estão consumindo mais recursos, dentre outras. Nesse artigo, vamos abordar outras visões do banco de dados Oracle que auxiliam na administração da carga e no desempenho de banco de dados. As visões  que serão exploradas são: V$SESSION_LONGOPS; V$FILESTAT;  V$SORT_SEGMENT; V$SYSMETRIC; V$SYSTEM_WAIT_CLASS; V$SGA_DYNAMIC_COMPONENTS. Para cada uma das visões iremos mostrar declarações SQL que nos permitem obter as mesmas informações que teríamos  de forma gráfica em outras ferramentas.

 

V$SESSION_LONGOPS

As operações que estiverem sendo executadas a mais de 6 segundos (esse tempo é padrão e não pode ser alterado) têm seu status registrado nessa view. Entre as operações passíveis desse registro, podemos citar: criação de índices, coleta de estatísticas, rotina de backup e recover, execução de consultas, e outras. Algumas observações precisam ser levadas em consideração para que essa view possa ser utilizada com sucesso: Utilizar o otimizador baseado em custo (CBO), que utiliza estatísticas de CPU; Confi gurar o parâmetro TIMED_STATISTICS para true usando o comando alter system set timed_statistics=true Coletar a estatística dos objetos utilizando o comando ANALYZE ou o pacote DBMS_STATS. O foco deste artigo não é demonstrar tal coleta. Existe um capítulo no manual do Oracle que detalha isso.

 

Listagem 1. Obtendo as Sessões que estão executando longas operações.

SELECT t1.SID, t1.serial#, t1.opname, t1.target, t1.sofar, t1.totalwork,

t1.start_time, t1.last_update_time, t2.last_call_et, t1.time_remaining,

t1.elapsed_seconds

   FROM v$session_longops t1, v$session t2

      WHERE t1.SID = t2.SID

      AND t2.status = ‘ACTIVE’

      AND t2.username NOT IN (‘SYS’, ‘SYSTEM’)

   ORDER BY t2.last_call_et DESC;

 

Na Listagem 1 fazemos um Select de forma a obter todas as sessões que estejam sendo executadas há mais de 6 segundos, e selecionamos alguns dos campos desta visão. Na Listagem 1 estamos fazendo uma junção com a V$SESSION (mencionada no artigo anterior), filtrando apenas as sessões “ATIVAS” cujo usuário não seja o próprio Oracle (SYS,SYSTEM). A consulta retorna as respectivas sessões e o tempo estimado para conclusão (em segundos) na coluna TIME_REMAINING. A coluna TOTALWORK indica o valor total de blocos que serão processados. A coluna SOFAR retorna a quantidade referente à TOTALWORK que já foi processada.

 

 

 

Na Listagem 2 podemos verificar essas operações, e com base nas colunas referenciadas acima determinar se o processo está próximo de ser concluído. Na Listagem 2, temos as seguintes colunas:

SID: identificador da sessão; SERIAL#: ajuda a identificar de forma exclusiva uma sessão; OPNAME: descreve a operação que está sendo realizada; TARGET: o objeto que a operação está manipulando; SOFAR: valor já processado do TOTALWORK; TOTALWORK: valor total que será processado; START_TIME: data e hora em que operação foi iniciada; LAST_UPDATE_TIME: data e hora da última atualização; TIME_REMAINING: tempo restante para a conclusão da operação; ELAPSED_SECS: tempo decorrido da operação. Essa visão é muito útil quando se deseja, por exemplo, determinar como está o progresso de um backup feito através do RMAN, como na Listagem 3.

 

Listagem 3. Progresso de um backup feito através do RMAN.

SELECT SID, serial#, TO_CHAR (start_time, ‘dd/mm/yyyy hh:mi:ss’) start_time, sofar, totalwork, ROUND (sofar / totalwork * 100, 2) “% Complete”

   FROM v$session_longops

...

Quer ler esse conteúdo completo? Tenha acesso completo