Pular para o conteúdo

Dica de Tuning – Identificando SQL’s Intensivos

Dica de Tuning – Identificando SQL’s Intensivos

Olá pessoal,como vão?

Bem, hoje me deparei com um assunto bem interessante enquanto lia um de meus livros que comprei a alguns anos, e uma página me chamou a atenção.

Via de regra todos nós nos preocupamos diariamente com a questão do Banco de Dados estar ou não atendendo as suas requisições, em tempos e performances aceitavéis, tanto para nós como para os demais usuários que praticam suas atividades negociais diariamente.

Ha uma maneira muito eficaz de se identificar os SQL’s ( Statement’s) mais intesivos do Banco, e que consequentemente por suas caracteristicas, poderiam e podem ser fortes candidatos a um pequeno TUNING  básico, uma reescrita, uma mudada na clausula WHERE, ou talvez até uma sugestão de indice, enfim, podemos localizar essas pequenas pulgas, que poderiam vir a se tornar verdadeira pragas em nosso Banco de dados, neste intuito vou postar uma query aqui que mostrará como localizar e verificar de que maneira andam se comportanto as instruções em seu banco de dados.

QUERY :

Descrição: Esta query ira mostrar a vocês as 20 sessões top em termos de intesidade, levando em consideração leituras á disco por execução, a partir da Release 9i com a implementação das colunas CPU_TIME e ELAPSED_TIME, ficou melhor e mais eficaz a visualização em termos de tempos de execução.

select
sql_text,
username,
disk_reads_per_exec,
buffer_gets,
disk_reads,
parse_calls,
sorts,
executions,
rows_processed,
hit_ratio,
first_load_time,
sharable_mem,
persistent_mem,
runtime_mem,
cpu_time,
elapsed_time,
address,
hash_value
from
(select sql_text,
username,
round((a.disk_reads/decode(a.executions,0,1,a.executions)),2)disk_reads_per_exec,
a.disk_reads,
a.buffer_gets,
a.parse_calls,
a.sorts,
a.executions,
a.rows_processed,
100 - round(100*a.disk_reads/greatest(a.buffer_gets,1),2) hit_ratio,
a.first_load_time,
sharable_mem,
persistent_mem,
runtime_mem,
cpu_time,
elapsed_time,
address,
hash_value
from
v$sqlarea a,
all_users b
where
a.parsing_user_id=b.user_id
and
b.username not in ('SYS','SYSTEM')
order by 3 desc)
where rownum < 21;

Vale salientar que essa query por questões mencionadas acima, não podem ser utilizadas em 8i, para que possam ser utilizadas , devemos ignorar as colunas que citamos acima.

Todos poderiam perguntar o seguinte : – Ah! Isso é passado já temos o AWR que pode nos mostrar isso, e temos também o Grid Control que pode nos dar um relatório em segundos, não preciso disso, vou usar onde isso?

Veja bem, em alguns locais de trabalho , tudo que se tem é uma Workstation, o SQL*Plus instalado e no máximo lhes deixariam plugar o seu PEN DRIVE nessa estação de trabalho ( risos) , é engraçado mais é a realidade, poranto quando mais armas você tiver e menos depender de interfaces WIZARD, melhor será seu aprendizado e suas capaciadades irão muito mais além, lhe destacando e diferenciando sempre dos demais profissionais.

Obrigado á todos pela atenção, espero que apreciem e que comentem.

Abraço!

P.S.: essa dica e muitas outras são de facil localização para aqueles que gostam de Livros Técnicos, sugiro visitarem a editora Rampant, tem excelentes titulos.

David Siqueira

David Siqueira

Atuando como DBA Oracle desde 2000, trabalhei em quase todos os grandes grupos de Empresas que utilizam tecnologia Oracle em São Paulo. Iniciei minhas atividades como escritor para comunidade Oracle em 2008, sou certificado nas versões 10g e 11g ( OCP) OCE RAC 10g, OCS Impementation Exadata e eleito Oracle ACE Brazil em Dezembro de 2011. Atualmente sou conselheiro técnico do G.U.O.B Brasil e atuo na área de coordenação de equipes de Infra-Estrutura e também como DBA Oracle Sênior.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress