quarta-feira, 25 de novembro de 2009

ANALISANDO O USO DE CPU

Olá pessoal, hoje venho trazer até vocês um assunto que foi muito bem encapsulado por três grandes mestres em banco de dados Oracle, são eles : Mike Ault, Harry Conway e Donald K. Burleson.


Todos esses autores acima citados com mais de 15 anos de experiência em banco de dados e juntos reuniram em uma obra ( Oracle Tuning Power Scripts) as melhores e maiores práticas para identificar e solucionar alguns pequenos detalhes pertinentes a performance e bom desempenho dos SGBD’s.


Vou compartilhar com vocês meu entendimento quanto a CPU Resources do Banco de Dados Oracle que li neste livro, que alias recomendo a todos a compra do mesmo (veja a imagem do livro abaixo).



Espero que apreciem o Post.



ESTATISTICAS DE CPU


Bem, como todos sabem as informações mostradas pelo Banco de Dados, que tem relação direta com “CPU Events”, são responsáveis direto por tempo de resposta dos processos de banco.


Como foi bem definido pelos autores citados, o TEMPO DE RESPOSTA (response time) é definido pelo TEMPO DE SERVICO (servide time) mais o TEMPO DE ESPERA ( wait time).

O SERVICE TIME pode ser divido em CPU parse time,CPU recursive time e CPU other.

Neste caso podemos subentender que, se o response time é intimamente ligado ao uso de CPU, nós DBA’s devemos atentar principalmente aos tipos de uso de CPU que são mostrados e com isso proporcionar um ajuste melhor das instruções para que façam mais acessos diretos, menos sort e hashing por CPU.

Podemos apontar também como um fator contribuidor de má performance de CPU os excessos , tais como BIND VARIABLES, CUSOR SHARING/CACHING para CPU parses, também temos os acessos ao dicionário de dados, dimensionamento dinâmico e outras operações recursivas para CPU.

Veja abaixo uma Query para identificar os principais componentes de CPU :

Query:

=====



col name heading 'Statistic'
col value heading 'Value'

ttitle 'CPU Related Statitics'


select name,
value
from v$sysstat
where upper(name) like '%CPU%';

clear columns
ttitle off;



Output:
=====




 
 
 
 
 
Essas estatísticas podem ser coletadas na visão V$SYSSTAT, veja abaixo o que significa cada coluna desta visão :
 

 
 
 
 
 
 
 
 
 
 
 
As métricas de service time são importantes, isso porque é com elas que você conseguirá determinar um tempo de “breakdown” entre o tempo de espera e o tempo de CPU, isso para um especifico sistema.



Há uma formula que determina o Service Time, e o Mike Ault conseguiu reunir nesta oba veja :

Service Time = CPU Other + CPU Parse + CPU Recursion

O CPU Other é calculado a partir da subtração e da soma do Recursive CPU Usage e o Parse Time CPU do CPU usage by session.

Bem depois dessa explicação técnica podemos ver então uma query que nos mostre em nosso Banco de Dados as SQL Statements que estão causando mais CPU Usage, correto?

USO DE CPU POR INSTRUÇÃO SQL

Encontraremos nossas informações basicamente em uma visão de banco, e a que utilizaremos para tal é a V$SQLAREA , pois é a visão que contem as informações sobre a SHARED POOL e suas estatísticas.


Vamos conhecer a visão antes de irmos para a Query que ira nos mostrar o consumo de CPU por SQL.




 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Agora vamos a Query.



Query:
====



col sql_text for a50 word_wrapped heading 'SQLText'
col cu_time heading 'CPUTime'
col elapsed_time heading 'ElapsedTime'
col disk_reads heading 'DiskReads'
col buffer_gets heading 'BufferGets'
col rows_processed heading 'RowsProcessed'


set pages 60 lines 150


ttitle 'SQL by CPU Usage'


select * from
(select sql_text,
cpu_time/1000000000 cpu_time,
elapsed_time/1000000000 elapsed_time,
disk_reads,
buffer_gets,
rows_processed
from v$sqlarea
order by cpu_time desc,disk_reads desc)
where rownum < 21 ;
set pages 22 lines 80
ttitle off;

Output:
=====


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
A saída esta ordenada por CPU_TIME e DISK_READS respectivamente, com base nessas informações isolem os SQL’s que mais estejam lhe causando problemas e tomem as providencias cabíveis para solucionar, tais como TUNING na query, reescrita das instruções se for necessário, aumento de parâmetros de armazenamento ( Storage Clausules), etc e etc.



Espero que tenham apreciado tanto quanto eu, um abraço á todos.

Bibliografia : Oracle Tuning Power Scripts
Editora : Rampant
Autores : Harry Conway, Mike Ault e Donald K. Burleson.