Professional Documents
Culture Documents
TOROTIMP
Outubro/2005
Sumrio
1. Viso Geral sobre Tuning..........................................................1-1
Objetivos.....................................................................................................1-2
Questes sobre Tuning................................................................................1-3
Metas de Tuning..........................................................................................1-4
Exemplos de Metas de Tuning Mensurveis................................................1-5
Fases de Tuning..........................................................................................1-6
Passos do Tuning.........................................................................................1-7
Desempenho versus Segurana.................................................................1-8
Exerccios 1..............................................................................................1-9
2. Oracle Alert e Arquivos de Trace...............................................2-1
Objetivos.....................................................................................................2-2
Informaes de Diagnstico.......................................................................2-3
Arquivo Alert Log........................................................................................2-4
Controlando o Arquivo de Alert Log............................................................2-7
Controlando Arquivos de Trace de Processos Background..........................2-8
Arquivos de Trace de Usurio.....................................................................2-9
Controlando os Arquivos de Trace de Usurio...........................................2-10
Exerccios 2............................................................................................2-12
3. Utilitrios e Vises de Performance Dinmicas...........................3-1
Objetivos.....................................................................................................3-2
Vises, Utilitrios e Ferramentas................................................................3-3
Vises Especiais e do Dicionrio de Dados.................................................3-4
Vises Dinmicas de Performance e Soluo de Problemas.......................3-5
Tpicos para Soluo de Problemas e Tuning..............................................3-6
Coletando Estatsticas de Sistema..............................................................3-8
Coletando Estatsticas de Sesso.............................................................3-10
Scripts UTLBSTAT e UTLESTAT...................................................................3-12
STATSPACK................................................................................................3-13
Resultados do Relatrio de STATSPACK.....................................................3-14
Coletando Estatsticas..............................................................................3-15
Relatrio de Estatsticas...........................................................................3-17
Estatsticas do Library Cache....................................................................3-19
Estatsticas de I/O.....................................................................................3-20
Eventos de Espera Oracle.........................................................................3-21
Viso V$EVENT_NAME...............................................................................3-22
Vises de Estatsticas de Eventos.............................................................3-23
Viso V$SYSTEM_EVENT...........................................................................3-24
Viso V$SESSION_EVENT..........................................................................3-25
Viso V$SESSION_WAIT............................................................................3-26
Ferramentas Desenvolvidas pelo DBA......................................................3-28
Oracle Diagnostics Pack e Oracle Tuning Pack..........................................3-29
Performance Manager...............................................................................3-31
Categorias de Tuning................................................................................3-32
Exerccios 3............................................................................................3-33
TargetTrust Treinamento e Consultoria
II
III
IV
VI
Objetivos
Metas de Tuning
Suas metas primrias ao efetuar tuning em um servidor Oracle 10g so
para garantir que:
Tempo de resposta.
Disponibilidade do banco de dados.
Percentuais de utilizao do banco de dados.
Utilizao de memria.
Fases de Tuning
O tuning pode ser dividido em quatro fases:
Design da aplicao e programao:
Sempre que possvel, o tuning deveria comear nessa fase. Com um bom
design, muitos problemas no ocorrem. Por exemplo, a normalizao excessiva
das tabelas pode gerar um nmero grande de joins. Portanto, algumas
desnormalizaes deveriam ser feitas.
Configurao do banco de dados:
importante monitorar pontos crticos, mesmo tendo discos rpidos. Voc
deveria planejar a configurao de dados de forma a acelerar o tempo de
recovery e o acesso aos dados.
Adio de nova aplicao:
Ao adicionar uma nova aplicao ao sistema, a carga de trabalho muda.
Qualquer mudana na carga de trabalho deveria ser acompanhada de tuning.
Tuning contnuo:
Essa a metodologia recomendada para bancos de dados em produo.
Consiste em procurar por gargalos e elimin-los. Use ferramentas para
identific-los. Examinando os relatrios gerados voc pode formar hipteses
sobre o que est causando o gargalo. A partir da hiptese, voc pode
desenvolver uma soluo e implement-la. Execute um teste de stress no
banco para verificar se o problema foi resolvido.
Passos do Tuning
A ordem recomendada para implementao de tuning a seguinte:
1.
2.
3.
4.
5.
6.
Exerccios 1
1. Siga as instrues do instrutor para a criao do banco de dados.
2. Crie uma instncia do Enterprise Manager para o banco de dados.
10
Objetivos
Informaes de Diagnstico
Arquivos de Trace:
Arquivo de alert log.
Arquivos de trace de processos background.
Arquivos de trace de usurio.
Criao de tablespaces.
Uma vez que este arquivo cresce e acaba ocupando espao em disco,
copie e remova-o freqentemente, ou diminua seu tamanho periodicamente.
BACKGROUND_DUMP_DEST
ORACLE_HOME = /oracle/product/10.1.0/db_1
System name:
Linux
Node name:
dbserver10g.targettrust.com
Release:
2.4.21-4.EL
Version:
#1 Fri Oct 3 17:52:56 EDT 2003
Machine:
i686
Instance name: tuning
Redo thread mounted by this instance: 1
Oracle process number: 7
Unix process pid: 20288, image: oracle@dbserver10g.targettrust.com
(SMON)
*** SERVICE NAME:() 2005-01-04 10:26:19.492
*** SESSION ID:(275.1) 2005-01-04 10:26:19.492
10
MAX_DUMP_FILE_SIZE
11
de
trace
de
usurio
resultante
12
Exerccios 2
A meta destes exerccios familiarizar voc com a configurao da
mquina, e focar os utilitrios de diagnstico, como os arquivos de trace e as
vises de eventos de espera.
1. Conecte-se como sysdba.
2. Consulte os parmetros para localizar o arquivo de alert log e os
arquivos de trace de usurio respectivamente.
3. Examine o seu arquivo alert.log.
4. Conecte-se com o SQL*Plus e execute um comando que crie um arquivo
de trace de usurio. Consulte a viso DBA_TABLES do dicionrio de dados
e quaisquer outras consultas que deseje. Finalize o trace.
5. Examine o arquivo de trace resultante, sem se preocupar com seu
contedo, pois isto ser discutido em um captulo posterior.
13
14
15
3. Utilitrios e Vises de
Performance Dinmicas
Objetivos
Utilitrio STATSPACK
Similar em essncia a utlbstat e utlestat, serve para coletar estatsticas de
perodos de tempo e armazen-las no banco de dados. Isso permite que sejam
comparadas estatsticas de diferentes intervalos de tempo, atravs de vrias
fotografias (snapshots) tiradas do banco. Tambm permite gerar um relatrio
de quaisquer duas fotografias.
Tabelas X$
Estatsticas de Sistema
Vises pertinentes a instncia/banco de dados:
Estatsticas de Sesso
Class
Class
Class
Class
Class
Class
Class
Class
TYPE
---------USER
USER
USER
USER
USER
USER
SERVER
--------DEDICATED
DEDICATED
DEDICATED
DEDICATED
DEDICATED
DEDICATED
10
NAME
VALUE
------------------------------ ---------session pga memory
1022540
session pga memory
1350220
session pga memory
1153612
session pga memory
1219148
session pga memory
1284684
Voc pode ento investigar mais adiante para visualizar se tais esperas
ocorrem com freqncia e se esto correlacionadas com outros fenmenos,
como o uso de mdulos especficos.
11
12
STATSPACK
A package STATSPACK pode ser instalada a partir do script spcreate.sql,
presente no diretrio $ORACLE_HOME/rdbms/admin/, e consome inicialmente
cerca de 80Mb de espao na tablespace default do usurio perfstat. Porm o
espao necessrio pode aumentar a medida que a package for utilizada.
O script cria o usurio Perfstat, as tabelas do statspack, suas constraints
e a package STATSPACK. Durante a instalao requisitado o nome das
tablespaces default e temporria desse usurio.
Relatrio de STATSPACK
Para examinar as mudanas nas estatsticas entre dois momentos,
execute o script spreport.sql conectado com o usurio Perfstat. Ser mostrada
uma lista de perodos de coleta e pedido os perodos inicial e final. O relatrio
com as diferenas entre estes perodos ser calculado e gravado em um
arquivo com o nome indicado pelo usurio.
13
O resto do documento
O relatrio feito por STATSPACK melhor do que aquele feito por
UTLBSTAT/ UTLESTAT, pois resume as informaes mais relevantes para o DBA
(aquelas nas quais o DBA deve se concentrar primeiro)
O resto do documento mostra:
14
create
table stats$begin_stats as select * from
@$ORACLE_HOME/rdbms/admin/utlbstat.sql
v$sysstat where 1=0;
create table stats$end_stats as select * from
stats$begin_stats;
Coletando Estatsticas
Baseada em
v$latch
v$rollstat
v$librarycache
v$rowcache
v$system_event
v$filestats, ts$, v$datafile,
file$
stats$file_view
v$waitstat
15
Baseada em
v$sysstat
v$librarycache
v$system_event
v$waitstat
v$rollstat
stats$file_view
v$rowcache
16
Relatrio de Estatsticas
Report.txt
O relatrio gerado pelo script utlestat.sql contm uma seqncia de
comandos SELECT sobre as tabelas DIFFERENCE.
Estatsticas de Sistema
Esta seo do relatrio fornece para cada estatstica de sistema, um
nmero total de operaes, o nmero total de operaes por commit de
usurio e por logon. Isto ajuda voc a efetuar o tuning de diversas reas.
Exemplo 1: DBWR Checkpoints
DBWR Checkpoints indicam o nmero de mensagens de checkpoints que
foram enviadas para o DBWR. O aumento de I/O durante um checkpoint pode
resultar na perda de performance.
Reduza o nmero e/ou freqncia do checkpoint aumentando o parmetro
do init.ora
LOG_CHECKPOINT_INTERVAL e LOG_CHECKPOINT_TIMEOUT.
Entretanto, fique atento que checkpoints infreqentes aumentam o tempo de
recovery do banco de dados.
Exemplo 2: Consistent Gets, DB Blocks Gets, Physical Reads
Consistent Gets o nmero de blocos acessados do buffer cache para
consultas sem a clusula FOR UPDATE.
DB Block Gets o nmero de blocos acessados do buffer cache para
comandos INSERT, UPDATE e SELECT FOR UPDATE.
A soma destes representa o nmero de leituras lgicas.
Physical Reads o nmero de requisies por um bloco que causou I/O
fsico.
17
Estatsticas de Latch
O Oracle utiliza latches para proteger o acesso a estruturas internas,
como o library cache para cursores compartilhados, ou a lista LRU (leastrecently-used) para buffer de dados do buffer cache.
O tuning da rea de latch consiste em reduzir a conteno para alocao
de latches.
Perodo de Medio
Esta seo exibe o momento em que o script utlbstat iniciou a coleta das
estatsticas begin e quando o utlestat iniciou a coleta das estatsticas end.
18
SQL> Rem Select Library cache statistics. The pin hit rate should be high.
SQL> select namespace library,
2
gets,
3
round(decode(gethits,0,1,gethits)/decode(gets,0,1,gets),3)
4
gethitratio,
5
pins,
6
round(decode(pinhits,0,1,pinhits)/decode(pins,0,1,pins),3)
7
pinhitratio,
8
reloads, invalidations
9
from stats$lib;
LIBRARY
GETS GETHITRATI
PINS PINHITRATI
RELOADS INVALIDATI
------------ ---------- ---------- ---------- ---------- ---------- ---------SQL AREA
604
.998
4351
.998
5
0
TABLE/PROCED
36
.972
329
.994
0
0
BODY
10
1
184
1
0
0
TRIGGER
0
1
731
1
0
0
INDEX
0
1
0
1
0
0
CLUSTER
4
1
4
1
0
0
OBJECT
0
1
0
1
0
0
PIPE
0
1
0
1
0
0
JAVA SOURCE
0
1
0
1
0
0
JAVA RESOURC
0
1
0
1
0
0
JAVA DATA
0
1
0
1
0
0
11 rows selected.
19
Estatsticas de I/O
Este um exemplo da ltima seo do report.txt.
20
EVENT#
NAME
PARAMETER1
PARAMETER2
PARAMETER3
21
PARAMETER1
---------duration
waited
file#
handle addr
PARAMETER2
----------
undo seg#
wrap#
PARAMETER3
----------
block#
id
pin address 0*mode+name
count
Viso V$EVENT_NAME
Parmetros que Descrevem um Evento de Espera
Exemplo 1: o evento de espera Buffer Busy Wait aguarda at que um
buffer torne-se disponvel. Este evento ocorre quando um buffer lido no
buffer cache por outra sesso (e a sesso est aguardando que a leitura se
complete), ou est no buffer cache, mas em um modo incompatvel (ou seja,
alguma outra sesso est modificando o buffer).
Este evento complementado com trs parametros:
22
23
Viso V$SYSTEM_EVENT
latch free
5
5
5
1
EVENTtimer
pmon
TOTAL_
932 TOTAL_
535 254430
TIME_ 272.993562
AVERAGE_
process startup
WAITS
3 TIMEOUTS WAITED
8 2.66666667
WAIT
buffer busy waits
12
0
5
5
...
50 linhas selecionadas.
24
Viso V$SESSION_EVENT
SQL> SELECT sid, event, total_waits,average_wait
2 FROM v$session_event where sid=10;
SID
---10
10
10
10
10
10
EVENT
TOTAL_WAITS AVERAGE_WAIT
------------------------------ ----------- ------------buffer busy waits
12
5
db file sequential read
129
0
file open
1
0
SQL*Net message to client
77
0
SQL*Net more data to client
2
0
SQL*Net message from client
76
0
25
SEQ#
EVENT
WAIT
TIME
------ --------------------------- ----1284 pmon timer
0
1697 rdbms ipc message
0
183 rdbms ipc message
0
4688 rdbms ipc message
0
114 smon timer
0
14 SQL*Net message from client
-1
STATE
------WAITING
WAITING
WAITING
WAITING
WAITING
WAITED
SHORT
TIME
Viso V$SESSION_WAIT
Esta viso lista os recursos ou eventos para os quais as sesses ativas
esto aguardando.
Colunas:
Descrio
ltimo tempo de espera da sesso
A sesso est aguardando
O valor foi inferior a 1/100 de um segundo
O sistema no pode fornecer informao
de tempo
26
27
28
Diagnostics Pack
o Lock Monitor
o Performance Manager
o Performance Overview
o Top Sessions
o Top SQL
o Trace Data Viewer
Tuning Pack
o Oracle Expert
o Outline Management
o SQL Analyze
Tablespace Map
o Change Management Pack
Change Manager
Performance Manager
Fornece a possibilidade de monitorar a performance do banco de dados
em tempo real. Fornece dzias de grficos pr-definidos para exibio de uma
grande variedade de estatsticas de performance do banco de dados relativas
a usurios, processamento, tablespaces, redo logs, buffers, caches e I/O.
Top Sessions
Monitora como as sesses conectadas utilizam os recursos do banco de
dados/instncia em tempo real. Voc pode obter uma viso geral da atividade
das sesses, exibindo as n top sessions ordernadas por uma estatstica de sua
escolha.
Permite o monitoramento de locks, que so mecanismos que previnem a
interao destrutiva entre usurios acessando os mesmos recursos.
29
Tablespace Map
Permite o monitoramento e o gerenciamento do armazenamento do banco
de dados. Voc pode obter uma viso geral das informaes de utilizao da
tablespace e utilizar a caracterstica de coalescing para unir blocos livres
adjacentes.
SQL Analyze
Permite o tuning de aplicaes SQL.
Oracle Expert
Permite otimizar a performance do seu ambiente de banco de dados. O
Oracle Expert auxiliar voc com a configurao inicial do banco de dados e
com a coleta e avaliao de caractersticas de performance de bancos de
dados existentes. Esta ferramenta fornece recomendaes de tuning que voc
pode implementar imediatamente.
30
Performance Manager
Caractersticas
A aplicao Performance Manager captura, calcula e apresenta dados de
performance em uma viso grfica em tempo real que permite a voc
monitorar valores para:
Predefined Charts
Sete categorias diferentes de grficos esto disponveis, cada uma com
um conjunto de grficos especficos sobre uma rea de performance.
Contention
Estes grficos incluem Circuit, Dispatcher, Free List Hit %, Latch, Lock,
Queue, Redo Allocation Hit %, Rollback NoWait Hit % e Shared Server.
Database/Instance
Estes grficos incluem Process, Session, System Statistics, Table Access,
Tablespace, Tablespace Free Space, # Users Active, # Users Logged On, #
Users Waiting, # Users Waiting for Locks e # Users Running.
I/O
Estes grficos incluem File I/O Rate, File I/O Rate Details, Network I/O Rate
e System I/O Rate.
Load
Estes grficos incluem Buffers Gets Rate, Network Bytes Rate, Redo
Statistics Rate, Sort Rows Rate, Table Scan Rows Rate e Throughput Rate.
Memory
Estes grficos incluem Buffer Cache Hit %, Data Dictionary Cache Hit %,
Library
Cache
Hit %, Library Cache Details, SQL Area, Memory Allocated, Memory Sort Hit %,
Parse Ratio e Read Consistency Hit %.
TargetTrust Treinamento e Consultoria
31
Categorias de Tuning
Tuning de Aplicao
Tuning de SQL
O Oracle Expert efetua o tuning de comandos SQL e efetua a fixao
(pinning) de SQL.
Mtodos de acesso
O Oracle Expert determina quais ndices so necessrios e gera os
comandos SQL para criar, modificar e remover ndices, como apropriado.
32
Exerccios 3
Leia todos os exerccios antes de comear.
O objetivo desta sesso de exerccios familiarizar voc com as diferentes
formas de recuperar informaes de estatsticas.
Acompanhe o instrutor na tarefa de criar o usurio PERFSTAT e a package
STATSPACK, executando o script spcreate.sql
1. Antes de criar um snapshot, verifique se o parmetro necessrio do
init.ora foi configurado para TRUE.
2. Crie um snapshot, conectado como PERFSTAT. Anote o nmero desse
snapshot.
3. Inicie as 3 sesses seguintes com o usurio ALUNO:
A primeira sesso deve executar o script lab03_1.sql, que cria e efetua
a carga de dados para tabelas do ALUNO. Aguarde at que o script
tenha sido finalizado.
Ento a segunda sesso deve executar o script lab03_2.sql.
Ao mesmo tempo, a terceira sesso deve executar o script lab03_3.sql.
No aguarde at que os 2 ltimos scripts tenham finalizado a carga de
dados e efetue o exerccio 4.
4. Consulte a viso dinmica apropriada para visualizar:
A performance do library cache.
Entre as estatsticas de sistema, aquelas relativas a atividade de
ordenao.
As sesses que esto consumindo mais de 10.000 bytes de memria
PGA.
As estatsticas de segmentos de undo.
As estatsticas de I/O de arquivo.
5. Crie outro snapshot, conectado como PERFSTAT. Execute o script
spreport.sql de forma que o relatrio resultante seja armazenado como
alunoN_report.txt, no seu diretrio UDUMP.
6. Examine o arquivo alunoN_report.tx resultante e compare com os valores
que voc consultou anteriormente.
7. Mostre a lista com os nomes dos eventos de espera.
8. Existem sesses atualmente aguardando por recursos?
33
34
4. Efetuando o Tuning da
Shared Pool
Objetivos
Shared Pool
Library Cache
O library cache contm as reas compartilhadas de SQL e PL/SQL: a
representao completa de blocos PL/SQL ou comandos SQL.
Blocos PL/SQL incluem:
Procedures.
Funes.
Packages.
Triggers.
Blocos PL/SQL annimos.
Library Cache
2 Meta
Evite a fragmentao:
Terminologia
Cada linha da viso V$LIBRARYCACHE contm estatsticas para um tipo de
item mantido na library cache. O item descrito por cada linha identificado
pelo valor da coluna NAMESPACE. Linhas da tabela com os seguintes valores
de NAMESPACE refletem a atividade da library cache para comandos SQL e
blocos PL/SQL:
SQL AREA, TABLE/PROCEDURE, BODY, TRIGGER.
Linhas com outros valores de NAMESPACE refletem a atividade da library
cache para as definies de objeto que o Oracle utiliza para manuteno de
dependncias:
INDEX, CLUSTER, OBJECT, PIPE
Palavras-chave relacionadas com NAMESPACES so:
Uma vez que a shared pool atua como um cache, nada ser removido
at que toda a memria livre seja utilizada. Memria livre mais corretamente
vista como "espao perdido" (wasted space). Um valor alto de memria livre
mais um sintoma de fragmentao.
10
SQL
2 AREA
WHERE sql_text
,873228474
like
TABLE/PROCEDURE
3 'SELECT * FROM
,666161616
aluno.tclientes where id =%';
BODY
,959731544
TRIGGER
,835164835
INDEX
,091836735
CLUSTER
,945355191
OBJECT
1
PIPE
1
JAVA SOURCE
1
JAVA RESOURCE
1
JAVA DATA
1
Experimente:
11
Reloads devem:
Ser preferencialmente 0.
Nunca maiores do que 1% do nmero de PINS.
12
Diretrizes
Se a proporo entre reloads e pins for maior que 1%, existem duas
razes possveis:
13
Invalidaes
Quando Invalidaes Ocorrem
Se um objeto de schema for referenciado em um comando SQL e este
objeto for posteriormente modificado de qualquer forma, a shared SQL area
torna-se invlida (marcada como invlida) e o comando deve sofrer reparse a
prxima vez que for executado, e portanto, um reload deve ocorrer.
Exemplo: uma tabela, seqncia, sinnimo ou viso recriado, alterado
ou removido, ou uma procedure ou especificao de package recompilada,
ento todas as shared SQL areas dependentes so invalidadas.
14
15
Comandos SQL:
Voc deve tambm permitir cerca de 250 bytes na shared pool por
usurio por cursor aberto. Isto pode ser testado durante momentos de
alta utilizao da aplicao com a seguinte consulta:
Em um ambiente de teste, voc pode medir isto selecionando o nmero
de cursores abertos para um usurio de teste, multiplicando o valor resultante
pelo nmero total de usurios.
Sua aplicao deve possuir um library cache ideal do tamanho da soma
dos nmeros acima, mais uma pequena compensao para SQL dinmico.
16
Parmetros de Inicializao
O tamanho da lista reservada, bem como o tamanho mnimo dos objetos
que podem ser alocados a partir da lista reservada, so controlados por dois
parmetros de inicializao:
SHARED_POOL_RESERVED_SIZE:
controla
a
quantidade
de
SHARED_POOL_SIZE reservada para grandes alocaes (configure o
valor
inicial
para
10%
do
SHARED_POOL_SIZE).
Se
SHARED_POOL_RESERVED_SIZE
for
maior
que
metade
de
SHARED_POOL_SIZE, o servidor Oracle sinaliza um erro.
17
Tipo
----------NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
Viso V$SHARED_POOL_RESERVED
Esta viso ajuda no tuning da reserved pool e do espao dentro da shared
pool. As colunas da viso somente so vlidas se o parmetro
SHARED_POOL_RESERVERD_SIZE estiver configurado para um valor vlido.
Onde:
FREE_SPACE
AVG_FREE_SIZE
MAX_FREE_SIZE
REQUEST_FAILURES
LAST_FAILURE_SIZE
ABORTED_REQUEST_THRESHOLD
ABORTED_REQUESTS
LAST_ABORTED_SIZE
Onde:
REQUEST_FAILURES
18
LAST_FAILURE_SIZE
19
Diretrizes de quando o
SHARED_POOL_RESERVED_SIZE muito Grande
Muita memria pode ter sido alocada para a lista reservada se:
REQUEST_MISS = 0 ou no aumentando.
FREE_SPACE => 50% do mnimo do SHARED_POOL_RESERVED_SIZE.
20
21
objetos a serem removidos da shared pool para dar lugar para o objeto. Para
evitar estas situaes, mantenha estes objetos grandes ou freqentemente
requisitados na shared pool para garantir que nunca sejam removidos da
shared pool.
22
ADDRESS HASH_VALUE
-------- ---------51926340 2009431512
23
24
Meta
Misses no cache do dicionrio de dados so esperados em alguns casos.
Aps o startup da instncia, o cache do dicionrio de dados no contm dados,
de forma que provvel que qualquer comando SQL disparado resulte em
cache misses. A medida que os dados forem lidos para o cache, a
probabilidade de cache misses deve diminuir. Eventualmente, o banco de
dados deve atingir uma situao estvel (steady state) na qual os dados do
dicionrio mais freqentemente utilizados estejam em cache. Neste ponto,
muitos poucos cache misses devem ocorrer. Para efetuar o tuning do cache,
examine sua atividade somente aps sua aplicao ter sido executada por
algum tempo.
25
Descrio
Categorias de itens de dados do
dicionrio
Requisies por informaes nesta
categoria
Requisies que resultaram em cache
misses
Dimensionamento
Voc pode dimensionar o cache do dicionrio somente de forma indireta
com o parmetro SHARED_POOL_SIZE. O algoritmo para alocao do espao da
shared pool fornece preferncia para o cache do dicionrio.
26
27
GET_REQS GET_MISS
-------- --------143434
171
140432
127
Resultado do report.txt:
28
29
30
Large Pool
Vantagens
A large pool utilizada para fornecer grandes alocaes de memrias
para a memria de sesso para:
Processos server de I/O.
Operaes de backup e restore
A memria para as operaes de backup e restore do Oracle server e
para os processos server de I/O alocada em buffers de algumas
centenas de kilobytes. A large pool est melhor habilitada para
satisfazer estas requisies do que a shared pool.
31
Parallel
execution:
quando
o
parmetro
PARALLEL_AUTOMATIC_TUNING estiver configurado para TRUE, o
servidor Oracle aloca buffers de execuo em paralelo a partir da
large pool. Quando este parmetro estiver configurado para FALSE, o
Oracle aloca buffers de execuo em paralelo a partir da shared
pool. O servidor Oracle automaticamente calcula o valor do
parmetro
LARGE_POOL_SIZE
se
o
valor
do
parmetro
PARALLEL_AUTOMATIC_TUNING for TRUE. Para manualmente
configurar um valor para LARGE_POOL_SIZE, consulte a viso
V$SGASTAT e aumente ou diminua o valor para LARGE_POOL_SIZE
dependendo de suas necessidades.
32
Exerccios 4
O objetivo desta seo de exerccios utilizar as ferramentas de diagnstico
disponveis para monitorar e efetuar o tuning da shared pool.
3. Verifique o tamanho da shared pool.
4. Para simular atividade de usurio sobre o banco de dados, conecte-se
como ALUNO e execute o script lab04_1.sql e em paralelo lab04_2.sql.
5. Efetue a medida do hit ratio para o library cache.
6. Efetue a medida do hit ratio para o data dictionary cache.
7. Crie um novo snapshot, conectado como PERFSTAT, e crie um novo
relatrio comparando este com o seu ltimo snapshot do exerccio
anterior.
8. Utilize o resultado do relatrio para obter ambos os hit ratios.
9. Que solues voc iria aplicar se qualquer dos hit ratios estivesse ruim ?
10.
Determine que packages, procedures e triggers esto fixadas na
shared pool.
11.
Fixe uma das packages fornecidas pelo Oracle que necessite ser
mantida em memria. Por exemplo a package DBMS_OUTPUT.
12.
Determine a quantidade de memria de sesso utilizada na shared
pool para sua sesso.
33
34
35
5. Efetuando o Tuning do
Database Buffer Cache
Objetivos
O buffer cache armazena cpias dos blocos de dados dos datafiles. Uma
vez que o buffer cache parte da SGA, estes blocos podem ser compartilhados
por todos os usurios. O buffer cache possui as seguintes caractersticas:
Parmetros
O tamanho de bloco definido pelo parmetro DB_BLOCK_SIZE logo na
criao do banco referido como o tamanho de bloco primrio, e usado para
definir o tamanho de bloco da tablespace SYSTEM. Outras tablespaces podem
ter tamanhos de blocos diferentes.
Para cada tamanho de bloco podem haver trs buffer pools, Keep, Recycle
e Default. Eles so dimensionados respectivamente pelos parmetros
DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE e DB_CACHE_SIZE, todos em
unidades de memria (bytes, K ou M).
O pool default o nico obrigatrio, mas os trs pools so independentes.
Ou seja, os demais no retiram suas reas de memria do pool default. A
utilidade e funcionamento dos diferentes pools sero vistas mais adiante nesse
captulo.
Parmetro SGA_MAX_SIZE
A soma da memria alocada para os componentes da SGA no pode
ultrapassar o tamanho definido pelo parmetro SGA_MAX_SIZE aps o startup.
O tamanho definido por esse parmetro a quantidade de memria realmente
alocada no startup da instncia, mesmo que a soma dos componentes no
atinja esse valor.
A instncia deveria ser configurada para iniciar utilizando menos memria
do que o definido por SGA_MAX_SIZE, para deixar uma "folga" para futuros
ajustes no espao alocado pelos componentes.
Grnulo
A alocao de memria da SGA sempre feita em grnulos, reas
contguas de memria virtual, inclusive para os redimensionamentos. Os
valores de alocao so, portanto arredondados para um mltiplo do tamanho
do grnulo.
O tamanho definido em SGA_MAX_SIZE determina o tamanho do grnulo
da seguinte forma:
Grnulo = 4Mb se SGA_MAX_SIZE for menor ou igual a 128Mb.
Grnulo = 16Mb se SGA_MAX_SIZE for maior que 128Mb.
O tamanho mnimo da SGA de trs grnulos: 1 para a rea fixa
(incluindo o redo log buffer); 1 para o database buffer cache, e um para o
shared pool.
Monitoramento
Utilize a viso V$BUFFER_POOL para monitorar o tamanho dos buffer
caches. As colunas so:
Coluna
ID
NAME
BLOCK_SIZE
RESIZE_STATE
Descrio
Nmero do buffer pool.
Nome do buffer pool.
Tamanho do bloco para esse buffer.
Estado atual da operao de resize (STATIC, ALLOCATING,
ACTIVATING ou SHRINKING).
CURRENT_SIZE
BUFFERS
TARGET_SIZE
TARGET_BUFFERS
PREV_SIZE
PREV_BUFFERS
Consultando estatsticas
Para consultar as informaes fornecidas pelo recurso do Advisory,
verifique a viso V$DB_CACHE_ADVICE:
Coluna
ID
NAME
BLOCK_SIZE
Descrio
Nmero do buffer pool (de 1 a 8).
Nome do buffer pool.
Tamanho do bloco em bytes para os buffers desse
pool. Valores possveis so: tamanho padro e
potncias de 2 (2048, 4096, 8192, 16384 ou 32768).
ADVICE_STATUS
Estado do advisory
SIZE_FOR_ESTIMATE
Tamanho do cache sendo previsto (em megabytes).
BUFFER_POOL_ESTIMATE
Tamanho do cache sendo previsto (em buffers).
ESTD_PHYSICAL_READ_FACTOR Fator de leitura para esse tamanho de cache. a taxa
entre o nmero de leituras fsicas estimadas e o
nmero de leituras no cache atual. Se no houverem
leituras no cache atual, ento vale NULL.
ESTD_PHYSICAL_READS
Nmero estimado de leituras fsicas para esse
tamanho de cache.
10
O DBWn gerencia o buffer cache atravs da escrita dos dirty blocks para
os data files para garantir que existam free blocks para os servidores. O DBWR
responde a diferentes eventos em uma instncia Oracle:
O Checkpoint queue excedeu seu tamanho de limite.
Um processo servidor descobriu que a checkpoint queue atingiu seu
tamanho mximo, de forma que ele sinaliza ao DBWn para efetuar o
flush (passo 4). O DBWn escreve os blocos do checkpoint queue (passo
6 e 7).
O limite de pesquisa foi excedido.
Um processo servidor que no encontrou um free block na lista LRU
dentro do threshold de pesquisa sinaliza para o DBWn efetuar o flush
dos dirtu blocks (passo 4). O DBWn escreve os dirty blocks diretamente
da lista LRU (passo 8 e 7).
Timeout de 3 segundos.
A cada trs segundos o DBWn acorda para verificar a checkpoint
queue por blocos a serem escritos. O DBWn move dirty blocks da lista
LRU para a checkpoint queue (passo 9) de forma que possua blocos
suficientes para um full write buffer. Ento, o DBWn escreve os blocos
da checkpoint queue a partir do buffer cache para os datafiles (passo 6
e 7). Se no existir atividade de atualizao por perodos extensos de
TargetTrust Treinamento e Consultoria
11
12
Metas de tuning:
Servidores encontrem os dados em memria.
Para OLTP 90% de hit ratio.
Tcnicas de tuning:
Aumentar o tamanho do buffer cache.
Utilizar mltiplos buffer pools.
Efetuar o cache de tabelas.
Evitar (bypass) o buffer cache em leituras de sort e parallel.
Metas de Tuning
Devido ao I/O fsico demorar um tempo significativo e aumentar a
demanda de CPU, a performance do Oracle pode ser melhorada quando os
servidores encontrarem a maioria dos blocos que necessitam em memria. A
estatstica que mede a performance do database buffer cache o cache hit
ratio. Esta estatstica a proporo do nmero de blocos encontrados em
memria para o nmero de blocos acessados. Quando o database buffer cache
muito pequeno, o sistema mais lento porque efetua muito mais I/Os.
Medidas de Diagnstico
Para monitorar o uso do buffer cache, verifique:
Eventos
de
espera
nas
vises
V$SYSTEM_EVENT,
V$SESSIONS_EVENT e V$SESSION_WAIT.
V$SYSSTAT, STATSPSCK ou UTLBSTAT e UTLESTAT para verificar o
cache hit ratio.
Viso V$DB_CACHE_ADVICE.
Tcnicas de Tuning
O DBA monitora o buffer cache calculando o cache hit ratio a partir das
estatsticas coletadas pelo Oracle e analisando os eventos de espera.
Para aumentar o cache hit ratio, o DBA pode:
13
Observaes Tcnicas
Voc necessita considerar o impacto do cache do sistema operacional. Por
exemplo, o servidor Oracle pode exibir uma alta taxa de I/O fsico que no
aparece em nvel de sistema operacional. Isto pode significar que blocos
Oracle, removidos do buffer cache, esto mantidos no cache do sistema
operacional e podem ser acessados muito rapidamente. Entretanto, como
regra geral, melhor evitar o cache do sistema operacional.
14
Utilitrios de Diagnstico
V$BUFFER_POOL_STATISTICS:
individuais.
descreve
informaes
de
pools
15
A partir da V$SYSSTAT:
A partir de STATSPACK:
16
17
Aumentando o DB_CACHE_SIZE
Como
condies:
regra
geral,
aumente
DB_CACHE_SIZE
sobre
as
seguintes
18
19
Trs buffer pools podem ser definidos: default, recycle e keep. O fato de
blocos (buffers) serem alocados para o pool Keep no significa que tais blocos
sero mantidos em memria por mais tempo. Esse tempo depende da carga
de trabalho posta sobre esse pool. O procedimento deve ser de limitar o
nmero de tabelas que utilizam esse pool para maximizar o tempo de
permanncia dos blocos em memria.
Para uma tabela usar um pool especfico, defina na clusula STORAGE o
parmetro BUFFER_POOL, no comando CREATE TABLE ou ALTER TABLE (ver a
seguir).
20
21
SELECT
FROM
WHERE
AND
table_name, blocks
dba_tables
owner = 'ALUNO'
table_name = 'TCONTRATOS';
TABLE_NAME
BLOCKS
------------------------------ ---------TCONTRATOS
1
Meta de Tuning
A meta do buffer pool keep manter objetos em memria, evitando desta
forma operaes de I/O. O tamanho do buffer pool keep calculado pela soma
dos tamanhos de todos os objetos dedicados a este pool.
Dimensionamento
Utilize o comando ANALYZE...ESTIMATE STATISTICS para obter o tamanho
de cada objeto. A high water mark sempre exata, mesmo se voc utilizar
estatsticas estimadas. Some a coluna BLOCKS a partir de DBA_TABLES,
DBA_INDEXES e DBA_CLUSTERS para obter o total de blocos necessrios.
Dependendo das caractersticas de acesso aos dados e da quantidade de
memria disponvel, voc pode no querer manter todos os blocos destes
objetos no buffer pool. Freqentemente voc pode reduzir o tamanho do buffer
pool keep e ainda manter um hit ratio alto. Estes blocos podem ser alocados
para outros buffer pools.
O DBA deve monitorar os objetos no pool KEEP que aumentem de
tamanho. Um objeto pode no mais caber no buffer pool keep, de forma que
voc comea a perder blocos do cache.
22
HIT RATIO
---------,979758302
.983520845
.503866235
Descrio
Nome do buffer pool.
Tamanho mximo permitido.
Nmero atual de buffers em reposio.
Nmero atual de buffers na lista de escrita.
Nmero total atual de buffers para esse pool.
Nmero de buffers reservados para esse pool.
Nmero de buffers escritos pelo DBWn nesse pool.
Nmero de buffers pesquisados pelo DBWn nesse pool.
Esperas por blocos livres nesse pool.
23
Keep Pool:
Blocos repetidamente acessados.
Tamanho do segmento < 10% do tamanho do buffer pool default.
Recycle Pool:
Blocos no so reutilizados fora da transao.
Tamanho do segmento > 2 vezes o tamanho do buffer pool default.
Lembre que cada objeto mantido em memria implica em uma troca.
Embora seja benfico manter blocos freqentemente acessados, reter blocos
pouco freqentemente utilizados resulta em menos espao disponvel para
outros blocos mais ativos.
24
NAME
-------------------KEEP
RECYCLE
DEFAULT
BLOCK_SIZE
---------8192
8192
8192
BUFFERS
---------14000
2000
1002
USER_,
USER_,
USER_,
USER_,
USER_,
USER_,
DBA_SEGMENTS
ALL_, DBA_CLUSTERS
ALL_, DBA_INDEXES
ALL_, DBA_TABLES
ALL_, DBA_OBJECT_TABLES
ALL_, DBA_ALL_TABLES
25
V$SYSSTAT:
V$SYSTEM_EVENT:
O buffer cache hit ratio sem dvida a medida mais til da performance
do buffer cache. Entretanto, existem alguns outros indicadores.
Estatsticas de Espera
Voc deve considerar o aumento do tamanho do buffer cache se o valor
estiver alto ou aumentando para a estatstica de sistema free buffer inspected.
Esta estatstica o nmero de buffers verificados para encontrar um buffer
livre. Buffers so pulados porque so do tipo dirty ou pinned.
Eventos de Espera
Voc pode descobrir se houve esperas por buffers a partir de
V$SYSTEM_EVENT ou V$SESSION_WAIT. No existem esperas se um evento
no ocorre. Trs eventos principais devem ser acompanhados:
26
27
28
Free Lists
A free list para um objeto mantm uma lista de blocos que esto
disponveis para inseres.
O nmero de free lists para um objeto pode ser configurado
dinamicamente.
Sistemas de uma nica CPU no se beneficiam muito de mltiplas
free lists.
A meta de tuning garantir
que um objeto possua suficiente free
lists para minimizar conteno.
O uso de Automatic Free Space Management elimina a necessidade
de free lists e diminui a conteno.
29
Parmetros de Inicializao
No existem parmetros de inicializao a configurar para minimizar a
conteno de free list. A palavra chave FREELISTS utilizada em nvel de
segmento.
Critrios de Diagnstico
Voc pode consultar as vises V$WAITSTAT e V$SYSTEM_EVENT para
determinar se existe conteno de free list. Se nmeros altos forem
retornados, voc deve identificar o objeto ou objetos.
30
31
SQL>
2
3
4
5
6
DBA_SEGMENTS:
Altere o objeto.
Para aumentar o nmero de free lists para o objeto, voc deve alterar o
objeto utilizando um valor maior para a palavra chave FREELISTS.
32
33
Exerccios 5
O objetivo desta seo de exerccios utilizar os utilitrios de diagnstico
disponveis para monitorar e efetuar o tuning do database buffer cache.
1. A partir do SQL*Plus, conecte-se como PERFSTAT e crie um snapshot.
2. Para simular atividade de usurio sobre o banco de dados, conecte-se
como ALUNO e execute o script lab05_1.sql.
3. Conecte-se como SYSTEM e efetue a medida do hit ratio para o database
buffer cache.
4. Quando o script tiver finalizado, a partir do SQL*Plus, conecte-se como
PERFSTAT e crie outro snapshot.
5. Utilize o resultado do relatrio para obter o cache hit ratio.
6. Dimensione o buffer pool keep para armazenar as tabelas ALUNO.S_EMP
e ALUNO.S_DEPT.
7. Habilite as tabelas ALUNO.S_EMP e ALUNO.S_DEPT para efetuar o cache
no pool keep.
34
35
36
6. Efetuando o Tuning do
Redo Log Buffer
Objetivos
NAME
Value
--------------- ---------log_buffer
262144
log_buffer
262144
Parmetro LOG_BUFFER.
Valor default: 512Kb ou (128Kb * CPU_COUNT), o que for maior.
Tamanho
Diagnosticando Problemas
Em mquinas com processadores rpidos e discos relativamente lentos,
os processadores podem preencher o resto do redo log buffer enquanto o
processo LGWR move uma poro do buffer para disco. Por esta razo, um
buffer maior diminui a probabilidade de novas entradas colidirem com a parte
do buffer que ainda est sendo escrita.
Processos servidores podem requisitar espao do redo log buffer para
escrever novas entradas e no encontrar nenhuma. Eles tero que aguardar
que o LGWR descarregue o buffer para disco.
Meta de Tuning
Efetuar o tuning do redo log buffer significa garantir que exista espao
suficiente para que requisies por espao de log de processos servidor sejam
satisfeitas. Entretanto, muito espao para o buffer pode reduzir a quantidade
de memria que pode ser alocada para outras reas.
Vises Dinmicas
SECONDS_IN_WAIT
O tempo
Considere:
de
espera
(SECONDS_IN_WAIT)
tambm deve
ser
zero.
Investigaes Futuras
Investigue as razes porque o LGWR est lento em liberar buffers:
Aumente o tamanho dos redo log files e/ou adicione novos grupos.
10
11
no
Fixed SGA
Log Buffer
Shared Pool
Java Pool
Buffer Cache
Buffer Cache com tamanho de blocos diferentes
Streams Pool
Se o parmetro SGA_TARGET estiver configurado com um valor maior ao
SGA_MAX_SIZE, ento o SGA_MAX_SIZE ser redirecionado automaticamente
para comportar o SGA_TARGET. O SGA_TARGET pode ser modificado
dinamicamente.
12
Exerccios 6
1. Conecte-se como SYSTEM e efetue a medida do ratio para as requisies
de espao para o redo log buffer.
2. Que solues poderiam ser aplicadas se o ratio estivesse ruim?
3. Acompanhe o instrutor na modificao do tamanho do parmetro
apropriado.
13
14
7. Configurao do Banco de
Dados e Detalhes de I/O
Objetivos
read/writ
e
Control
read/writ
e
write
ARCn
SERVER
Databas
e
read/writ
e
write
read
write
read
write
read/writ
e
read/writ
e
read/writ
e
Diretrizes de Performance
Voc pode melhorar a performance do banco de dados configurando os
discos.
Existem regras bsicas de performance:
Databas
e
write
write
Control
write
write
read
write
read/writ
e
read
Utilizao de Tablespace
Diretrizes
Cada banco de dados deve possuir tablespaces especficas para:
Gerenciando Tablespaces
Dois novos parmetros foram introduzidos no Oracle 9i que tem por
funcionalidade automatizar o armazenamento e gerenciamento de
tablespaces.
- Tablespaces Gerenciadas Localmente (Locally Managed Tablespaces
LMT) implementada pela adio da clusula EXTENT MANAGEMENT
LOCAL na definio da tablespace. LMT tablespaces automatizam o
gerenciamento de extenses e remove a capacidade de se especificar o
parmetro de armazenamento NEXT.
- Gerenciamento Automtico de Espao (Automatic Space Management
ASM) implementada pela adio da clusula SEGMENT SPACE
MANAGEMENT AUTO na definio da tablespace. ASM tablespaces
automatizam o gerenciamento da freelist e remove a capacidade de
especificar os parmetros PCTFREE, PCTUSED, FREELISTS e FREELISTS
GROUPS.
Exemplo de criao de uma tablespace com os novos parmetros.
2k
4k
8k
16k
ao
comando
CREATE
Diretrizes
Striping Manual
Voc pode criar tablespaces de forma que sejam compostas de mltiplos
arquivos, cada um em um disco separado. Voc ento cria tabelas e ndices de
forma que sejam divididos atravs destes mltiplos arquivos.
Voc pode efetuar o stripe:
Utilizando Striping
Se seu sistema operacional oferecer striping, voc normalmente deve
obter vantagens dele. Voc necessita pensar sobre o tamanho do stripe, o qual
deve normalmente ser um mltiplo do valor que voc configurou para
DB_FILE_MULTIBLOCK_READ_COUNT.
Mantenha em mente que o striping manual uma tarefa de trabalho
intensivo. O Oracle preenche as extenses que voc criou uma aps a outra.
Em um determinado momento, uma extenso provavelmente estar muito
ativa e as outras estaro menos ativas. Se voc estiver utilizando parallel
TargetTrust Treinamento e Consultoria
query e efetuando muitos full table scans, ento o striping manual pode valer a
pena.
10
11
12
13
Viso V$FILESTAT.
Viso V$TEMPFILE.
Estatsticas de arquivo de STATSPACK.
Descrio
Nmero do arquivo (efetue um join para
FILE# da V$DATAFILE para obter o
nome)
Nmero de leituras fsicas efetuadas
Nmero de escritas fsicas efetuadas
Nmero de blocos fsicos lidos
Nmero de blocos fsicos escritos
Tempo gasto efetuando leituras
Tempo gasto efetuando escritas
14
Estatsticas de I/O
SQL>
2
3
4
5
6
7
8
9
10
11
TABLESPACE FILE_NAME
PHYRDS PHYBLKRD READTIM PHYWRTS PHYBLKWRT WRITETIM
------------ -------------------------------------- ------ -------- ------- ------- --------- ------ALUNO_DATA /oracle/oradata/tuning/aluno_data01.dbf
1
1
0
10
13
1
DEFAULTTBS1 /oracle/oradata/tuning/default01.dbf
33
33
0
20
31
1
INDX
/oracle/oradata/tuning/indx01.dbf
22
22
0
9
9
0
SYSAUX
/oracle/oradata/tuning/sysaux01.dbf
2907
3467
160
2416
3865
205
SYSTEM
/oracle/oradata/tuning/system01.dbf
6764
15769
53
744
924
29
UNDOTBS1
/oracle/oradata/tuning/undo01.dbf
108
108
0
1028
2380
58
USERS
/oracle/oradata/tuning/users01.dbf
22
22
15
16
na
17
Utilitrios de Diagnstico
18
19
Checkpoints
Checkpoints freqentes:
Reduzem o tempo de recovery da instncia.
Diminuem a performance de execuo.
O processo background LGWR escreve para os redo log groups de forma
circular, um aps o outro. Quando um grupo estiver preenchido, o Oracle deve
efetuar um log switch e conseqentemente um checkpoint. Isto significa que:
O DBWn escreve todos os dirty blocks cobertos pelo log que est
sofrendo checkpoint para os data files.
O CKPT atualiza os headers dos data files e control files.
20
Regulando Checkpoints
O DBWn deve sempre efetuar um checkpoint no final de cada grupo de
redo log. Voc pode tambm configurar checkpoints com os parmetros de
inicializao.
Se performance eficiente for sua prioridade, escolha um tamanho de redo
log file de forma que checkpoints ocorram com freqncia suficiente para no
causar uma queda notvel na resposta mas no mais freqentes do que isso.
21
22
23
24
Parmetros de Inicializao
25
26
Exerccios 7
1. Verifique o seu banco de dados e veja se existem deficincias relativas a
configurao do mesmo. Considere o seguinte:
a.
tablespace
voc
b.
27
28
Objetivos
Gerenciamento de Espao
O gerenciamento eficiente de espao no banco de dados importante
para sua performance. Este captulo explica como gerenciar extenses e
blocos no banco de dados.
Blocos
No Oracle, o bloco a menor unidade de I/O de data file e a menor
unidade de espao que pode ser alocada. Um bloco Oracle consiste de um ou
mais blocos contnuos do sistema operacional.
Extenses
Uma extenso uma unidade lgica de alocao de espao de
armazenamento do banco de dados composta de um nmero de blocos de
dados contnuos. Uma ou mais extenses por sua vez formam um segmento.
Quando o espao existente em um segmento est completamente utilizado, o
Oracle aloca uma nova extenso para o segmento.
Segmentos
Um segmento um conjunto de extenses que contm todos os dados
para uma estrutura lgica de armazenamento especfica dentro de uma
tablespace. Por exemplo, para cada tabela, o Oracle aloca uma ou mais
TargetTrust Treinamento e Consultoria
OWNER
------ALUNO
ALUNO
TABLE_NAME
BLOCKS EMPTY_BLOCKS
--------------- ------ ------------TDESCONTOS
1450
50
TCONTRATOS
460
40
Prs:
Menor probabilidade de extenso dinmica.
Pequeno benefcio de performance.
Pode superar limitaes do sistema operacional em tamanho de
arquivo.
Uma nica leitura sobre o mapa de extenses.
Contras:
Espao livre pode no estar disponvel.
Espao no utilizado.
Para facilitar o gerenciamento de espao, o DBA cria objetos com
tamanhos apropriados de segmentos e extenses. Como regra geral,
extenses grandes so preferidas ao invs de pequenas extenses.
10
11
Desvantagens
12
Prs:
Menos overhead.
Ideal para acesso seqncial.
Ideal para linhas muito grandes.
Melhor performance de leitura de ndices.
Contras:
Aumenta a conteno de bloco.
Utiliza mais espao no buffer cache.
Vantagens
Desvantagens
13
PCTFREE e PCTUSED
Parmetro PCTFREE
O parmetro PCTFREE configura o percentual mnimo de um bloco de
dados a ser reservado como espao livre (free space) para possveis
atualizaes para linhas que j existam naquele bloco.
Parmetro PCTUSED
O parmetro PCTUSED configura o percentual mnimo de um bloco que
pode ser utilizado para o row data mais um overhead antes que novas linhas
sejam adicionadas para o bloco.
14
O espao utilizado no bloco pode crescer (1) at que o row data e overhead
atinjam um total de 80% do tamanho total do bloco. Ento o bloco removido
da free list para prevenir inseres adicionais (2).
Aps voc executar um comando DELETE ou UPDATE, o Oracle processa o
comando e verifica se o espao utilizado no bloco agora menor do que
PCTUSED. Se for, o bloco vai para o incio da free list. Quando a transao
sofrer commit, o espao livre no bloco torna-se disponvel para outras
transaes (3).
Aps um bloco de dados ser preenchido para o limite do PCTFREE
novamente (4), o Oracle considera o bloco indisponvel para a insero de
novas linhas at o percentual deste bloco cair abaixo do parmetro PCTUSED.
15
PCTFREE
Default: 10.
Zero se no houver atividade de UPDATE.
PCTFREE = 100 * upd / (avg row length).
PCTUSED
Default: 40.
Configure se linhas forem removidas.
PCTUSED = 100 PCTFREE 100 * rows * (avg row length) / blocksize.
Para configurar PCTFREE e PCTUSED utilize as frmulas acima, onde:
upd
16
17
Diretrizes
Aumente o PCTFREE para evitar linhas migradas. Se voc deixar mais
espao livre disponvel no bloco para atualizaes, a linha ter espao para
crescer. Voc pode tambm reorganizar (recriar) tabelas e ndices com uma
alta taxa de deleo.
18
19
Espao acima da high water mark pode ser recuperado a nvel de tabela
utilizando o comando:
Em um full table scan, o Oracle efetua a leitura em todos os blocos abaixo
da high water mark. Blocos vazios acima da high water podem desperdiar
espao, mas no devem degradar a performance, entretanto, blocos vazios
abaixo da high water mark podem degradar a performance.
20
NUM_ROWS
BLOCKS
EMPTY AVG_SPACE CHAIN_CNT AVG_ROW_LEN
---------- ---------- ---------- ---------- ---------- ----------65
1
6
3234
0
73
Estatsticas de Tabelas
viso
DBA_TABLES
Colunas
NUM_ROWS
BLOCKS
EMPTY_BLOCKS
AVG_SPACE
AVG_ROW_LEN
CHAIN_CNT
AVG_SPACE_FREELIST_BLOC
KS
NUM_FREELIST_BLOCKS
para
visualizar
os
resultados
das
Descrio
Nmero de linhas da tabela
Nmero de blocos abaixo da high water mark da
tabela
Nmero de blocos acima da high water mark da
tabela
Mdia de espao livre nos blocos abaixo da high
water mark
Tamanho mdio das linhas, incluindo o row overhead
Nmero de linhas migradas ou encadeadas na tabela
A mdia de espao livre em todos os blocos de uma
freelist.
Nmero de blocos em uma freelist.
21
end;
/
Package DBMS_SPACE
Voc pode tambm utilizar esta package fornecida com o banco para
obter informaes sobre a utilizao de espao em segmentos, que contm
duas procedures:
22
Reorganizao de ndices
23
Monitorando ndices
Voc pode monitorar o espao utilizado por ndices utilizando o comando:
Ento, consulte a viso INDEX_STATS:
Coluna
LF_ROWS
LF_ROWS_LEN
DEL_LF_ROWS
DEL_LF_ROWS_LEN
Descrio
Nmero de valores atualmente no ndice
Soma em bytes do tamanho de todos os
valores
Nmero de valores deletados do ndice
Tamanho de todos os valores deletados
Reconstruindo ndices
Voc pode decidir reconstruir ndices se entradas deletadas
representarem 20% ou mais das entradas atuais, embora isto ainda dependa
da sua aplicao e prioridades. Voc pode utilizar a consulta acima para
encontrar a proporo. Utilize o comando ALTER INDEX REBUILD para
reorganizar ou compactar um ndice existente ou para modificar suas
caractersticas de storage. O comando REBUILD utiliza o ndice existente como
base para novos ndices. Todos os comandos de armazenamento de ndice so
suportados, como STORAGE (para alocao de extenses), TABLESPACE (para
mover o ndice para uma nova tablespace), e INITRANS (para modificar o
nmero inicial de entradas). Quando estiver construindo um ndice, voc pode
tambm utilizar as seguintes palavras chaves para reduzir o tempo da
operao:
24
25
Exerccios 8
O objetivo destes exerccios utilizar as ferramentas de diagnstico
disponveis para monitorar e efetuar o tuning da utilizao de espao de bloco.
1. Conecte-se como SYSTEM e encontre o PCTFREE, CHAIN_CNT e high
water mark para a tabela S_ORD do usurio ALUNO. Crie o procedimento
encontra_hw_mark no schema do usurio SYSTEM a partir do script
procedure_hw_mark.sql.
2. Execute o script lab08_1.sql para atualizar linhas em ALUNO.S_ORD.
3. Encontre o CHAIN_CNT e a high water mark para a tabela S_ORD do
usurio ALUNO.
4. Elimine quaisquer linhas migradas.
5. Encontre o CHAIN_CNT e a high water mark para a tabela S_ORD do
usurio ALUNO.
6. Transfira as linhas migradas da tabela S_ORD para uma nova tabela
chamada S_ORD_TEMP, a partir da tabela CHAINED_ROWS.
26
27
9. Otimizando Operaes de
Sort
Objetivos
Criao de ndice.
Operao de parallel insert envolvendo manuteno de ndice.
Uso das clusulas ORDER BY ou GROUP BY.
Seleo de valores com DISTINCT.
Uso dos operadores UNION, INTERSECT ou MINUS.
Joins do tipo Sort-Merge.
Execuo do comando ANALYZE.
Criao de ndice
O processo servidor (ou processos, se o ndice estiver sendo criado em
paralelo) tem que ordenar os valores indexados antes de construir a B-Tree.
Execuo de ANALYZE
O comando ANALYZE til para coletar estatsticas sobre tabelas, ndices
e clusters para ajudar o analisador baseado em custo a definir os melhores
planos de execuo, e efetua a ordenao dos dados para fornecer
informaes sumarizadas.
Processo de Ordenao
rea de Sort
O espao de sort:
Parmetros
SORT_AREA_SIZE
SORT_AREA_RETAINED_SIZE
TargetTrust Treinamento e Consultoria
Requisitos de Memria
Single Server Process
Um plano de execuo pode conter mltiplos sorts.
Por exemplo, um join do tipo sort-merge de duas tabelas pode ser seguido
por um sort para uma clusula ORDER BY.
Se um nico servidor estiver trabalhando em um sort, enquanto efetua
um ORDER BY sort, utiliza:
Tamanhos
Normalmente, SORT_AREA_SIZE e SORT_AREA_RETAINED_SIZE devem ser
configurados para o mesmo valor, a menos que:
10
11
Diagnosticando Problemas
Metas de Tuning
12
Evitando Ordenaes
Evite operaes de sort sempre que possvel:
Clusula NOSORT
Utilize a clusula NOSORT para criar ndices para dados pr-ordenados em
uma mquina com uma nica CPU. Esta clusula somente vlida para os
dados inseridos em uma tabela:
Em uma mquina com mltiplas CPUs, provvel que seja mais rpido
carregar dados em paralelo, mesmo se estes no forem carregados em ordem.
Ento voc pode utilizar a criao em paralelo de ndices para aumentar a
velocidade de ordenao.
UNION ALL
Utilize UNION ALL ao invs de UNION, esta clusula no elimina
duplicidades, de forma que no necessita efetuar ordenao.
Joins Nested-Loops
Utilize acesso indexado para requisies de equijoin:
O otimizador prefere um join nested-loop ao invs de um join sort-merge.
Um
join
nested-loop no necessita quaisquer sorts, necessitando apenas:
1. Efetuar um full table scan da tabela TCLIENTES.
TargetTrust Treinamento e Consultoria
13
ndices e ORDER BY
Crie ndices em colunas que so freqentemente referenciadas em
clusulas ORDER BY. Dessa forma, o servidor utilizar o ndice ao invs de uma
operao de sort, pois o ndice j est ordenado. Entretanto, o ndice deve ser
criado de forma a combinar com a clusula ORDER BY (em termos de nomes e
ordem das colunas).
ANALYZE ESTIMATE
A clusula COMPUTE mais precisa para o otimizador. Entretanto,
demanda uma grande quantidade de espao de sort. A clusula ESTIMATE
indicada para grandes tabelas e clusters.
14
NAME
CLASS
VALUE
--------------------- ------- -------sorts (memory)
64
154
sorts (disk)
64
4
sorts (rows)
64
571768
Utilitrios de Diagnstico
15
Statistic
Total Per Transact Per Logon Per Second
-------------- ------ ------------ --------- ---------sorts (disk)
4
.02
.41
.01
sorts (memory)
154
.27
5.77
.12
sorts (rows)
571768
39.62
862.59
18.19
16
Disk
Mem
Ratio
---------- ---------- ---------36
893342 ,004029812
Diagnsticos e Diretrizes
Ratio
A proporo entre sorts (disk) e sorts (memory) deve ser menor que 5%,
para um sistema OLTP.
Diretrizes
Se a proporo indicar um nmero alto de sorts sendo efetuados em
disco, aumente o tamanho de SORT_AREA_SIZE ou PGA_AGGREGATE_TARGET.
Isto aumenta o tamanho de cada sort run e diminui o nmero total de runs e
merges.
17
Descrio
Nmero de usurios ativos
Nmero total de extenses
Extenses atualmente alocadas para ordenaes
Nmero de vezes que uma extenso no utilizada foi
encontrada no pool
MAX_USED_BLOCKS Nmero mximo de blocos utilizados
MAX_SORT_BLOCKS Nmero mximo de blocos utilizados por um sort individual
18
SELECT session_num,
s.username, u."USER",
tablespace,
u.tablespace,
extents, blocks
u.contents,
u.extents, u.blocks
FROM v$sort_usage;
v$session s, v$sort_usage u
WHERE s.saddr
= u.session_addr
AND
u.contents = 'TEMPORARY';
USERNAME
-------STAT
ALUNO
USER
------SYSTEM
SYSTEM
Configure diferentes
necessidades de sort.
tablespaces
temporrias
baseado
nas
Diretrizes
Parmetros de Storage: uma vez que sorts so efetuados em memria
se forem menores que SORT_AREA_SIZE, voc deve considerar este valor
quando configurar tamanhos de extenses em tablespaces temporrias.
19
Benefcios
20
Exerccios 9
Os objetivos desta seo de exerccios utilizar as ferramentas de
diagnstico disponveis para monitorar e efetuar o tuning de ordenaes.
1. Conecte-se como SYSTEM e execute o script lab09_1.sql, que fora
ordenaes a escreverem para disco.
2. Efetue a medida da proporo entre sorts (disk) e sorts (memory).
3. Configure o parmetro SORT_AREA_SIZE para resultar somente sorts
(memory).
4. Conecte-se como ALUNO e execute o script lab09_2.sql e recalcule a
proporo.
5. Crie uma nova tablespace do tipo TEMPORARY e faa com que as
operaes de ordenao de ALUNO, quando ordenarem para disco,
ocorram nesta tablespace.
6. Conecte-se como ALUNO e reexecute o script lab09_2.sql. Monitore a
tablespace TEMPORARY.
21
22
10. Latches
Latches
Objetivos
Latches
Definio
Em um ambiente Oracle, estruturas de memria so mantidas em um
estado consistente por um curto perodo de tempo enquanto um processo as
est acessando. Isto necessrio para garantir que a estrutura no se
modifique enquanto est sendo acessada.
Latches so utilizados para garantir que estas estruturas no se
modifiquem, como uma espcie de lock sobre estruturas. Por exemplo, latches
protegem a lista de usurios que acessam o banco de dados, e protegem as
estruturas de dados que descrevem os blocos no buffer cache. Um processo
deve adquirir o latch que acompanha uma determinada estrutura de dados
compartilhada antes que ele comece a manipul-la, e deve liber-lo quando
terminar. Quando mltiplos processos tentam adquirir estes latches
simultaneamente, existem contenes.
Propsitos
Latches servem mais especificamente para:
Serializar o acesso
Protegem estruturas de dados na SGA.
Protegem alocaes de memria compartilhada
Para serializar a execuo
Previnem a execuo simultnea de certos blocos de cdigo crticos.
Previnem corrupo.
Latches
Tuning
A meta de tuning para conteno de latches minimizar a conteno
entre processos quando latches so requisitados. Entretanto, no se faz o
tuning de latches diretamente, mas usam-se as estatsticas de conteno de
latches como ferramenta de diagnstico para tuning de outras estruturas ou
processos.
Quando ocorre conteno nas requisies por latches, sinal de uso
anormal de recursos por parte de alguma estrutura da SGA. Para resolver o
problema, examine a utilizao de recursos das partes da SGA que mostram
conteno.
Latches
Sleep
Em sistemas com uma nica CPU, esse o nico mode de espera por
latches disponvel. Um sleep consiste em o processo requisitante liberar a CPU
e "dormir" por algumas instrues (variando de acordo com a plataforma).
Essa liberao da CPU para outro processo implica em uma operao de troca
de contexto relativamente cara para o sistema. Um sleep representado por
uma contagem do evento latch free wait.
Spin
Em sistemas com mltiplas CPUs, possvel que o processo que possui o
latch esteja executando em uma das CPUs e o processo requisitante esteja em
outra. Nesse caso, para evitar a troca de contexto, o processo requisitante faz
um spin na CPU. Ou seja, ele a ocupa com uma contagem at um nmero
especfico, para depois tentar adiquirir o latch novamente. Se este ainda no
houver sido liberado, ento o processo requisitante faz outro spin. Se passarem
um nmero especificado de spins e o latch no for adquirido, ento o processo
requisitante libera a CPU e faz um sleep, como descrito anteriormente.
Entretanto, na maioria das vezes os latches so logo liberados, evitando assim
as trocas de contexto.
Latches
Willing-To-Wait: se o latch requisitado com uma requisio Willing-ToWait no estiver disponvel, o processo requisitando aguarda um
pequeno perodo de tempo e requisita o latch novamente. O
processo continua aguardando e requisitando at que o latch esteja
disponvel. Esse o tipo mais comum.
Immediate: se o latch requisitado com uma requisio Immediate
no estiver disponvel, o processo requisitante no aguarda, mas
continua processando outras instrues.
Latches
Waits
--------------------------- --------enqueue
482,210
latch free
1,000,676
buffer busy waits
736,524
log file sync
849,791
log file parallel write
533,563
-----------------------------------
Latches
library cache
36,870,207 2.1 0.7
0
0.4
Redo allocation
10,478,825 0.9 0.3
0
Latches
Categorias de Latches
Existem poucos latches sobre os quais o DBA possui controle direto. Em
Oracle 10g, o nmero de latches necessrios calculado com base nos valores
de parmetros de inicializao e parmetros do sistema operacional. O tipo de
latch que sofre muita conteno pode indicar o tipo de problema de
desempenho ocorrendo. Muitas vezes, o tuning feito em nvel de aplicao,
mudando-se o seu comportamento. Se isso no for eficaz, considere ento
alterar as configuraes da SGA, como tamanho do buffer cache ou da shared
pool.
Categorias de latches:
Latches
10
Objetivos
para
verificar
Parmetro UNDO_RETENTION
Pode-se tambm especificar o perodo tempo em que as informaes
presentes nos segmentos de undo devem ser retidas para leituras
consistentes, atravs do parmetro UNDO_RETENTION (em segundos). A
tablespace de undo deve ter espao suficiente ao menos para comportar a
quantidade de informao gerada durante o perodo especificado em
UNDO_RETENTION.
O parmetro UNDO_RETENTION estabelece apenas uma meta na
preservao de dados nos segmentos de undo para leitura consistente. Se o
segmento de undo no puder mais crescer, ele sobrescrever as informaes,
mesmo que estas no tenham sido mantidas pelo tempo configurado em
UNDO_RETENTION, o que pode acarretar em erros SNAPSHOT TOO OLD.
Esse parmetro pode ser modificado dinamicamente, e pode-se usar a
seguinte query para determinar o valor dele e o tamanho da tablespace de
undo:
Undo Tablespace
Configurar o parmetro UNDO_MANAGEMENT para AUTO, requer que se
configure tambm o parmetro UNDO_TABLESPACE com o nome da tablespace
de undo. No modo de gerenciamento automtico de undo, pode haver apenas
uma tablespace de undo ativa de cada vez.
Essa tablespace pode ser criada com a clusula UNDO TABLESPACE no
comando CREATE DATABASE, ou com o comando CREATE UNDO TABLESPACE.
Se o parmetro UNDO_TABLESPACE no for especificado, ser criada a
tablespace SYS_UNDOTBS.
A tablespace de undo no suporta nenhum outro objeto alm de
segmentos de undo criados e gerenciados pelo Oracle.
Exemplo:
Rollback de Transao
Quando uma transao efetua modificaes para uma linha em uma
tabela, a imagem anterior salva no segmento de undo. Se a transao sofrer
rollback, o valor do segmento de undo escrito de volta para a linha,
restaurando o valor original.
Recuperao de Transao
Se a instncia falhar quando transaes estiverem em progresso, o
servidor Oracle deve efetuar o rollback das modificaes que no sofreram
commit quando o banco de dados for aberto novamente. Este rollback
conhecido como recuperao de transao e somente possvel se as
modificaes para o segmento de undo tambm forem protegidas pelos redo
log files.
Leitura Consistente
Quando transaes esto em progresso, outros usurios do banco de
dados no devem visualizar quaisquer modificaes que no sofreram commit
que tenham sido efetuadas por estas transaes. Alm disso, um comando no
deve visualizar quaisquer modificaes que sofram commit aps o incio da
execuo do comando. Os valores antigos nos segmentos de undo so
utilizados tambm para fornecer a quem est efetuando leitura dos dados uma
imagem consistente para um determinado comando.
TargetTrust Treinamento e Consultoria
TABLESPACE_NAME
--------------SYSTEM
UNDOTBS1
UNDOTBS1
UNDOTBS1
UNDOTBS1
UNDOTBS1
UNDOTBS1
UNDOTBS1
UNDOTBS1
UNDOTBS1
UNDOTBS1
OWNER
-----SYS
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
STATUS
------ONLINE
ONLINE
ONLINE
ONLINE
ONLINE
ONLINE
ONLINE
ONLINE
ONLINE
ONLINE
ONLINE
11 rows selected.
SEGMENT_ID
SEGMENT_NAME
TABLESPACE_NAME
Descrio
Nmero do segmento de undo, relacionado com
V$ROLLNAME.USN para obter o nome.
Nmero de extenses do segmento de undo.
Tamanho atual do segmento em bytes.
Nmero de transaes que esto utilizando o segmento.
High water mark: tamanho mximo em bytes para o qual o
segmento cresceu desde o startup.
Status do segmento de undo. ONLINE indica que o segmento
de undo est disponvel para uso.
Descrio
Endereo (address) da seo, que pode ser relacionado
com V$SESSION.SADDR.
Nmero do segmento de undo utilizado pela transao.
utilizado como parte do transaction ID.
As colunas UBAFIL, UBABLK, UBASQN e UBAREC
especificam a localizao atual no segmento de undo onde
a transao est escrevendo.
Nmero de blocos de undo gerados pela transao.
10
END_TIME
UNDOBLKS
TXNCOUNT MAXQUERYLEN
-------- ---------- ---------- ----------04/01/05
18
25
0
04/01/05
60
106
0
04/01/05
33
182
0
04/01/05
90
181
0
04/01/05
53
117
0
11
longas
12
Soluo
Aumente o espao disponvel para a tablespace:
Estendendo os datafiles da tablespace.
Permitindo que os datafiles cresam automaticamente (AUTOEXTEND).
Adicionando novos arquivos para a tablespace.
13
Causas Possveis
O servidor Oracle garante que um comando processar somente dados
que sofreram commit at um determinado momento. Quaisquer modificaes
que no haviam sofrido commit quando o comando foi disparado ou que foram
efetuadas aps o comando iniciar sua execuo, no sero vistas pelo
comando. Se o servidor Oracle no conseguir construir uma imagem de leitura
consistente dos dados, o usurio receber um erro ORA-01555: Snapshot too
old. Este erro pode ocorrer quando a transao que efetuou as modificaes j
sofreu commit e:
A entrada da transao no header do undo foi reutilizada.
A before-image (imagem anterior) do segmento de undo foi sobrescrita
por outra transao.
Soluo
Erros de leitura consistente podem ser minimizados garantindo que as
tablespaces de undo possuam espao suficiente para as transaes do usurio.
14
Exerccios 11
Os objetivos desta seo de exerccios utilizar as ferramentas de
diagnstico disponveis para monitorar e efetuar o tuning de segmentos de
undo.
1. Identifique suas configuraos atuais de gerenciamento de undo.
2. Como usurio ALUNO, execute o script insere_dados.sql. O script insere
1000 novas linhas para a tabela TCONTRATOS sem efetuar o commit.
3. Conecte-se como SYSTEM. Identifique a atividade atual dos segmentos
de undo.
4. Retorne para a sesso do aluno e efetue o commit.
5. Como SYSTEM identifique a atividade atual dos segemntos de undo.
6. Tente remover a tablespace de undo. O que acontece?
7. Como SYSTEM, encontre se voc teve qualquer conteno de segmento
de undo desde o startup, utilizando duas origens de informao
diferentes.
8. A viso V$SYSTEM_EVENT apresenta quaisquer esperas relacionadas
com segmentos de undo?
15
16
Tuning de SQL
Objetivos
Identificar comandos
performance.
SQL
diagnosticar performance
alternativos
para
incrementar
de
Tuning de SQL
Viso Geral
Tuning de SQL
Modos de Otimizao
Tuning de SQL
SELECT /*+ FIRST_ROWS */ * FROM aluno.tclientes;
Parmetro OPTIMIZER_MODE
Valore possveis so:
CHOOSE (depreciado)
RULE (depreciado)
FIRST_ROWS - minimiza o tempo de resposta imediata (possivelmente
as custas de um tempo de resposta global maior)
ALL_ROWS - minimiza o tempo total de resposta
Em nvel de instncia
Em nvel de sesso
Parmetro OPTIMIZER_MODE
O valor default ALL_ROWS.
ALTER SESSION SET OPTIMIZER_MODE = value
Hints de Otimizao
Voc pode codificar hints em um comando, como mostrado abaixo:
Os hints de otimizao possveis so FIRST_ROWS e ALL_ROWS.
Tuning de SQL
Ferramentas de Diagnstico
Vrias ferramentas de diagnstico esto disponveis para avaliar a
performance de comandos SQL e mdulos PL/SQL. Cada uma fornece ao
desenvolvedor ou DBA um nvel varivel de informaes.
Tuning de SQL
EXPLAIN
PLAN FOR
SQL> @$ORACLE_HOME/rdbms/admin/utlxplan
SELECT ...
Explain Plan
Tuning de SQL
SELECT
id,
operation, options, object_name,position
SQL> SQL>
EXPLAIN
PLAN
for
2 FROM
plan_table;
2 UPDATE
s_emp
3 SET salary = salary * 1.10
4 WHERE dept_id = (select id from s_dept
5
where name = 'Finance');
ID OPERATION
--- -----------------0 UPDATE STATEMENT
1
FILTER
2
TABLE ACCESS
3
TABLE ACCESS
4
INDEX
OPTIONS
OBJECT_NAME
POSITION
----------- ---------------------- -------1
1
FULL
EMP
1
BY ROWID
DEPT
2
RANGE SCAN DEPT_NAME_REGION_ID_UK
1
Tuning de SQL
para
diagnosticar
Tuning de SQL
MAX_DUMP_FILE_SIZE
= n
TIMED_STATISTICS
= true
USER_DUMP_DEST = diretrio
MAX_DUMP_FILE_SIZE
USER_DUMP_DEST
TIMED_STATISTICS
10
Tuning de SQL
ALTER SESSION SET SQL_TRACE = [TRUE | FALSE]
EXECUTE sys.dbms_session.set_sql_trace( [TRUE | FALSE] )
EXECUTE sys.dbms_system.set_sql_trace_in_session(
session_id, serial_id, [ TRUE | FALSE ] );
Nvel de Instncia
A configurao do parmetro SQL_TRACE em nvel de instncia um
mtodo para habilitar o tracing. Entretanto, requer que a instncia seja
reiniciada quando o trace no for mais necessrio. Isto impe um hit de
performance significativo, porque ser efetuado trace para todas as sesses da
instncia.
Nvel de Sesso
Trace em nvel de sesso resulta em um hit de performance global menor,
porque pode-se efetuar o trace apenas de sesses especficas. Os trs
mtodos para habilitar ou desabilitar o SQL Trace so:
11
Tuning de SQL
tkprof ora_19999.trc
tracefile outputfile
$ tkprof
myfile.txt explain=aluno/aluno
[sort=option] [print=n]
[explain=username/password] [insert=filename]
[sys=NO] [record=filename]
[table=schema.tablename]
Opes do TKPROF
Opo
TRACEFILE
OUTPUTFILE
SORT=option
PRINT=n
EXPLAIN=username/passw
ord
INSERT=filename
SYS=NO
Descrio
Nome do arquivo de trace
Nome do arquivo formatado
A ordem pela qual deve-se ordenar os comandos
Exibe os primeiros n comandos
Executa o EXPLAIN PLAN no usurio especificado
12
Tuning de SQL
call
count cpu elapsed disk query current rows
------- ----- ---- ------- ---- ----- ------- ---Parse
2 0.11
0.22
0
2
0
0
Execute
4 0.00
0.00
0
4
0
0
Fetch
428 0.00
0.06 600
806
808 6400
-------- ---- ------- ---- ----- ------- ---total
434 0.11
0.28 600
806
814 6400
CPU
Elapsed
Disk
Query
Current
Rows
Significado
O nmero de vezes que o comando sofreu
parse ou execute e o nmero de
chamadas de fetch emitidas para o
comando
Tempo de processamento para cada fase,
em segundos (se o comando foi
encontrado na shared pool, isto 0 para a
fase de parse)
Tempo decorrido, em segundos (isto
normalmente no muito til porque
outros processos afetam o tempo
decorrido)
Blocos de dados fsicos lidos a partir dos
arquivos do banco de dados (esta
estatstica pode ser baixa se os dados
estavam em buffer)
Buffers lgicos recuperados por leituras
consistentes (normalmente para
comandos SELECT)
Buffers lgicos recuperados em modo
corrente (normalmente para comandos
DML)
Linhas processadas pelo comando externo
(para comandos SELECT, isto exibe a fase
de fetch; para comandos DML, isto exibe a
fase de execute)
13
Tuning de SQL
14
Tuning de SQL
@$ORACLE_HOME/rdbms/admin/utlxplan
SQL> set
@$ORACLE_HOME/sqlplus/admin/plustrce
autotrace [on | traceonly]
Autotrace
Configure o Autotrace:
15
Tuning de SQL
Consultas Alternativas
Lembre que freqentemente existe mais de um comando SQL que fornece
o resultado desejado. Cada um pode utilizar um caminho de acesso diferente e
executar de forma diferente. Ambos, DBAs e desenvolvedores devem estar
familiarizados como diferentes consultas podem ser utilizadas para obter os
mesmos resultados.
TargetTrust Treinamento e Consultoria
16
Tuning de SQL
17
Tuning de SQL
Performance de Mdulo
Se um mdulo da aplicao se registrar com o banco de dados quando for
chamado, voc pode rastrear o seguinte para cada mdulo:
Performance
Utilizao de Recursos
18
Tuning de SQL
SQL> CREATE OR REPLACE PROCEDURE add_employee
2
(name IN VARCHAR2,
3
salary IN NUMBER,
4
manager IN NUMBER,
5
title IN VARCHAR2,
6
commission IN NUMBER,
7
department IN NUMBER)
8 IS
9 BEGIN
10
DBMS_APPLICATION_INFO.SET_MODULE('add_employee','insert into
s_emp');
11 ...
12 END;
13 /
Registrando um Mdulo
SET_MODULE(module, action)
SET_ACTION(action)
SET_CLIENT_INFO(client)
Descrio
Configura o nome do mdulo e, opcionalmente, a ao
(dispare esta procedure no incio de cada mdulo)
Configura o nome da ao corrente em um mdulo
registrado (chame esta procedure antes de cada nova
transao e novamente aps a transao para
configurar a ao para NULL)
SET_CLIENT_INFO(client_inf Configura informaes do cliente para a sesso
o)
Onde:
module
action
client_info
19
Tuning de SQL
Rastreando um Mdulo
READ_MODULE(module, action)
READ_CLIENT_INFO(client)
Descrio
Recupera os nomes do ltimo mdulo e
ao configurados por SET_ACTION ou
SET_MODULE
Recupera a ltima informao de cliente
configurada para a sesso
20
Tuning de SQL
21
Tuning de SQL
Exerccios 12
O objetivo desta seo de exerccios familiarizar voc com o uso do
EXPLAIN PLAN e com a interpretao do relatrio formatado de um arquivo de
trace gerado utilizando-se o TKPROF.
1. Conecte-se como ALUNO e crie a tabela PLAN_TABLE sobre o schema do
ALUNO.
2. Execute um describe da tabela PLAN_TABLE.
3. Utilize o EXPLAIN PLAN para visualizar o plano de execuo trabalhado
pelo otimizador para o comando SQL do script lab12_1.sql.
4. Utilize o Trace e TKPROF para visualizar a performance destes planos.
a. Configure sua sesso para o modo de trace.
b. Execute o script lab12_2.sql.
c. Encerre o SQL*Plus e formate seu arquivo de trace utilizando o
TKPROF. Utilize as opes SYS=NO e EXPLAIN.
22
Tuning de SQL
23
Tuning de SQL
24
Objetivos
Identificar as demandas
transaes online (OLTP).
Reconfigurar
sistemas
necessidades especficas.
de
sistemas
de
temporariamente
processamento
para
atender
de
Viso Geral
Fase de Design de Dados
Voc deve determinar quais dados so necessrios para sua aplicao.
Voc necessita estruturar a informao para melhor satisfazer as metas de
performance.
Requisitos
Caractersticas
Aplicaes de suporte a deciso agrupam grandes quantidades de
informao em relatrios compreensveis.
Eles obtm dados a partir de sistemas OLTP e utilizam sumrios e
agregaes na recuperao destes. Efetua muito uso de full table scans como
mtodo de acesso.
Pessoas que formulam decises em uma organizao utilizam estes dados
para determinar qual estratgia a organizao deve tomar.
Exemplo: uma ferramenta de marketing determina os padres de
compras dos consumidores baseada nas informaes obtidas a partir de dados
demogrficos para determinar quais itens vendem melhor em quais
localizaes.
Requisitos
Excelente tempo de resposta.
Quando voc desenha um DSS, voc deve garantir que as consultas
sobre grandes quantidades de dados possam ser efetuadas dentro de
um tempo razovel.
Preciso.
Disponibilidade diria.
Sistemas Hbridos
Muitas aplicaes confiam em vrias configuraes e opes Oracle. Voc
deve decidir que tipo de atividade sua aplicao efetua e determinar quais
caractersticas so melhor adaptadas para ela.
Metas de performance conflitantes podem ser resolvidas copiando dados
coletados a partir de bancos de dados OLTP para um banco de dados DSS que
ser somente consultado. Mas este exemplo compromete a meta de preciso
para a aplicao DSS.
Portanto, voc deve determinar quais metas so mais importantes.
O Objetivo do DBA fazer com que leituras e escritas sejam feitas o mais
rapidamente possvel. Esses fatores devem ser considerados.
Tamanho da tabela
Considere colocar tabelas grandes tabelas em tablespaces separadas.
Para tabelas muito grandes, use particionamento, e coloque as diferentes
parties em diferentes tablespaces, e espalhe os datafiles em diferentes
discos/controladoras. Isso ajuda a distribuir a carga de trabalho pelos
dispositivos fsicos de I/O.
ndices:
B-Tree
Bitmap
Chave Reversa
Function-based
Tabelas Index-Organized.
Clusters.
Histogramas.
Histogramas
Estes so estatsticas coletadas pelo comando ANALYZE, armazenadas em
vises do dicionrio e utilizadas pelo otimizador baseado em custo (Cost Based
Optimizer) para efetuar o tuning de execuo dos comandos SQL.
ndices B-Tree
BLEVEL.
10
11
ndices Comprimidos
Comprimindo um ndice:
O uso da clusula COMPRESS elimina repeties de valores de colunas do
ndice, e pode diminuir consideravelmente o espao necessrio para o ndice.
Use um nmero inteiro para especificar quantas colunas devem ser
comprimidas, comeando da primeira e seguindo em direo ltima coluna
do ndice.
Para ndices nicos, o nmero de colunas comprimidas vai de 1 at o
nmero total de colunas menos 1 (default). Para ndices no-nicos, valores
vlidos vo de 1 at o nmero total de colunas.
ndices comprimidos so teis porque:
12
ndices Bitmap
Consideraes de Performance
13
14
15
Bitmap
Adequado para colunas com baixa
cardinalidade
Atualizaes nas colunas possuem um
alto custo
Eficiente para consultas utilizando
predicados OR
Lock em nvel de segmento bitmap
Menor necessidade de
armazenamento
teis para DSS
16
Definio
A criao de um ndice de chave reversa inverte os bytes do valor de cada
coluna chave, mantendo a ordem das colunas no caso de uma chave
composta.
Desvantagens
Quando os comandos da aplicao especificam intervalos, o explain plan
produz um full table scan.
17
18
Tabelas Index-Organized
Definio
Uma tabela index-organized semelhante a uma tabela normal com um
ndice sobre um ou mais de suas colunas, mas ao invs de manter dois
segmentos separados para a tabela e o ndice B-Tree, o banco de dados
mantm um nico ndice B-Tree que contm:
Benefcios de Performance
19
20
Tabela Index-Organized
Identificada pela PK
Sem ROWID
Sem ndices secundrios
Full Table Scan retorna linhas na ordem
da PK
Constraints de unique no so
permitidas
Menor necessidade de storage
Distribuio, replicao e
particionamento no so suportados
21
22
23
IOT_TYPE
-------TABLE_NAME
IOT
---------VENDAS
TCLIENTES
TITENS
TCONTRATOS
TCLIENTES
Vises do Dicionrio
24
Clusters
Definio
Um cluster um grupo de uma ou mais tabelas que compartilham os
mesmos blocos de dados porque compartilham colunas comuns e so
freqentemente utilizadas juntas em consultas com joins. O uso de clusters
permite ao DBA desnormalizar tabelas enquanto elas parecem estar
normalizadas para o usurio.
Benefcios de Performance
25
Consideraes de Performance
Full table scans so geralmente mais lentos em tabelas clusterizadas do
que em tabelas no clusterizadas.
26
Particionamento
Tipos de particionamento
O que leva a escolha de particionamento de tabelas e ndices o
crescimento incrvel no tamanho desses objetos. Esse recurso diminui o down
time, aumenta a performance e a facilidade de configurao. Existem quatro
mtodos de particionamento.
27
TABLESPACE data0,
TABLESPACE data1,
TABLESPACE data12);
28
Regras:
29
Acessos s Parties
Dependendo do comando SQL, o Oracle capaz de reconhecer as
parties e subparties de tabelas e ndices relevantes, e evitar o acesso s
demais parties. Essa otimizao chamada partition pruning.
30
Histogramas
Definio
Para dados distribudos uniformemente, o otimizador baseado em custo
supe com preciso o custo de execuo de um determinado comando.
Entretanto, quando os dados no esto uniformemente distribudos, o
otimizador no consegue estimar com preciso a seletividade de uma
consulta. Nestes casos, histogramas so necessrios para descrever a
distribuio de uma coluna especfica.
31
Vises do Dicionrio
32
Indexao
33
Index-Organized Tables
34
Cdigo Compartilhado
Caso contrrio, voc deve certificar-se que o cdigo seja compartilhado
por stored procedural objects, como packages, procedures e funes.
Variveis Bind
Voc deseja manter o overhead de parse em um nvel mnimo. Tente
garantir que o cdigo da aplicao utilize variveis bind ao invs de literais.
Parmetro CURSOR_SHARING
O parmetro CURSOR_SHARING ajuda os usurios a compartilhar cdigo
compilado. Os seguintes valores so vlidos:
35
Indexao
Considere como voc pode minimizar a alocao de espao e o overhead
de performance da manuteno de ndices. Uma vez que a maioria das
consultas utilizam full table scans, voc pode:
Clusterizao
Ambos os tipos de clusters devem ser considerados, e especialmente hash
clusters por sua melhor performance de acesso, excluindo-se tabelas com
crescimento regular durante as cargas de dados, exceto se voc possui a
possibilidade de recriar o cluster.
Particionamento
Embora seja uma opo, esta caracterstica deve ser considerada para
grandes quantidades de dados para os quais as consultas concentram o
TargetTrust Treinamento e Consultoria
36
acesso em linhas que foram geradas recentemente. Ela oferece partition scan
ao invs de full table scan.
37
38
Sistemas Hbridos
OLTP
Necessita de mais ndices
ndices B-Tree
ndices de chave reversa
PCTFREE de acordo com a atividade de
atualizao esperada
Cdigo compartilhado com variveis
bind
ANALYZE em ndices
CURSOR_SHARING = similar
DSS
Efetua mais full table scans
ndices bitmap
Tabelas IOT
PCTFREE pode ser configurado para 0,
se houver recriao da tabela
atualizada
Literais e hints
Gerao de histogramas
CURSOR_SHARING = exact
Detalhes
Recomendaes
Porm, manter dois grandes bancos de dados ao invs de um possui um
custo financeiro bvio, e algumas organizaes podem ainda decidir a
execuo de sistemas hbridos:
39
40
41
Objetivos
Introduo
Utilizao de memria.
Nveis de I/O.
Utilizao de CPU.
Trfego de rede.
Configuraes Multi-CPU
Paging e Swapping
Tuning de Memria
Tuning do Banco de Dados Afeta a Paginao
(Paging)
Alm do tuning da SGA, existem algumas coisas que o DBA pode fazer
que podem afetar o desempenho de paging/swapping:
Tuning de I/O
Raw Devices
Um raw device um disco ou partio de disco sem uma estrutura de
arquivo ou diretrio. Embora sejam mais difceis de administrar que arquivos
do sistema operacional, podem fornecer alguns benefcios de performance,
porque leituras e escritas para um raw device evitam o cache do sistema
operacional.
Em alguns sistemas operacionais, como em Windows, o Oracle no utiliza
o sistema de cache de file system do sistema operacional em operaes de I/O
Nesses casos, o uso de raw devices no fornece ganhos significativos de
performance.
Monitoramento
Estatsticas de performance de I/O normalmente incluem o nmero de
leituras e escritas, leituras e escritas por segundo, e tamanhos das filas de
requisio de I/O. Cargas aceitveis variam de acordo com o dispositivo e
controladora.
TargetTrust Treinamento e Consultoria
Diretrizes:
Taxa mxima de ocupao de CPU: 90%.
Proporo mxima de processamento sistema operacional/usurio:
40/60.
Carga de CPU balanceada atravs das CPUs.
Monitoramento:
CPU.
Processos.
Diretrizes
Quando estiver efetuando tuning da utilizao de CPU, o administrador do
sistema deve preocupar-se principalmente se:
Monitoramento
Monitores do sistema operacional para utilizao de CPU normalmente
incluem o percentual de tempo que a CPU est ativa e o tempo gasto em
tarefas do sistema operacional versus usurio. Monitores de processo exibem o
TargetTrust Treinamento e Consultoria
Processos e Threads
uma
seqncia
de
instrues
que
podem
executar
independentemente de outras threads no mesmo processo. Esta configurao
torna o acesso a SGA e a comunicao entre os processos Oracle mais
eficiente, mas fica limitada a quantidade mxima de memria por processo.
10
Diretrizes
Efetue o Tuning do Sistema Inteiro
Para ter um sistema bem configurado, efetue o tuning do sistema
operacional, do banco de dados e da aplicao. O sistema operacional ou o
banco de dados podem estar rodando incorretamente devido a uma aplicao
mal escrita.
Por exemplo, uma aplicao que est efetuando muitos full table scans,
que aumentam o I/O do sistema e possuem um efeito negativo sobre as
estatsticas do database buffer cache. O desenvolvedor efetua o tuning da
aplicao adicionando ndices. A reduo de full table scans causa a utilizao
mais eficiente do database buffer cache e reduz I/O no sistema operacional.
11
sistema pode imediatamente fazer uso dos recursos adicionais de CPU. Mesmo
embora refazer o tuning no seja necessrio, o sistema pode melhorar com
ele.
12
13
Solues Exerccios 1
1. No servidor linux voc deve executar os seguintes passos:
a. Acessar o diretrio /oracle/scripts/criabanco,
localizados os arquivos de criao do banco.
onde
esto
Solues Exerccios 2
A meta destes exerccios familiarizar voc com a configurao da
mquina, e focar os utilitrios de diagnstico, como os arquivos de trace e as
vises de eventos de espera.
1. Conecte-se como sysdba.
No Linux:
export ORACLE_SID = <SID>
sqlplus sys as sysdba
Solues Exerccios 3
Leia todos os exerccios antes de comear.
O objetivo desta sesso de exerccios familiarizar voc com as diferentes
formas de recuperar informaes de estatsticas.
Acompanhe o instrutor na tarefa de criar o usurio PERFSTAT e a package
STATSPACK, executando o script spcreate.sql
No Linux:
sqlplpus sys as sysdba
SQL> @$ORACLE_HOME/rdbms/admin/spcreate.sql
Solues Exerccios 4
O objetivo desta seo de exerccios utilizar as ferramentas de diagnstico
disponveis para monitorar e efetuar o tuning da shared pool.
1. Verifique o tamanho da shared pool.
SQL> SHOW PARAMETER SHARED_POOL_SIZE
1.
2. Para simular atividade de usurio sobre o banco de dados, conecte-se
como ALUNO e execute o script lab04_1.sql e em paralelo lab04_2.sql.
sqlplus aluno/aluno
SQL>@lab04_1
SQL>@lab04_2
2.
3. Efetue a medida do hit ratio para o library cache.
SQL> CONN sys as sysdba
SQL> SELECT namespace, gethitratio
FROM v$librarycache;
3.
4. Efetue a medida do hit ratio para o data dictionary cache.
SQL> SELECT SUM(getmisses) / SUM(gets)
FROM v$rowcache;
SQL> SELECT 1 - (SUM(getmisses) / SUM(gets))
FROM v$rowcache;
4.
5. Crie um novo snapshot, conectado como PERFSTAT, e crie um novo
relatrio comparando este com o seu ltimo snapshot do exerccio
anterior.
SQL> CONN perfstat/perfstat
SQL> VAR numero NUMBER
SQL> EXEC :numero := statspack.snap;
SQL> PRINT numero
SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql
5.
6. Utilize o resultado do relatrio para obter ambos os hit ratios.
TargetTrust Treinamento e Consultoria
No linux:
cat relatorio.txt
6.
7. Que solues voc iria aplicar se qualquer dos hit ratios estivesse ruim ?
Aumentar a memria, atravs do parmetro SHARED_POOL_SIZE uma
soluo.
Outra melhorar a aplicao, atravs da escrita correta de
comandos SQL (aumentar o compartilhamento), ou o uso de roles,
para diminuir o uso de Data Dictionary Cache.
7.
8. Determine que packages, procedures e triggers esto fixadas na shared
pool.
SQL> CONN sys as sysdba
SQL> SELECT name, namespace, sharable_mem
FROM v$db_object_cache
WHERE kept = 'YES'
AND type in ('PACKAGE','PACKAGE
BODY','FUNCTION','PROCEDURE');
8.
9. Fixe uma das packages fornecidas pelo Oracle que necessite ser mantida
em memria. Por exemplo a package DBMS_OUTPUT.
EXEC DBMS_SHARED_POOL.KEEP ('DBMS_OUTPUT');
9.
10.
Determine a quantidade de memria de sesso utilizada na shared
pool para sua sesso.
SQL> SELECT 250*ses.VALUE
FROM v$sesstat ses, v$statname stat, v$session sess
WHERE ses.statistic# = stat.statistic#
AND stat.name = 'opened cursors current'
AND sess.sid = ses.sid
AND sess.username = 'SYS';
SQL> SELECT 250*ses.VALUE
FROM v$mystat ses, v$statname stat
WHERE ses.statistic# = stat.statistic#
AND stat.name = 'opened cursors current';
10.
Solues Exerccios 5
O objetivo desta seo de exerccios utilizar os utilitrios de diagnstico
disponveis para monitorar e efetuar o tuning do database buffer cache.
1. A partir do SQL*Plus, conecte-se como PERFSTAT e crie um snapshot.
SQL> CONN perfstat/perfstat
SQL> VAR numero NUMBER
SQL> EXEC :numero := statspack.snap;
SQL> PRINT numero
SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql
No linux:
cat relatorio.txt
dir
10
11
12
Solues Exerccios 6
1. Conecte-se como SYSTEM e efetue a medida do ratio para as requisies
de espao para o redo log buffer.
sqlplus system/oracle
SQL> SHOW PARAMETER LOG_BUFFER
SQL> SELECT ret.value/entries.value
FROM v$sysstat ret, v$sysstat entries
WHERE ret.name = 'redo buffer allocation retries'
AND entries.name = 'redo entries';
13
Solues Exerccios 7
1. Verifique o seu banco de dados e veja se existem deficincias relativas a
configurao do mesmo. Considere o seguinte:
a. Quantas tablespaces voc possui ? Quais tablespace voc adicionaria e
com que estrutura de diretrio?
14
D
indices
archive
temp
undo
D
dados
redo(b)
control(b)
temp
undo
D
dados
redo(b)
control(b)
temp
undo
D
temp
indices
archive(b)
E
indices
archive
E
indices
archive(b)
E
redo(b)
control(b)
F
archive(a)
undo
b.
15
16
Solues Exerccios 8
O objetivo destes exerccios utilizar as ferramentas de diagnstico
disponveis para monitorar e efetuar o tuning da utilizao de espao de bloco.
1. Conecte-se como SYSTEM e encontre o PCTFREE, CHAIN_CNT e high
water mark para a tabela S_ORD do usurio ALUNO. Crie o procedimento
encontra_hw_mark no schema do usurio SYSTEM a partir do script
procedure_hw_mark.sql.
sqlplus system/oracle
SQL> SELECT table_name,pct_free, chain_cnt
FROM dba_tables
WHERE owner = 'ALUNO'
AND table_name ='S_ORD';
SQL> @procedure_hw_mark.sql
SQL> SET serveroutput ON
SQL> EXEC encontra_hw_mark('ALUNO','S_ORD','TABLE')
17
18
Solues Exerccios 9
Os objetivos desta seo de exerccios utilizar as ferramentas de
diagnstico disponveis para monitorar e efetuar o tuning de ordenaes.
1. Conecte-se como SYSTEM e execute o script lab09_1.sql, que fora
ordenaes a escreverem para disco.
sqlplus system/oracle
SQL> @lab09_1
19
20
Solues Exerccios 11
Os objetivos desta seo de exerccios utilizar as ferramentas de
diagnstico disponveis para monitorar e efetuar o tuning de segmentos de
undo.
1. Identifique suas configuraos atuais de gerenciamento de undo.
SQL> SHOW PARAMETER UNDO_MANAGEMENT
SQL> SHOW PARAMETER UNDO_RETENTION
SQL> SHOW PARAMETER UNDO_TABLESPACE
SQL> SELECT *
FROM v$rollname;
SQL> SELECT *
FROM v$rollstat;
SQL> SELECT segment_name, status
FROM dba_rollback_segs;
--
-21
22
Solues Exerccios 12
O objetivo desta seo de exerccios familiarizar voc com o uso do
EXPLAIN PLAN e com a interpretao do relatrio formatado de um arquivo de
trace gerado utilizando-se o TKPROF.
1. Conecte-se como ALUNO e crie a tabela PLAN_TABLE sobre o schema do
ALUNO.
No Linux:
sqlplus aluno/aluno
SQL> @$ORACLE_HOME/rdbms/admin/utlxplan
23
24