Estudando a espera (OWI)

Evento de hoje db file sequential read

Olá gente!!! Bom dia! Boa tarde! Boa Noite!!!

Estudando a espera… Sei que alguns que leram o título do post, principalmente quem não leu o post anterior, deve estar pensando que errei e que eu queria dizer “Estudando na espera“. Não! O que eu quis dizer foi exatamente isso mesmo.

Como falamos no post da semana passada, estaremos estudando sobre OWI(para dúvidas ver post anterior). Com isso estaremos estudando alguns eventos que geram esperas, as tradicionais demoras no banco de dados.

Primeiro passo que precisamos é identificar quais eventos de espera estão presentes no nosso banco de dados em determinado momento, quanto tempo ele tem demorado e quantas vezes ele ocorreu.
Para possibilitar esta descoberta, também no post anterior eu coloquei um script que irá mostrar exatamente isto.

Então partimos do princípio que eu acabei de gerar o script no meu ambiente que me trouxe o seguinte resultado:

seq_read1

Vejam que temos a coluna EVENT que traz o nome do evento de espera, a coluna count(*) que traz a quantidade de vezes que este evento está ocorrendo e a última coluna que trará os valores somados em segundos que este evento está causando no banco de dados.
Neste momento eu gostaria apenas de lembrar que esta situação específica do exemplo não seria necessariamente um problema, nem o evento de espera db file sequential read costuma ser. Na verdade o que faz um evento ser, ou se tornar um problema é a frequência com que eles acontecem e o tempo que demoram.

Porém, hoje vamos  comentar a respeito deste evento de espera em específico.
db file sequential read é o evento de espera que ocorre quando uma query precisa recuperar um registro e este não está armazenado na SGA (System Global Area).
Fazendo uma breve explanação a respeito, a SGA é uma área  de memória onde existe um local dentro dela chamado database buffer cache; este “cara” armazena os dados recuperados do disco quando por exemplo é feito uma instrução select. Assim os dados ficam armazenados e podem ser compartilhados por diversas sessões.
Quando alguém solicita um dado e este não está em cache (memória) então precisa ser lido do disco e armazenado em memória para ficar disponível. Nosso evento de espera hoje é o tempo que bloco de dados leva para ser lido do disco.

Este evento pode estar ligado a leitura de dados em índices, dados propriamente ditos, segmentos de undo, e até leitura de controlfile.

São eventos causadores de I/O físico, ou seja, leituras físicas em disco. Algo que o DBA muitas vezes tentará minimizar.Talvez você queira saber qual (ais) sessão(ões) está(ão) com este evento de espera.

Para isso pode-se utilizar o comando abaixo:

SELECT a.inst_id,a.sid, c.pid, c.spid, a.username, b.event, b.wait_time, b.seconds_in_wait, b.p1, b.p2, b.p3
FROM gv$session a, gv$session_wait b, gv$process c
WHERE a.sid = b.sid
AND a.paddr = c.addr
and a.inst_id=c.inst_id
AND b.event = ‘&event’;

Informando o nome do evento de espera na execução.

Caso este evento seja muito frequente, podemos estar diante de um gargalo(lentidão) em disco, storage ou algo do gênero.
Para isso temos um script abaixo que mostra as médias de blocos lidos no ambiente.

select a.file#,b.file_name,a.singleblkrds,a.singleblkrdtim,
a.singleblkrdtim/a.singleblkrds average_wait
from v$filestat a,dba_data_files b
where a.file# = b.file_id
and    a.singleblkrds > 0
order by average_wait;

A dica deste script está nas colunas SINGLEBLKRDTIM e SINGLEBLKRDS, que representam respectivamente: Tempo cumulativo de leitura de single blocks lidos em determinado tempo (dado em centésimo de segundos) e o número de blocos lidos.
Sendo assim do script acima você poderá extrair qual a maior média e trabalhar juntamente com a equipe de S.O. e storage para detectar possíveis gargalos.

Assim conseguiremos mensurar onde está a lentidão do nosso ambiente e quem sabe tirar a culpa  do “colo” do nosso database, não é mesmo?

Este é um dos passos para que você consiga:
“Demonstrar Talento quando Tudo Tá lento ®”

Grande abraço! Espero que tenham curtido a dica de hoje, e lembre-se teremos várias a respeito de performance.

Grande abraço e FOCO NA META!!!!!

 

Sobre raul andrade

DBA e Instrutor Oracle, apaixonado pela minha família e por ensinar.
Esta entrada foi publicada em OWI, Talento quando Tá lento e marcada com a tag , , . Adicione o link permanente aos seus favoritos.

2 respostas para Estudando a espera (OWI)

  1. Diego disse:

    Gostaria de dizer que hoje esse artigo me ajudou muito! Muito Obrigado Raul por compartilhar sua experiencia e seu conhecimento, Sei que minha retribuição com um simples agradecimento é muito pouco, mas lhe digo com toda a certeza, que o conhecimento não é pra ser guardado e sim para ser compartilhado, dividido, pois conhecimento guardado é igual dinheiro no cofre, perde o valor e não rende nada.

Deixe uma resposta