Carvalho
Analista de Sistemas
contato@pedrofcarvalho.com.br
Pedro F. Carvalho
Analista de Sistemas
contato@pedrofcarvalho.com.br
ON
Pedro F. Carvalho
Analista de Sistemas
contato@pedrofcarvalho.com.br
800
880
960
1,040
1,120
1,200
1,280
1,360
1,440
1,520
1,600
99,150
109,065
118,980
128,895
138,810
148,725
158,640
168,555
178,470
188,385
198,300
1.03
1.00
.98
.97
.95
.93
.92
.92
.91
.90
.89
2,510,199
2,435,219
2,380,060
2,350,269
2,309,334
2,275,624
2,249,930
2,231,580
2,211,413
2,193,922
2,167,724
20 rows selected.
A anlise dela feita de forma diferente a de taxas. A consulta mostra uma reduo de
2(0.98) no nmero de leitura fsicas caso o buffer cache seja configurado para 960MB.
Lembrando que, quando falamos de memria, estamos falando de memria fsica, um
servidor Oracle, no deve fazer swap.
Para utilizar o buffer cache de forma eficiente, as declaraes SQL da aplicao devem
estar ajustadas para evitar consumo desnecessrio de recursos. Isso feito verificando
as declaraes SQL executadas com mais freqncia e as que fazem uso de uma maior
quantidade de buffers.
A consulta abaixo retorna as 50 maiores consultas consumidoras de BUFFERS.
SELECT *
FROM (SELECT SQL_FULLTEXT, BUFFER_GETS
FROM VSQL
ORDER BY BUFFER_GETS DESC)
WHERE ROWNUM <= 50
Existem duas formas de melhorar o acerto no buffer:
SHARED POOL
O Oracle utilize a SHARED POOL para armazenar declaraes PL/SQL e SQL, dados do
dicionrio entre outros.
Da mesma forma que o BUFFER CACHE, impossvel determinar um tamanho inicial
para uma base nova. Voc deve seguir o mesmo principio do BUFFER CACHE, colocar
um valor e avaliar o ambiente. Lembrando que a SHARED POOL inicia vazia, e
medida que os usurios vo submetendo as declaraes SQL ela vai sendo preenchida.
Pedro F. Carvalho
Analista de Sistemas
contato@pedrofcarvalho.com.br
Utilize sempre que possvel bind variables ao invs de caracteres literais nas
declaraes. Isso faz com que o Oracle armazene apenas uma declarao SQL.
As declaraes, apesar de semelhantes, ocupam duas reas distintas na
SHARED_POOL:
Substitua:
SELECT employee_id FROM employees WHERE department_id = 10;
SELECT employee_id FROM employees WHERE department_id = 20;
Por:
SELECT employee_id FROM employees WHERE department_id = :dept_id;
Crie padres para as bind variables e para os espaos nas declaraes SQL
blocos de PL/SQL.
Por exemplo:
SELECT employee_id FROM employees WHERE department_id = :dept_id
diferente de:
SELECT employee_id FROM employees where department_id = :dept_id
O objetivo do tuning na SHARED_POOL fazer com que uma declarao SQL que est
no cache possa ser reutilizada o maior nmero de vezes possvel.
Utilize a declarao abaixo para identificar a taxa de hit ratio da shared pool:
SELECT sum(pinhits) / sum(pins)
FROM VLIBRARYCACHE;
SUM(PINHITS)/SUM(PINS)
---------------------.996986356
1 row selected.
A consulta mostrou que 99,69 dos cdigos de SQL e PLSQL esto sendo
reaproveitados.
A declarao abaixo mostra a quantidade de bytes livres na SHARED_POOL.
Pedro F. Carvalho
Analista de Sistemas
contato@pedrofcarvalho.com.br
Pedro F. Carvalho
Analista de Sistemas
contato@pedrofcarvalho.com.br
2912
3072
1.9783
2.087
1472542
1472542
18 rows selected.
A sada acima mostra que o tamanho da shared pool de 1472M. Mostra tambm que,
se o tamanho da shared pool fosse ajustado para 3072M, teria a mesma eficincia.
LOG BUFFER
Aplicaes que inserem, modificam ou excluem um grande volume de registros
normalmente no utilizam o tamanho default de log buffer. Apesar do tamanho do log
buffer ser bem menor frente ao tamanho total da SGA, ele tem grande impacto na
performace de sistemas que realizam atualizao no volume dos dados.
Um tamanho inicial para o log buffer :
MAX(0.5M, (128K * nmero de CPUs))
A maioria dos sistemas que possuem log buffer maior que 1M no possuem ganhos de
performance.
A anlise da performance do log buffer feita por intervalo. Deve ser coletado em
intervalos, e verificar se existe um aumento do valor. O ideal que no existam
alteraes.
SELECT NAME, VALUE
FROM VSYSSTAT
WHERE NAME = 'redo buffer allocation retries';
NAME
VALUE
----------------------------------------------------------- ---------redo buffer allocation retries
11
1 row selected.
Se o valor aumentar de forma consistente, necessrio ajustar o tamanho do log
buffer