.comment-link {margin-left:.6em;}

Tuesday, May 24, 2005

Statspack - Interpretação

Retomando depois de encontrar algum tempo, vamos analisar o report propriamente.
Bom, estamos com quase 20 páginas de relatório e agora? As próximas linhas serão minha opinião de como trato o relatório e isso é completamente empírico, é a o método que eu encontrei para a interpretação de Statspack.

Caminhando pelas seções:


STATSPACK report for

DB Name DB Id Instance Inst Num Release RAC Host
------------ ----------- ------------ -------- ----------- --- ----------------
ORA10G 3848249943 ora10g 1 10.1.0.2.0 NO MARCIO807955

Snap Id Snap Time Sessions Curs/Sess Comment
--------- ------------------ -------- --------- -------------------
Begin Snap: 51 23-May-05 23:02:45 17 6.2
End Snap: 52 23-May-05 23:32:50 17 6.4
Elapsed: 30.08 (mins)






Cache Sizes (end)
~~~~~~~~~~~~~~~~~
Buffer Cache: 24M Std Block Size: 8K
Shared Pool Size: 40M Log Buffer: 256



Aqui estou interessado no tempo, algo que passe de 30 minutos ou seja menos de 15, deveria ser desprezado. Nesta seção também encontramos os caches, log buffer e tamanho do bloco. Como podem notar, trabalho em um notebook de 256m de memória, portanto tive que customizar meu Oracle 10g para executar de maneira satisfatória neste ambiente. O Oracle 10g roda sim em computador com menos de 512m de memória - vale lembrar que não é para fim comercial e sim educativo. Tenho essa instância instalada para explorar e estudar o Oracle.

Load Profile

Aqui temos noção do load através da análise da quantidade de Executes, Transactions, Logical e Physical reads por segundo e transação. Estou interessado também no Hard Parses que deve estar bem próximo de zero. Se não estiver, na grande maioria dos sistemas, eu deveria seguir para o top de sql e encontrar queries sem bind variable.

Instance Efficiency Percentage
Nesta seção procuro saber a utilização da Shared Pool, através dos Library Hit %, Execute to Parse % e Soft Parse %. Se a Library Hit % está com valor baixo, isso indica que sua shared pool pode estar subdimensionada ou sua aplicação não está fazendo uso correto das bind variables.
Soft Parse % tem grande importância, na maioria dos sistemas ela deveria estar próxima de 100. Existem algumas exceções como sistemas baseados em web e DW.
Execute to Parse % assim como Soft Parse, deveria estar proximo de 100 na maioria dos sistemas, porém segue a mesma regra de exceção que o item anterior.

Top 5 Timed Events
Quando estou analisando um statspack report venho até aqui. A partir daqui, vou especificamente para algumas seções mais abaixo para buscar mais informação, mas em resumo, venho até aqui. O Top % Timed Events mostra os 5 maiores eventos de espera, a Oracle mudou o nome de espera para tempo gasto - para mim é a mesma coisa - a novidade foi incluir o tempo da CPU junto, o tempo de CPU não poderá ser um grande problema, faça um balanço entre o tempo do snap e o tempo da CPU (n Minutos x 60 segundos x m CPUs) se o valor estiver alto, provavelmente o sistema está usando índice onde deveria usar full table scan (Já discutimos anteriormente).

Fiz um exemplo onde tinha minha PGA_AGGREGATE_TARGET = 10m. Nesse exemplo, fiz sort forçando o estouro de memória e gravação na TEMP. Veja o resultado.


Top 5 Timed Events
~~~~~~~~~~~~~~~~~~ % Total
Event Waits Time (s) Call Time
-------------------------------------------- ------------ ----------- ---------
direct path read temp 10,488 77 84.79
direct path write temp 7,464 5 5.92
db file sequential read 251 4 4.18
control file sequential read 585 2 1.79
db file parallel write 83 1 .99


Após essa execução, aumentei a pga_aggregate_target para 50m. Como cheguei a esse valor veremos em uma próxima oportunidade. Rodei outro snap e encontrei isso:

Top 5 Timed Events
~~~~~~~~~~~~~~~~~~ % Total
Event Waits Time (s) Call Time
-------------------------------------------- ------------ ----------- ---------
db file sequential read 35 1 31.72
control file parallel write 15 1 29.34
control file sequential read 587 0 22.94
db file scattered read 34 0 7.69
latch free 6 0 6.96


Por que tão pouco, porque para efeito de demonstração fiz:

create or replace procedure p
as
begin
for i in 1 .. 100
loop
for x in ( select big.owner, big.object_name, big.created
from big, small
where big.id = small.id
order by 1, 2, 3 )
loop
null;
end loop;
end loop;
end;
/
show error
pause

begin
statspack.snap;
p;
statspack.snap;
end;
/


Portanto o tempo do snap, foi o tempo da execução da procedure. Como eu não tenho um sistema em minha instância, armei um exemplo simples para demonstrar o tuning com o pga_aggregate_target.

Se voce tem alguma dúvida no seu statspack, envie aqui e lhe ajudarei a interpretá-lo na medida do possível.
Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?