Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
10.Latches.................................................................................10-1
Objetivos...................................................................................................10-2
Latches: Viso Geral.................................................................................10-3
Procedimento de Requisio e Espera por Latches..................................10-5
Tipos de Requisies por Latches.............................................................10-6
Diagnosticando Problemas de Conteno por Latches.............................10-7
Categorias de Latches..............................................................................10-9
12.Tuning de SQL........................................................................12-1
Objetivos...................................................................................................12-2
Viso Geral...............................................................................................12-3
Modos de Otimizao...............................................................................12-4
TargetTrust Treinamento e Consultoria IV
Otimizao e Performance do Banco de Dados Oracle 10g
Objetivos
Listar as diferentes responsabilidades associadas com o processo de
tuning.
Definir os passos associados com o processo de tuning.
Identificar diferentes metas de tuning.
Metas de Tuning
Suas metas primrias ao efetuar tuning em um servidor Oracle 10g so
para garantir que:
Comandos SQL acessem o menor nmero possvel de blocos Oracle.
Se um bloco for necessrio, ento que esteja no cache em memria.
Usurios compartilhem o mesmo cdigo.
Quando o cdigo for necessrio, que esteja no cache em memria.
Onde leituras e escritas forem inevitveis, que sejam efetuadas o
mais rpido possvel.
Usurios nunca esperem por recursos presos por outros usurios.
Backups e outras administraes internas possam ser efetuadas o
mais rpido possvel.
Fases de Tuning
Passos do Tuning
A ordem recomendada para implementao de tuning a seguinte:
1. Design (se no for tarde demais).
2. Aplicao.
3. Memria.
4. I/O.
5. Conteno.
6. Sistema operacional.
Repita o processo se suas metas no forem atingidas.
A razo para esta estrutura que melhorias feitas cada vez mais cedo na
seqncia podem evitar que se deva lidar com outros problemas mais tarde.
Por exemplo, se suas aplicaes estiverem utilizando muitos full table
scans, isto pode aparecer como I/O excessivo. Entretanto, no h nenhum
ponto em redimensionar o buffer cache, ou redistribuir arquivos nos discos, se
voc pode reescrever as consultas de forma que acessem somente quatro
blocos ao invs de quatro mil.
Os dois primeiros passos so tipicamente de responsabilidade dos
arquitetos do sistema e desenvolvedores da aplicao. Entretanto, o DBA pode
tambm ser envolvido no tuning da aplicao.
Exerccios 1
Objetivos
Identificar a localizao e a utilidade do arquivo de alert log.
Identificar a localizao e a utilidade dos arquivos de trace de
processos background e de usurio.
Informaes de Diagnstico
Arquivos de Trace:
Arquivo de alert log.
Arquivos de trace de processos background.
Arquivos de trace de usurio.
Tue Jan1 4
Thread 10:15:53
advanced to2005
log sequence 76
create
Currenttablespace DATA76 mem# 0: /oracle/oradata/tuning/redo01a.log
log# 1 seq#
datafile
Thread 4'/oracle/oradata/tuning/data01.dbf'
Tue Jan1 cannot 2005 new log, sequence 76 size 300M reuse
allocate
10:50:19
EXTENT
Checkpoint
alter MANAGEMENT LOCAL online
not complete
tablespace user_data begin backup
Tue
Tue Jan
Jan 44 10:16:03
10:50:19 2005
2005
ORA-1123 signalled
Completed: create tablespace SYSTEM
during: alter datafile user_data begin backup
tablespace
'/oracle/oradata/tuning/system01.dbf'
...
BACKGROUND_DUMP_DEST
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
Sesso alterada.
ID NOME
---------- -----------------------------------
130 Ramiro Antunes
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.
3. Utilitrios e Vises de
Performance Dinmicas
Objetivos
Coletar estatsticas atravs:
De vises dinmicas de performance e soluo de problemas.
Do relatrio gerado por STATSPACK.
Eventos de espera Oracle.
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.
Vises V$
Baseadas nas tabelas X$, que so estruturas de memria que
armazenam informaes sobre a instncia e portanto esto
disponveis quando a instncia estiver no modo NOMOUNT ou
MOUNT.
So listadas na viso V$FIXED_TABLE.
As vises V$ (sinnimos para as vises V_$) pertencem ao usurio
SYS.
Tabelas X$
Normalmente no so consultadas diretamente; nem todas as
informaes so necessariamente teis, e os nomes de colunas
tendem a ser abreviados e obscuros.
As tabelas X$ so dinmicas, e seu contedo est constantemente
sendo modificado.
As vises V$, e as tabelas X$ que esto por trs delas, so
preenchidas na inicializao da instncia e limpas no shutdown.
Armazenam informaes de tempo se voc configurar o parmetro
TIMED_STATISTICS do init<SID>.ora para TRUE ou executar o
comando SQL:
Estatsticas de Sistema
Vises pertinentes a instncia/banco de dados:
V$PX_PROCESS_SYSSTAT: estatsticas de sistema de parallel query.
V$PROCESS: informaes sobre os processos atualmente ativos.
V$WAITSTAT: estatsticas de contenes.
V$SYSTEM_EVENT: total de esperas para eventos especficos.
Vises pertinentes a memria:
V$BUFFER_POOL_STATISTICS: alocao de buffer pools na instncia
(criada pelo script $ORACLE_HOME/rdbms/admin/catperf.sql).
V$DB_OBJECT_CACHE: objetos do banco de dados que esto em
cache no library cache.
V$LIBRARYCACHE: estatsticas de performance e atividade do library
cache.
V$ROWCACHE: atividade de hits e misses do data dictionary.
V$SYSSTAT: estatsticas bsicas da instncia.
Vises pertinentes a performance de disco:
V$FILESTAT: estatsticas de leitura/escrita em data files.
V$TEMPSTAT: informaes sobre estatsticas de leitura/escrita em
data files de tablespaces temporrias.
TargetTrust Treinamento e Consultoria 6
Utilitrios e Vises de Performance Dinmicas
Estatsticas de Sesso
V$LOCK: locks atualmente mantidos pelo servidor.
V$OPEN_CURSOR: cursores atualmente abertos e compilados
(parsed) para cada sesso.
V$SORT_USAGE: tamanho de segmentos temporrios e sesses que
os criaram; identificao dos processos que esto efetuando
ordenaes em disco.
V$SESSTAT: estatsticas da sesso do usurio.
V$SESSION_EVENT: informaes sobre as esperas por um evento
para uma sesso.
V$SESSION_WAIT: recursos ou eventos pelos quais as sesses ativas
esto aguardando.
V$PX_SESSTAT: informaes sobre as sesses utilizando execuo
em paralelo.
Exemplo:
SQL> SELECT *
name,
FROMclass,
v$sgastat;
value FROM v$sysstat;
POOL
NAME NAME CLASS VALUE BYTES
---------------------
------------ --------------------------
------- ----------------------
db block getsfixed_sga 8 7687 777556
consistent gets
buffer_cache 8 17547 8388608
physical reads
log_buffer 8 763 262144
sessionpool
shared uga memory
free memory 1 1312236 4192704
sessionpool
shared pga memory
pl/sql source 1 57634176 19576
sorts (memory)
shared pool sessions 64 497 1284644
sorts (disk)
shared pool sql area 64 013103560
sorts (rows) 64 605
SID EVENT
---------- -----------------------------------------------
250 queue messages
251 SQL*Net message from client
SQL> SELECT username, name, message
252 SQL*Net value from client
2 FROM v$statname
253 SQL*Net messages,from
n, v$session v$sesstat
client t
3 WHERE s.sid254
= t.sid
SQL*Net message from client
4 AND n.statistic# = t.statistic#
255 SQL*Net message from client
5 AND s.type 256
= 'USER'
SQL*Net message from client
6 AND s.username is not
257 wait fornull
unread message on broadcast channel
7 AND n.name = 'session pga memory'
8 AND t.value > 1000000;
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.
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.
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:
Lista completa de eventos de espera, colocados em ordem de
importncia (os mais problemticos aparecem primeiro).
Informaes sobre os comandos SQL presentes atualmente
na Shared Pool. Vrias listas de comandos aparecem aqui,
ordenadas por nmero de execues, compilaes (parse calls),
buffers lidos e nmero de leituras. Listagens nessas ordens facilitam
a identificao dos comandos mais "caros" ao sistema, e aqueles
que devem ser analisados primeiro.
Estatsticas de segmentos de Undo.
Estatsticas da SGA. Duas listas: um resumo e uma lista detalhada
por rea da memria.
Valores iniciais dos parmetros do init<SID>.ora. Como
existem parmetros dinmicos no banco, no h garantias de que
esses sejam os valores usados atualmente.
SQL>
SQL> create table stats$begin_stats as select * from
@$ORACLE_HOME/rdbms/admin/utlbstat.sql
2 v$sysstat where 1=0;
SQL> create table stats$end_stats as select * from
2 stats$begin_stats;
Coletando Estatsticas
SQL>SQL>
create
@$ORACLE_HOME/rdbms/admin/utlestat.sql
insert
table
into
stats$stats
stats$end_latch
as select
select
e.value-b.value
* from v$latch;
2 change, n.name
3 from v$statname n, stats$begin_stats b, stats$end_stats e
4 where n.statistic# = b.statistic#
5 and n.statistic# = b.statistic#;
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
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 (least-
recently-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.
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;
11 rows selected.
SQL> Rem I/O should be spread evenly accross drives. A big difference between
SQL> Rem phys_reads and phys_blks_rd implies table scans are going on.
SQL> select table_space, file_name,
2 phys_reads reads, phys_blks_rd blks_read, phys_rd_time read_time,
3 phys_writes writes, phys_blks_wr blks_wrt, phys_wrt_tim write_time,
4 megabytes_size megabytes,
5 round(decode(phys_blks_rd,0,0,phys_rd_time/phys_blks_rd),2) avg_rt,
6 round(decode(phys_reads,0,0,phys_blks_rd/phys_reads),2) "blocks/rd"
7 from stats$files order by table_space, file_name;
Estatsticas de I/O
Este um exemplo da ltima seo do report.txt.
Viso V$EVENT_NAME
-----------------
SQL> SELECT event,------
total_waits,
--------
total_timeouts,
------ ----------
2 time_waited, average_wait
3 FROM v$system_event;
Viso V$SYSTEM_EVENT
latch free 5 5 5 1
EVENTtimer
pmon TOTAL_
932 TOTAL_535 254430
TIME_ 272.993562
AVERAGE_
process startup WAITS3 TIMEOUTS WAITED
8 2.66666667
WAIT
buffer busy waits 12 0 5 5
...
50 linhas selecionadas.
Viso V$SESSION_EVENT
Viso V$SESSION_WAIT
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.
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.
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:
Utilizar efetivamente a memria.
Minimizar o I/O de disco.
Prevenir a conteno de recursos.
Os dados exibidos em modo de tempo real podem ser gravados para
posterior consulta.
Voc pode definir novos grficos e exibir janelas contendo grficos de
vrias categorias.
Sete categorias diferentes de grficos pr-definidos esto disponveis para
exibio atravs do menu Display.
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
Utilitrios e Vises de Performance Dinmicas
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.
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?
4. Efetuando o Tuning da
Shared Pool
Objetivos
Efetuar o tuning do library cache e do data dictionary cache.
Medir o shared pool hit ratio.
Dimensionar a shared pool apropriadamente.
Fixar objetos na shared pool.
Efetuar o tuning do espao reservado da shared pool.
Descrever as consideraes de memria UGA e de sesso.
Configurar a large pool.
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
1 Meta
Reduza os misses mantendo a operao de parse em um nvel mnimo:
Garanta que os usurios possam compartilhar os comandos.
Evite que comandos sejam removidos da memria alocando espao
suficiente.
Evite invalidaes que induzem ao reparse.
2 Meta
Evite a fragmentao:
Reservando espao para grandes necessidades de memria.
Fixando em memria os objetos grandes freqentemente requeridos.
Eliminando grandes blocos PL/SQL annimos.
Reduzindo o consumo de memria UGA de conexes Shared Server.
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:
GETS (parse): o nmero total de requisies por informao sobre o
item correspondente.
PINS (execues): o nmero de execues de comandos SQL ou
procedures.
RELOADS (parse): se uma chamada de execute para um comando
SQL for feita e a shared SQL area contendo a representao do parse
do comando foi desalocada da library cache para fazer lugar para
outro comando ou porque os objetos que o comando referencia o
invalidaram, o servidor Oracle implicitamente recarrega o comando e
portanto efetua o reparse do mesmo. O nmero de reloads contado
para cada um dos NAMESPACE.
INALIDATIONS (parse): quando um objeto modificado, possvel
que haja um novo e melhor plano de execuo para todos os
comandos que utilizam o objeto. Por isso o servidor Oracle marca
todos os atuais planos de execuo para esse objeto como invlidos.
SQL> SELECT *
2 FROM v$sgastat;
40 linhas selecionadas.
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.
V$SQLAREA: estatsticas completas sobre todos os cursores
compartilhados, e os primeiros 1000 caracteres do comando SQL.
V$SQL: lista as estatsticas de Shared SQL Areas e contm uma linha
para cada filho do texto SQL original. similar a V$SQLAREA, porm
sem a clusula GROUP BY que torna essa lenta ao consultar.
V$SQLTEXT: texto SQL completo, em mltiplas linhas.
V$DB_OBJECT_CACHE: objetos do banco de dados que esto no
cache, incluindo packages; tambm objetos como tabelas e
sinnimos, onde estes so referenciados em comandos SQL.
V$LIBRARYCACHE: estatsticas sobre o gerenciamento do library
cache.
Experimente:
Melhorar o cdigo de aplicao. Isso pode no ser possvel se voc
no tiver acesso aos cdigos fontes.
Aumente o tamanho da Shared Pool.
Reloads devem:
Ser preferencialmente 0.
Nunca maiores do que 1% do nmero de PINS.
SQL> SELECT sum(pins) "Executions", sum(reloads)"Cache Misses",
2 sum(reloads)/sum(pins)
3 FROM v$librarycache;
Diretrizes
Se a proporo entre reloads e pins for maior que 1%, existem duas
razes possveis:
reas de parse compartilhadas foram removidas da memria (aged
out), embora sejam requeridas por sucessivas reexecues, devido a
falta de espao.
reas de parse foram invalidadas.
Para evitar reloads freqentes, aumente o parmetro SHARED_POOL_SIZE
do init<SID>.ora.
Tabela analisada.
SQL> SELECT *
2 FROM aluno.tclientes;
Invalidaes
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.
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 o total de espao livre na lista reservada.
AVG_FREE_SIZE o tamanho mdio da memria livre na lista
reservada.
MAX_FREE_SIZE o tamanho da maior parte de memria livre na
lista reservada.
REQUEST_MISSES o nmero de vezes que a lista fornecida no
possua um pedao de memria para satisfazer a
requisio, e procedeu o flushing (limpeza) dos
objetos a partir da lista LRU.
As seguintes colunas da viso contm valores que so vlidos mesmo se o
parmetro no estiver configurado:
REQUEST_FAILURES
LAST_FAILURE_SIZE
ABORTED_REQUEST_THRESHOLD
ABORTED_REQUESTS
LAST_ABORTED_SIZE
Onde:
REQUEST_FAILURES o nmero de vezes em que no foi
encontrada memria para satisfazer uma
requisio.
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.
Neste caso, diminua o valor de SHARED_POOL_RESERVED_SIZE.
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.
Quais objetos devem ser mantidos:
Objetos procedurais grandes freqentemente requisitados como as
packages STANDARD e DIUTIL, e aqueles para os quais a memria
compartilhada excede um threshold definido.
Triggers compiladas que so muito executadas em tabelas utilizadas
freqentemente.
Seqncias, uma vez que nmeros seqnciais so perdidos quando a
seqncia removida da shared pool.
Quando fix-los: no momento do startup o ideal, uma vez que evita
futuras fragmentaes.
A limpeza da shared pool utilizando o comando ALTER SYSTEM FLUSH
SHARED_POOL no elimina os objetos fixados.
Torna-se:
Viso V$ROWCACHE
Trs colunas importantes:
PARAMETER: nome do Data Dictionary Cache que est sendo
reportado.
GETS: exibe o nmero total de requisies por informaes no item
correspondente (por exemplo, na linha que contm estatsticas para
descries de arquivo, esta coluna possui o nmero total de
requisies por dados de descrio de arquivo).
GETMISSES: exibe o nmero de requisies de dados resultantes em
cache misses.
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.
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.
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.
Shared Server: alocando memria de sesso a partir da large pool
para o servidores compartilhados, o servidor Oracle pode utilizar a
shared pool primariamente para cache de shared SQL e evitar o
overhead de performance causado pelo desmembramento do shared
SQL cache.
Exerccios 4
5. Efetuando o Tuning do
Database Buffer Cache
Objetivos
Descrever como o buffer cache gerenciado.
Calcular o buffer cache hit ratio.
Examinar o impacto de adicionar ou remover buffers.
Criar mltiplos buffer pools.
Dimensionar mltiplos pools.
Monitorar a utilizao do buffer cache.
Efetuar o uso apropriado do cache de tabelas.
Diagnosticar a conteno de LRU latch.
Evitar a conteno da free list.
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:
No Oracle 10g, os buffer caches podem ser configurados com os
seguintes parmetros:
DB_CACHE_SIZE: define o tamanho do buffer default em bytes.
DB_KEEP_CACHE_SIZE: define o tamanho keep buffer pool em bytes.
DB_RECYCLE_CACHE_SIZE: define o tamanho do recycle buffer pool
em bytes.
Com essas configuraes os buffer pools em Oracle 10g podem ser
redimensionados dinamicamente.
O processo servidor efetua a leitura dos dados a partir dos datafiles
para o buffer cache. Para aumentar a performance, o processo
servidor algumas vezes efetua a leitura de mltiplos blocos em uma
nica leitura.
O processo DBWn escreve os dados a partir do buffer cache para os
data files. Para aumentar a performance, o DBWn escreve mltiplos
blocos em uma nica escrita.
Cada buffer no cache armazena um nico bloco do banco de dados.
Em um determinado momento, o buffer cache pode armazenar
mltiplas cpias de um nico bloco do banco de dados. Somente
uma cpia corrente do bloco existe, mas processos servidor podem
necessitar construir cpias de leitura consistente, utilizando
informaes de undo, para satisfazer consultas.
Os blocos no buffer cache so gerenciados utilizando duas listas:
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 Descrio
ID Nmero do buffer pool.
NAME Nome do buffer pool.
BLOCK_SIZE Tamanho do bloco para esse buffer.
RESIZE_STATE Estado atual da operao de resize (STATIC, ALLOCATING,
ACTIVATING ou SHRINKING).
Sistema alterado.
Consultando estatsticas
Para consultar as informaes fornecidas pelo recurso do Advisory,
verifique a viso V$DB_CACHE_ADVICE:
Coluna Descrio
ID Nmero do buffer pool (de 1 a 8).
NAME Nome do buffer pool.
BLOCK_SIZE 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.
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
Efetuando o Tuning do Database Buffer Cache
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.
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.
Mais memria pode ser necessria, porque existe a duplicao dos
blocos Oracle na memria: uma no cache do sistema operacional e
uma no database buffer cache.
Os blocos Oracle mantidos no cache do sistema operacional utilizam
memria que pode ser utilizada por blocos no Oracle.
Existe um overhead de CPU da cpia dos blocos a partir do cache do
sistema operacional para o database buffer cache.
Utilitrios de Diagnstico
Statistic
SQL> SELECT 1 - (phy.value - Total
lob.value - Per
dir.value)Per
/
2 ses.value "CACHETrans
HIT RATIO"Logon Second
--------------------------
3 FROM v$sysstat ses, -------
v$sysstat---------
lob, ---------
physical
4 reads 15,238
v$sysstat phy, v$sysstat dir13.0 15,238.0
physical
5 WHERE reads
ses.name
direct = 'session863
logical reads'
0.7 863.0
Physical
6 AND reads direct(lob)
dir.name = 'physical 0 0
reads direct' 0
session
7 ANDlogical
lob.name
reads = 'physical
119,376reads 101.8
direct119,376.0
(lob)'
8 AND lob.name = 'physical reads';
Aumentando o DB_CACHE_SIZE
Como regra geral, aumente DB_CACHE_SIZE sobre as seguintes
condies:
O cache hit ratio menor que 90%.
Existe memria adequada para outros processos, medida pela
quantidade de page faults.
O aumento anterior de DB_CACHE_SIZE foi efetivo.
DB_CACHE_SIZE
DB_RECYCLE_CACHE_SIZE
DB_KEEP_CACHE_SIZE
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).
CREATE INDEX{aluno.tdescontos_idx
BUFFER_POOL ... }
KEEP | RECYCLE | DEFAULT
STORAGE (BUFFER_POOL KEEP);
Clusula BUFFER_POOL
A clusula BUFFER_POOL utilizada para definir o buffer pool default para
um objeto. parte da clusula de STORAGE e vlida para os comandos CREATE
e ALTER de tabelas, clusteres e ndices. Os blocos de um objeto sem uma
configurao explcita de buffer pool vo para o buffer pool DEFAULT.
A sintaxe :
Tabela analisada.
SQL>
SQL> SELECT table_name, blocks
2 FROM dba_tables
3 WHERE owner = 'ALUNO'
4 AND 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.
Coluna Descrio
NAME Nome do buffer pool.
SET_MSIZE Tamanho mximo permitido.
CNUM_REPL Nmero atual de buffers em reposio.
CNUM_WRITE Nmero atual de buffers na lista de escrita.
CNUM_SET Nmero total atual de buffers para esse pool.
BUF_GOT Nmero de buffers reservados para esse pool.
SUM_WRITE Nmero de buffers escritos pelo DBWn nesse pool.
SUM_SCAN Nmero de buffers pesquisados pelo DBWn nesse pool.
FREE_BUFFER_WAIT Esperas por blocos livres nesse pool.
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:
Buffer Busy Waits: indica que mltiplos processos tentaram acessar
um mesmo buffer concorrentemente. Consulte a viso V$WAITSTAT
para verificar as estatsticas de espera de cada classe de buffer.
Classes que normalmente apresentam esperas so:
blocos de dados (data blocks): conteno em blocos de tabelas e
ndices (mas no nos cabealhos)
Verifique comandos SQL que utilizem ndices no seletivos.
Verifique a existncia de ndices right-hand (aqueles onde muitos
processos inserem no mesmo ponto do ndice).
Considere o uso de gerenciamento de espao automtico, ou o
aumento de free-lists, para evitar que mltiplos processos
insiram no mesmo bloco ao mesmo tempo.
A viso V$SESSION_WAIT informa o nmero de bloco e arquivo
(colunas P*) que esto causando conteno. Com isso pode-se
saber a quais objetos eles pertencem.
Cabealhos de Undo: mostra a conteno em cabealhos de
segmentos de undo.
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.
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.
Consulte a viso V$WAITSTAT:
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.
Mova o objeto para uma tablespace que utilize Automatic Segment
Space management.
SQL> CREATE
SQL> CREATE TABLESPACE
TABLE aluno.nova_tabela
aluno_data
22 DATAFILE
(ID NUMBER(10))
'/oracle/oradata/tuning/aluno_data01.dbf' SIZE 1M
33 EXTENT
TABLESPACE aluno_data;
MANAGEMENT LOCAL
4 SEGMENT SPACE MANAGEMENT AUTO;
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.
6. Efetuando o Tuning do
Redo Log Buffer
Objetivos
Determinar se processos esto aguardando por espao no redo log
buffer.
Dimensionar o redo log buffer apropriadamente.
Reduzir operaes de redo.
Tamanho
Valores maiores reduzem I/O para o log file, particularmente se
transaes forem longas ou numerosas, pois quanto menor for o
redo log buffer, mais rpido ser preenchido um tero de sua
capacidade (o que causa uma escrita de LGWR).
Comandos COMMIT freqentes iro limpar o buffer, levando desta forma a
um tamanho menor para o buffer.
Exemplo:
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
A viso V$SESSION_WAIT indica atravs do evento Log Buffer Space
se existem quaisquer esperas por espao no log buffer porque a
sesso est escrevendo dados para o log buffer mais rapidamente
que o LGWR pode escrev-los.
SQL>
SQL>SELECT
SELECTname,
name,value
value
2 2 FROM
FROMv$sysstat
v$sysstat
3 3 WHERE
WHEREname
name= ='redo
'redobuffer
log space
allocation
requests';
retries';
Nota: a viso V$SYSSTAT exibe outra estatstica, Redo Log Space Requests:
Esta estatstica indica que o log file ativo est cheio e o servidor Oracle
aguardando por alocao de espao em disco para entradas de redo. Espao
criado efetuando um log switch.
SECONDS_IN_WAIT
O tempo de espera (SECONDS_IN_WAIT) tambm deve ser zero.
Considere:
Aumentar o tamanho do log buffer se este estiver pequeno.
Mover os log files para discos mais rpidos como striped disks.
Investigaes Futuras
Investigue as razes porque o LGWR est lento em liberar buffers:
Existe conteno de I/O de disco nos redo log files. Verifique se os
redo log files esto armazenados em dispositivos rpidos e
separados.
Na viso V$SYSTEM_EVENT, o evento Log File Switch Completion
identifica eventos de espera devido a log switches.
Aumente o tamanho dos redo log files e/ou adicione novos grupos.
O DBWn no havia completado o checkpoint do arquivo quando o
LGWR necessitou do arquivo novamente. O LGWR teve que esperar.
Verifique no arquivo alert.log a existncia da mensagem
CHECKPOINT NOT COMPLETE.
Modo NOLOGGING
A opo NOLOGGING:
Aplica-se a tabelas, parties, tablespaces e ndices.
No registra modificaes para os dados no redo log buffer (algum
log mnimo ainda efetuado, para operaes como alocao de
extenses).
No especificado como um atributo a nvel de comando INSERT,
mas ao invs disso especificado na utilizao do comando ALTER
ou CREATE para a tabela, partio, ndice ou tablespace.
O modo configurado antes da carga e reconfigurado para LOGGING
quando a carga completada (se uma falha de mdia ocorrer antes
de um backup ser efetuado, ento todas as tabelas, parties e
ndices que foram modificados podem ficar corruptos).
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.
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.
7. Configurao do Banco de
Dados e Detalhes de I/O
Objetivos
Diagnosticar o uso inapropriado de tablespaces SYSTEM, TEMP, DATA
e INDEX.
Detectar problemas de I/O.
Garantir que arquivos sejam distribudos para minimizar conteno
de I/O.
Utilizar striping onde apropriado.
Efetuar o tuning de checkpoints.
Efetuar o tuning de I/O de processos DBWn.
Diretrizes de Performance
Voc pode melhorar a performance do banco de dados configurando os
discos.
Existem regras bsicas de performance:
Manter I/O de disco em um nvel mnimo.
Distribuir sua carga de disco atravs de dispositivos e controladoras.
Usar tablespaces temporrias quando apropriado.
A tabela acima exibe os componentes bsicos de disco e o throughput de
I/O de processos background.
Utilizao de Tablespace
Reserve a tablespace SYSTEM para objetos do dicionrio de dados.
Separe tabelas e ndices em tablespaces diferentes.
Crie tablespaces separadas para undo.
Armazene colunas LOB em tablespaces separadas.
Crie uma ou mais tablespaces temporrias. Crie grupos de
tablespaces temporrias.
Utilize Tablespaces Gerenciadas Localmente em sistemas OLTP.
Diretrizes
Cada banco de dados deve possuir tablespaces especficas para:
Objetos do dicionrio de dados.
Segmentos de undo.
Segmentos temporrios.
Tabelas.
ndices.
LOBs.
A maioria dos bancos de dados de produo possuem muito mais
tablespaces do que isto, mas o princpio separar dados de diferentes tipos e
com diferentes utilizaes para propsitos de administrao interna e backup.
A tablespace SYSTEM contm somente objetos do dicionrio de dados
criados pelo SYS. Nenhum outro usurio deve possuir permisso para criar
objetos nela.
Lembre-se que stored objects como packages e triggers de banco de
dados formam parte do dicionrio de dados.
Segmentos de undo devem utilizar tablespaces exclusivas (segmentos de
undo obrigatoriamente ficam em tablespaces de undo).
Quando voc cria usurios, voc aloca uma tablespace temporria para
quaisquer ordenaes em disco que sejam necessrias, ou para tabelas
temporrias. Estas reas de sort devem estar separadas de outros objetos do
banco de dados. Se o usurio no possuir uma tablespace temporria, as reas
de sort utilizam a tablespace SYSTEM.
Tabelas e ndices devem ser separados em tablespaces diferentes, uma
vez que ndices e tabelas freqentemente recebem inseres e leituras
simultaneamente.
Para aplicaes tipo OLTP com grande carga de trabalho, tablespaces
gerenciadas pelo dicionrio de dados causam problemas de conteno, porque
o dicionrio de dados deve ser acessado para operaes de gerenciamento de
espao, como alocao de extenses. Em tablespaces gerenciadas localmente
(Locally Managed Tablespaces), no h acesso ao dicionrio de dados nessas
operaes, e por isso menos conteno.
Gerenciando Tablespaces
Dois novos parmetros foram introduzidos no Oracle 9i que tem por
funcionalidade automatizar o armazenamento e gerenciamento de
tablespaces.
- 2k
- 4k
- 8k
- 16k
- 32k (depende do sistema operacional)
Diretrizes
Em geral para reduzir a atividade em um disco sobrecarregado,
mova um ou mais dos seus arquivos muito acessados para um disco
menos ativo.
Redo log files so escritos seqencialmente pelo processo LGWR.
Coloque os redo log files em um disco com nenhuma outra atividade
ou com pouca incidncia de leituras e escritas. O processo
background LGWR pode escrever muito mais rpido se no houver
atividade concorrente.
Se os usurios acessarem uma tabela grande concorrentemente, a
diviso (striping) atravs de data files e discos pode ajudar a reduzir a
conteno.
Tente eliminar o I/O no relacionado com Oracle nos discos que
contenham arquivos do banco de dados. Isto til tambm na
otimizao de acesso para redo log files e permite a voc monitorar
toda a atividade de data file nestes discos com a viso de
performance dinmica V$FILESTAT.
Conhecendo os tipos de operaes que predominam em sua aplicao e a
velocidade com a qual seu sistema pode processar os I/Os correspondentes,
voc pode escolher o layout de disco que ir maximizar a performance.
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:
Criando objetos com MINEXTENTS > 1, onde cada extenso
ligeiramente menor que os striped data files.
Alocando extenses para um arquivo explicitamente.
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
query e efetuando muitos full table scans, ento o striping manual pode valer a
pena.
NAME VALUE
------------------------------ ----------
table scans (short tables) 9697
table scans (long tables) 48
table scans (rowid ranges) 0
table scans (cache partitions) 0
table scans (direct read) 0
Os valores para table scans (long tables) e table scans (short tables)
esto relacionados com full table scans.
Se o nmero de table scans (long tables) for alto, ento um grande
percentual de tabelas foram acessadas sem ndice em lookups. Sua aplicao
pode necessitar de tuning ou ndices devem ser adicionados. Garanta que os
ndices apropriados estejam disponveis.
Estatsticas de I/O
SQL> SELECT d.tablespace_name TABLESPACE,
2 d.file_name,
3 f.phyrds,
4 f.phyblkrd,
5 f.readtim,
6 f.phywrts,
7 f.phyblkwrt,
8 f.writetim
9 FROM v$filestat f, dba_data_files d
10 WHERE f.file# = d.file_id
11 ORDER BY tablespace_name, file_name;
USERS /oracle/oradata/tuning/users01.dbf 22 22 0 9 9 1
Utilitrios de Diagnstico
SQL> SELECT *
ALTER SYSTEM ARCHIVE LOG ALL TO 'dir_name';
2 FROM v$archive_processes;
PROCESS STATUS LOG_SEQUENCE STAT
------- ------- ------------ ----
0 ACTIVE 122 BUSY
1 ACTIVE 0 IDLE
2 STOPPED 0 IDLE
Checkpoints
Checkpoints Incrementais causam:
Atualizao dos headers de control files por parte do CKPT.
Atualizao dos headers de control files e data files por parte do CKPT,
para checkpoints causados por log switches.
Checkpoints Completos causam:
Atualizao dos headers de control files e data files por parte do
CKPT.
DBWn grava todos os buffers presentes no Checkpoint Queue.
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.
Checkpoints normalmente permitem que outros trabalhos continuem ao
mesmo tempo, embora o checkpoint completo gere muitas escritas em disco.
Se o processo DBWR no houver terminado o checkpoint de um arquivo e o
LGWR necessitar o arquivo novamente, o LGWR ter que aguardar.
Checkpoints freqentes significam pouco tempo para o recovery da
instncia mas mais escritas pelo DBWR (para os data files) e pelo CKPT (para
os headers de data files). Sua escolha depende de sua prioridade relativa ao
tempo de recovery e performance de execuo.
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.
Parmetros de Inicializao
Aplique I/O slaves para processos DBWn, LGWR, ARCn e de backup
com:
DBWR_IO_SLAVES
BACKUP_TAPE_IO_SLAVES
Ligue ou desligue o I/O assncrono com:
DISK_ASYNCH_IO
TAPE_ASYNCH_IO
Os parmetros de inicializao DBWR_IO_SLAVES,
BACKUP_TAPE_IO_SLAVES controlam a aplicao de I/O slaves.
Voc pode ligar ou desligar o uso de I/O assncrono com os parmetros
DISK_ASYNCH_IO e TAPE_ASYNCH_IO. Pode ser necessrio desligar a facilidade
de I/O assncrono fornecida pelo sistema operacional. Por exemplo, se cdigo
de I/O assncrono da plataforma possuir bugs ou no for eficiente, I/O
assncrono pode ser desabilitado por tipo de dispositivo.
Normalmente o parmetro deve ser deixado com o valor default, ou seja,
TRUE.
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?
b. Existem objetos que no so do dicionrio de dados na tablespace
SYSTEM?
2. Descubra se checkpoints freqentes esto ocorrendo. Este tempo o
ideal? Se no for, qual seria?
3. Para simular atividade de usurio sobre o banco de dados, conecte-se
como ALUNO e execute o script lab07_1.sql. Monitore as estatsticas de
I/O.
Objetivos
Determinar um tamanho de bloco apropriado.
Otimizar a utilizao de espao dentro de blocos.
Detectar e resolver migrao de linhas.
Monitorar e efetuar o tuning de ndices.
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
Vantagens
Blocos pequenos reduzem a conteno de bloco, uma vez que
existem poucas linhas por bloco.
Blocos pequenos so excelentes para linhas pequenas.
Blocos pequenos so ideais para acesso aleatrio, uma vez que
pouco provvel que um bloco seja reutilizado aps ter sido lido em
memria, um tamanho de bloco pequeno torna mais eficiente o uso
do buffer cache. Isto especialmente importante quando os recursos
de memria forem escassos, porque o tamanho do database buffer
cache limitado.
Desvantagens
Blocos pequenos possuem um overhead relativamente grande.
Voc pode acabar armazenando somente um nmero pequeno de
linhas por bloco, dependendo do tamanho da linha. Isto pode causar
I/Os adicionais.
Blocos pequenos podem causar a leitura de mais blocos de ndices.
Vantagens
Existe relativamente menos overhead e desta forma mais espao
para armazenar dados teis.
Blocos grandes so ideais para leituras seqnciais.
Blocos grandes so ideais para linhas muito grandes.
Blocos grandes melhoram a performance de leitura de ndices.
Blocos grandes podem armazenar mais entradas de ndice em cada
bloco, o que reduz o nmero de nveis (levels) em grandes ndices.
Poucos nveis de ndice significam poucos I/Os ao atravessar os
ramos (branches) de ndices.
Desvantagens
Um tamanho de bloco grande no o ideal para blocos de ndices
utilizados em um ambiente do tipo OLTP, porque aumentam a
conteno de bloco nos blocos folha (leaf) do ndice.
Espao no buffer cache ser desperdiado se voc estiver efetuando
acessos randmicos para pequenas linhas e possuir um tamanho de
bloco grande. Por exemplo, com um tamanho de bloco de 8K e um
tamanho de linha de 50 bytes, voc estaria desperdiando 7,950
bytes no buffer cache ao efetuar acesso randmico.
Se voc redimensionar blocos do banco de dados e no existir memria
adicional, voc pode necessitar reconfigurar o parmetro DB_CACHE_SIZE. Isto
afetar o percentual de cache hits.
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.
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.
Statistic
SQL> ANALYZE TABLE aluno.tcursos
Total Per
COMPUTE
transaction
STATISTICS;
------------------------- ----- ---------------
Tabelafetch
table analisada.
continued row 495 .02
NUM_ROWS CHAIN_CNT
---------- ----------
65 25
tabelas que so atualizadas devem possuir seu PCTFREE configurado de forma
que exista espao suficiente dentro dos blocos para atualizaes.
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.
create
SQL> analyze
table CHAINED_ROWS
table aluno.tcursos
( list chained rows;
Table
owner_name
analyzed. varchar2(30),
table_name varchar2(30),
SQL>
cluster_name
select owner_name,
varchar2(30),
table_name, head_rowid
2partition_name
from chained_rows
varchar2(30),
3head_rowid
where table_namerowid,
= 'TCURSOS';
analyze_timestamp date);
OWNER_NAME TABLE_NAME HEAD_ROWID
---------- ---------- ------------------
ALUNO TCURSOS AAAA1uAAHAAAAA1AAA
ALUNO TCURSOS AAAA1uAAHAAAAA1AAB
Tabela analisada.
Estatsticas de Tabelas
Consulte as estatsticas de tabela aps executar o comando analyze:
Voc pode analisar as caractersticas de armazenamento de tabelas,
ndices e clusters para coletar estatsticas, que so ento armazenadas no
dicionrio de dados. Voc pode utilizar estas estatsticas para determinar se
uma tabela ou ndice possui espao no utilizado.
Consulte a viso DBA_TABLES para visualizar os resultados das
estatsticas.
Colunas Descrio
NUM_ROWS Nmero de linhas da tabela
BLOCKS Nmero de blocos abaixo da high water mark da
tabela
EMPTY_BLOCKS Nmero de blocos acima da high water mark da
tabela
AVG_SPACE Mdia de espao livre nos blocos abaixo da high
water mark
AVG_ROW_LEN Tamanho mdio das linhas, incluindo o row overhead
CHAIN_CNT Nmero de linhas migradas ou encadeadas na tabela
AVG_SPACE_FREELIST_BLOC A mdia de espao livre em todos os blocos de uma
KS freelist.
NUM_FREELIST_BLOCKS Nmero de blocos em uma freelist.
EMPTY_BLOCKS representa os blocos que ainda no foram utilizados, e
no os blocos que estavam preenchidos e agora esto livres.
free_blocks(
declare
unused_space(
owner
segmento_owner
segment_owner
varchar2(30);
IN
INvarchar2,
varchar2,
name
segment_name
varchar2(30);
IN varchar2,
seg_type varchar2(30);
segment_type IN varchar2,
tblock
total_blocks
freelist_group_id
number;
OUT number,
IN number,
...free_blks
total_bytesOUT
OUTnumber,
number,
begin
unused_blocks
scan_limit IN number
OUT number,
DEFAULT NULL)
dbms_space.unused_space
unused_bytes OUT number,
last_used_extent_file_id
('&owner','&table_name','TABLE',
OUT number,tblock,
last_used_extent_block_id
tbyte, ublock, ubyte, OUT
lue_fid,
number,
lue_bid,
last_used_block
lublock); OUT number);
dbms_output.put_line (...
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:
UNUSED_SPACE retorna informaes sobre o espao no utilizado em
um objeto (tabela, ndice ou cluster). Sua especificao :
FREE_BLOCKS retorna informaes sobre blocos livres em um objeto
(table, index ou cluster). Sua especificao :
Estas procedures so criadas e documentadas atravs do script
dbmsutil.sql que executado pelo catproc.sql. Ao executar esta package, voc
deve fornecer um valor para o FREE_LIST_GROUP_ID. Utilize o valor 1, a menos
que esteja utilizando Real Application Cluster.
Reorganizao de ndices
Monitorando ndices
Voc pode monitorar o espao utilizado por ndices utilizando o comando:
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:
PARALLEL ou NOPARALLEL (NOPARALLEL o default).
RECOVERABLE ou UNRECOVERABLE (RECOVERABLE o default).
UNRECOVERABLE mais rpido porque no escreve entradas de redo
log quando o ndice criado ou reconstrudo.
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.
9. Otimizando Operaes de
Sort
Objetivos
Identificar as operaes SQL que necessitam de ordenaes.
Garantir que ordenaes sejam efetuadas em memria quando
possvel.
Reduzir o nmero de I/Os necessrios para sort runs.
Alocar espao temporrio apropriadamente.
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.
SQL>SQL> SELECT
EXECUTE name, value
DBMS_STATS.gather_table_stats('ALUNO', 'TCONTRATOS');
PL/SQL2 Procedure
FROM v$sysstat
sucessfully completed.
3 WHERE name = 'sorts (rows)';
NAME VALUE
---------------------------------------- ----------
sorts (rows) 280150
290350
Execuo de DBMS_STATS
A package DBMS_STATS til para a coleta de estatsticas sobre tabelas,
ndices e clusteres, para ajudar o otimizador baseado em custo (CBO) a definir
os melhores planos de execuo. Ela ordena os dados para fornecer
informaes sumarizadas.
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:
parte da PGA quando se estiver conectado com um servidor
dedicado.
parte da shared pool quando se estiver conectado com Shared
Server.
Nota: uma aplicao efetuando grandes ordenaes no deve utilizar
Shared Server.
Parmetros
SORT_AREA_SIZE
A rea de sort dimensionada com o parmetro do init<SID>.ora
SORT_AREA_SIZE.
Pode ser configurada dinamicamente utilizando o comando ALTER
SESSION ou ALTER SYSTEM DEFERRED.
O valor default dependente de sistema operacional.
O default normalmente est adequado para a maioria das operaes
OLTP. Ajuste este parmetro para aplicaes DSS, batch jobs ou
grandes operaes.
SORT_AREA_RETAINED_SIZE
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:
Uma vez a rea de SORT_AREA_SIZE, em bytes, para o sort ativo.
Duas vezes o tamanho especificado por SORT_AREA_RETAINED_SIZE,
para os join sorts.
Parallel Query Process
Tamanhos
Normalmente, SORT_AREA_SIZE e SORT_AREA_RETAINED_SIZE devem ser
configurados para o mesmo valor, a menos que:
Voc esteja com muito pouca memria.
Voc esteja utilizando servidor multi-threaded.
Ou Segmento de Sort...
Criado no momento da primeira operao de sort que utilizou a
tablespace.
Removido quando o banco de dados fechado.
Cresce a medida que solicitaes forem efetuadas.
Composto de extenses, cada qual podendo ser utilizada por
diferentes operaes de sort.
Descrito em uma estrutura da SGA chamada de Sort Extent Pool
(SEP) (quando um processo necessita espao de ordenao, procura
por free extents no SEP).
Diagnosticando Problemas
Algumas vezes, voc pode ser capaz de evitar sorts se os dados
processados j foram previamente ordenados.
Quando sorts no so muito grandes, uma rea de sort muito
pequena resulta em overheads de performance devido ao swapping
para disco; garanta que operaes de sort ocorram em memria.
O uso de grandes pedaos de memria para ordenao pode resultar
em paging e swapping, e reduzir a performance global do sistema.
A alocao e liberao de segmentos temporrios ocorrem
freqentemente em tablespaces permanentes.
Metas de Tuning
Evitar operaes de sort que no sejam necessrias.
Otimizar a memria de sort e o overhead de disco.
Eliminar chamadas de alocao de espao para alocar e liberar
segmentos temporrios.
Evitando Ordenaes
Evite operaes de sort sempre que possvel:
Utilize a clusula NOSORT para criar ndices.
Utilize UNION ALL ao invs de UNION.
Utilize acesso indexado para joins.
Crie ndices em colunas referenciadas na clusula ORDER BY.
Selecione as colunas para anlises.
Utilize ESTIMATE ao invs de COMPUTE para grandes objetos.
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:
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.
SQL> SELECT *
2 FROM v$sysstat
3 WHERE name like '%sorts%';
Utilitrios de Diagnstico
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.
Viso V$SORT_SEGMENT
Esta viso contm informaes sobre cada segmento de sort de
tablespaces TEMPORARY na instncia.
Coluna Descrio
CURRENT_USERS Nmero de usurios ativos
TOTAL_EXTENTS Nmero total de extenses
USED_EXTENTS Extenses atualmente alocadas para ordenaes
EXTENT_HITS 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
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.
Selecione valores para INITIAL e NEXT como inteiros mltiplos de
SORT_AREA_SIZE, permitindo um bloco extra para o header do
segmento.
Se estiver sendo usada PGA_AGGREGATE_TARGET, ento use a
opo AUTOALLOCATE na tablespace.
Configure PCTINCREASE para 0.
Nota: se estiver sendo usada uma tablespace gerenciada localmente, o
parmetro PCTINCREASE no pode ser configurado. E se ainda for configurado
ATUOALLOCATE, ento tambm no haver INITIAL ou NEXT.
Benefcios
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.
10. Latches
Objetivos
Descrever latches e seus usos.
Descrever os diferentes tipos de requisies por latches.
Diagnosticar conteno em latches.
Identificar formas de minimizar a conteno em 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
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.
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.
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:
shared pool: protege alocaes de memria na shared pool.
library cache: usado para localizar comandos SQL na shared pool.
cache buffer LRU chain: protege a lista LRU do buffer cache.
cache buffers chain: necessrio quando procura-se por blocos de
dados em cache na SGA.
redo allocation: gerencia a alocao de espao de redo no log buffer
para entradas de redo.
redo copy: usado para escrever registros de redo no redo log buffer.
Objetivos
Descrever o conceito de gerenciamento automtico de undo.
Criar e manter a tablespace de undo gerenciada automaticamente.
Utilizar as vises de performance dinmica para verificar a
performance de segmentos de undo.
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:
init<SID>.ora:
...
UNDO_MANAGEMENT=AUTO
UNDO_TABLESPACE=UNDO_TBS
--------------------------------
Na criao do banco:
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:
ALTERTABLESPACE
DROP SYSTEM SETnome_undo_ts;
UNDO_TABLESPACE = nova_undo_ts;
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.
11 rows selected.
Identificao:
- SEGMENT_ID
- SEGMENT_NAME
Localizao, tipo e status:
- TABLESPACE_NAME
- OWNER (PUBLIC ou SYS)
- STATUS (ONLINE ou OFFLINE)
Para obter informaes sobre todos os segmentos de undo no banco de
dados, consulte a viso DBA_ROLLBACK_SEGS:
A coluna OWNER especifica o tipo de um segmento de undo:
12 rows
TargetTrust selected.
Treinamento e Consultoria 8
Tuning de Segmentos de Undo
Viso V$UNDOSTAT
Utilize a viso V$UNDOSTAT para monitorar a alocao de espao e
utilizao de segmentos de undo automticos. Cada linha dessa viso guarda
informaes estatsticas sobre um intervalo de 10 minutos da instncia. Essa
viso pode ser usada para estimar a quantidade de espao para redo
necessria para a carga atual de trabalho do sistema.
Transaes
Voc pode ser capaz de reduzir algum desperdcio de segmento de undo
treinando usurios e desenvolvedores a fazerem o seguinte:
Usurios devem comitar seu trabalho regularmente.
Desenvolvedores no devem codificar transaes longas
desnecessariamente.
Causas Possveis
Uma transao no pode utilizar mltiplos segmentos de undo e pode
falhar se no existir espao suficiente no segmento de undo. Isto pode ser
causado pela seguinte situao:
Soluo
Aumente o espao disponvel para a tablespace:
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:
Soluo
Erros de leitura consistente podem ser minimizados garantindo que as
tablespaces de undo possuam espao suficiente para as transaes do usurio.
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?
Objetivos
Identificar os papis do DBA no tuning de aplicao.
Conhecer os modos de otimizao do Oracle.
Utilizar ferramentas Oracle para diagnosticar performance de
comandos SQL.
Rastrear e registrar a utilizao de mdulos para packages,
procedures e triggers.
Identificar comandos SQL alternativos para incrementar a
performance.
Viso Geral
Tuning de aplicao a parte mais importante do tuning.
Administradores de banco de dados:
Podem no ser diretamente envolvidos no tuning de aplicao.
Devem estar familiarizados com o impacto que comandos SQL
escritos de forma despreocupada podem ter sobre a performance do
banco de dados.
O design da aplicao e o tuning da aplicao devem fornecer os
melhores benefcios de performance. O mtodo pelo qual os dados so
selecionados e a quantidade de dados que so selecionados possuem srias
implicaes sobre a performance da aplicao se os comandos que executam
estas operaes no forem corretamente escritos.
Modos de Otimizao
Rule-based (baseado em regra).
Utiliza um sistema de ranking.
Dirigido pela sintaxe.
Cost-based (baseado em custo).
Escolhe o caminho de menor custo.
Dirigido por estatsticas.
Parmetro OPTIMIZER_MODE
O valor default ALL_ROWS.
Hints de Otimizao
Voc pode codificar hints em um comando, como mostrado abaixo:
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.
EXPLAIN PLAN: executado dentro de uma sesso para um comando
SQL e gera os resultas na tabela PLAN_TABLE.
SQLTRACE: este utilitrio fornece informaes detalhadas relativas a
execuo de um comando SQL.
TKPROF: este um utilitrio do sistema operacional que obtm os
resultados a partir de uma sesso SQLTRACE e os coloca em uma
forma legvel.
AUTOTRACE: gera um plano de execuo para um comando SQL e
fornece estatsticas relativas ao processamento do comando.
Explain Plan
Pode ser utilizado sem a opo de tracing.
Necessita da tabela PLAN_TABLE, criada pelo script utlxplan.sql.
Modificaes podem invalidar o plano.
Voc pode utilizar o comando EXPLAIN no SQL*Plus sem utilizar a opo
de tracing. Voc deve criar a tabela chamada PLAN_TABLE utilizando o script
fornecido utlxplan.sql. As colunas teis para a maioria dos propsitos so
OPERATION, OPTIONS e OBJECT_NAME.
Para visualizar o plano para uma consulta, utilize a seguinte sintaxe:
MAX_DUMP_FILE_SIZE
TIMED_STATISTICS = n
= true
USER_DUMP_DEST = diretrio
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:
Utilizar o comando ALTER SESSION, que resulta em trace durante
toda a sesso ou at que o valor seja configurado para FALSE.
Utilizar a procedure PL/SQL DBMS_SESSION para a sesso.
Utilizar a procedure PL/SQL DBMS_SYSTEM para habilitar o trace em
nvel de sesso para um usurio diferente do usurio conectado.
tkprof ora_19999.trc
$ tkprof tracefile outputfile
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 Descrio
TRACEFILE Nome do arquivo de trace
OUTPUTFILE Nome do arquivo formatado
SORT=option A ordem pela qual deve-se ordenar os comandos
PRINT=n Exibe os primeiros n comandos
EXPLAIN=username/passw Executa o EXPLAIN PLAN no usurio especificado
ord
INSERT=filename Gera comandos INSERT
SYS=NO Ignora comandos SQL recursivos executados como
usurio sys
AGGREGATE=[Y | N] Se voc especificar AGGREGATE=N, ento o TKPROF
no agregar mltiplos usurios do mesmo texto
SQL
RECORD=filename Registra os comandos encontrados no arquivo de
trace
TABLE=schema.tablename Coloca o plano de execuo na tabela especificada
(ao invs do default PLAN_TABLE)
@$ORACLE_HOME/rdbms/admin/utlxplan
SQL> set
@$ORACLE_HOME/sqlplus/admin/plustrce
autotrace [on | traceonly]
Autotrace
Crie a tabela PLAN_TABLE:
Crie a role plus_trace:
Configure o Autotrace:
O AUTOTRACE pode ser utilizado ao invs do SQL Trace. A vantagem em
utilizar o autotrace que voc no precisa formatar um arquivo de trace
podendo exibir automaticamente o plano de execuo para o comando SQL.
Entretanto, o autotrace efetua o parse e o execute do comando, enquanto
que o explain plan somente efetua o parse.
Os passos para utilizar o AUTOTRACE consistem de:
1. Criar a tabela PLAN_TABLE utilizando o script utlxplan.sql.
2. Efetuar o grant da role de trace para o usurio executando o script
plustrce.sql. Isto concede privilgios de SELECT para as vises V$.
3. Habilitar o trace:
Se voc configurar AUTOTRACE ON, ser produzido o result set, o
explain plain e a lista com estatsticas.
Se voc configurar AUTOTRACE TRACEONLY, ser exibido o explain
plain e as estatsticas.
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.
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
Registrando um Mdulo
SET_MODULE(module, action)
SET_ACTION(action)
SET_CLIENT_INFO(client)
O Oracle fornece na package DBMS_APPLICATION_INFO as procedures
apresentadas a seguir. Quando uma aplicao efetua uma chamada destas
procedures, estas registram informaes sobre a chamada nas vises
V$SESSION e V$SQLAREA.
Procedure Descrio
SET_MODULE(module, Configura o nome do mdulo e, opcionalmente, a ao
action) (dispare esta procedure no incio de cada mdulo)
SET_ACTION(action) 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 o nome do mdulo, com at 48 caracteres, sendo
armazenado na V$SQLAREA.
action o nome, ou descrio, da ao. Pode ser at 32
caracteres e armazenada na V$SQLAREA.
client_info contm informaes adicionais, com at 64 caracteres.
armazenado na V$SESSION.
Rastreando um Mdulo
READ_MODULE(module, action)
READ_CLIENT_INFO(client)
O Oracle fornece na package DBMS_APPLICATION_INFO as duas
procedures apresentadas abaixo. Quando uma aplicao executa estas
procedures, as informaes so obtidas a partir das vises V$SESSION e
V$SQLAREA.
Procedure Descrio
Recupera os nomes do ltimo mdulo e
READ_MODULE(module,
ao configurados por SET_ACTION ou
action)
SET_MODULE
Recupera a ltima informao de cliente
READ_CLIENT_INFO(action)
configurada para a sesso
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.
Objetivos
Utilizar os mtodos de acesso a dados disponveis para efetuar o
tuning do design lgico do banco de dados.
Identificar as demandas de sistemas de processamento de
transaes online (OLTP).
Identificar as demandas de sistemas de suporte a deciso (DSS).
Reconfigurar sistemas temporariamente para atender a
necessidades especficas.
Viso Geral
Requisitos
Alta disponibilidade (7 dias/24 horas)
Alta velocidade.
Alta concorrncia.
Tempo de recovery reduzido.
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.
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.
ndices Comprimidos
Comprimindo um ndice:
ndices Bitmap
Consideraes de Performance
Utilizam pouco espao para armazenamento: uma entrada para cada
valor de chave distinto, armazenada de forma comprimida. Cada
bitmap dividido em segmentos bitmap de at 1/2 bloco.
Operam muito rpido com mltiplos predicados sobre colunas de
baixa cardinalidade.
ndices bitmap so particularmente adaptados para sistemas
grandes e somente de leitura, como os DSSs.
Comandos DML reduzem a performance: ndices bitmap no so
eficientes em aplicaes OLTP.
Lock efetuado em nvel de segmento bitmap, e no a nvel de
entrada.
Parallel Query, PDML (Parallel Data Manipulation Language) e
CREATE paralelizado trabalham com ndices bitmap.
Consideraes de Manuteno
Em um ambiente DSS, os dados normalmente sofrem manuteno atravs
de grandes inseres e atualizaes. A manuteno de ndices adiada at o
final de cada operao DML. Por exemplo, se voc inserir 1000 linhas em uma
tabela que possui um ndice bitmap, a informao da coluna bitmap e a
informao das linhas inseridas so colocadas no buffer de sort e ento a
atualizao de todas as 1000 entradas de ndice so agrupadas. Por isto que o
SORT_AREA_SIZE deve ser configurado corretamente para obter-se uma
performance satisfatria em inseres e atualizaes em ndices bitmap. Desta
forma cada segmento bitmap atualizado somente uma vez para cada
operao DML, mesmo se mais de uma linha daquele segmento for
modificada.
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.
SQL> CREATE
SELECT index_name,
UNIQUE INDEXindex_type
aluno.tcontratos_id_idx
2 FROM
ON aluno.tcontratos(id)
dba_indexes REVERSE
3 WHERE
TABLESPACE
ROWNUM
indx;
< 10;
INDEX_NAME
SQL> ALTER INDEX aluno.tcontratos_id_idx
INDEX_TYPEREBUILD
------------------------------
2 REVERSE; ---------------
TCLIENTES_ESTADO_IDX BITMAP
TDS_CLASSE_PK NORMAL
TCONTRATOS_ID_IDX NORMAL/REV
Viso do Dicionrio
Utilize a seguinte consulta para listar os nomes de todos os ndices de
chave reversa:
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:
O valor da chave primria.
Os valores das outras colunas para a linha correspondente.
Benefcios de Performance
No existe a duplicao dos valores para a coluna da chave primria
(colunas de ndice e tabela em tabelas indexadas) menos
requisitos de storage.
Tabelas index-organized fornecem acesso baseado na chave mais
rpido para consultas envolvendo correspondncia exata ou
pesquisa de intervalos, ou ambas.
SELECT *
CREATE INDEX diferenca_contrato_idx
upper_nome_idx
ON tcontratos
FROM
tclientes
tclientes
tcontratos
(UPPER(nome))
(total-desconto)
TABLESPACE
WHERE UPPER(nome)
total indx;
- desconto
= 'ANA
> 1000;
MARIA';
Exemplo 2:
O ndice criado com o seguinte comando:
Pode facilitar consultas como:
Vises do Dicionrio
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
I/O de disco reduzido e o tempo de acesso melhorado para joins
das tabelas clusterizadas.
Cada valor da chave do cluster armazenado somente uma vez para
todas as linhas do mesmo valor chave: portanto, utilizam menos
espao.
Consideraes de Performance
Full table scans so geralmente mais lentos em tabelas clusterizadas do
que em tabelas no clusterizadas.
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.
CREATE ORA-14400:
TABLE vendasInserted partition key is beyond highest legal
partition NUMBER(5),
(conta key.
cliente VARCHAR2(30),
quantidade NUMBER(8),
semana NUMBER(2))
PARTITION BY RANGE (semana)
(PARTITION P1 VALUES LESS THAN (4) TABLESPACE data0,
PARTITION P2 VALUES LESS THAN (8) TABLESPACE data1,
...
PARTITION P13 VALUES LESS THAN (53) TABLESPACE data12);
Regras:
Parties sem atributos fsicos, herdam atributos da tabela.
No existe uma partio que aceite "outros valores", como
MAXVALUE faz em parties de intervalo. Se for inserido um valor
fora de qualquer partio, o erro ORA-14400 ocorre.
Acessos s Parties
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.
Tabela analisada.
Tabela analisada.
Vises do Dicionrio
*_HISTOGRAMS: histogramas para tabelas normais.
*_TAB_COLUMNS: informaes sobre buckets.
*_PART_HISTOGRAMS: histogramas para as parties de tabelas.
Alocao de Espao
Evite a sobrecarga de performance devido a alocao dinmica de
espao: aloque espao explicitamente para tabelas, clusters e
ndices.
Verifique os padres de crescimento regularmente, para encontrar a
taxa na qual as extenses esto sendo alocadas, de forma que voc
possa planejar a criao de extenses.
Indexao
A indexao crtica para a recuperao de dados em sistemas
OLTP. Comandos DML sobre tabelas indexadas necessitam de
manuteno de ndices, e isto um overhead significativo na
performance. Desta forma sua estratgia de indexao deve estar
prxima da necessidade real da aplicao.
A indexao de chaves estrangeiras permite a modificao dos
dados filhos sem bloquear os dados pais.
Indexao b-tree preferida ao invs de indexao bitmap, por
causa dos locks afetando as operaes DML: quando uma entrada de
ndice b-tree bloqueada, uma nica linha fica bloqueada, enquanto
que quando uma entrada de ndice bitmap bloqueada, um
intervalo inteiro de linhas fica bloqueado.
ndices de chave reversa previnem a freqente diviso de blocos b-
tree para colunas seqnciais. Tambm tornam aplicaes com o
Real Application Cluster mais rpidas.
Voc necessita reconstruir ndices regularmente, como sugerido
anteriormente.
Index-Organized Tables
IOTs fornecem acesso mais rpido a dados.
Constraints de Integridade
Se existir uma escolha entre manter a lgica da aplicao em cdigo
procedural ou utilizar constraints declarativas, tenha em mente que
constraints possuem sempre menor custo de processamento. Constraints de
integridade referencial e CHECK so os principais tipos a considerar aqui.
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:
EXACT (default): compartilha apenas cursores com comandos SQL
idnticos.
SIMILAR: compartilha cursores se a troca de literais por variveis
bind resulte no mesmo plano de execuo que seria gerado se o
valor EXACT estivesse sendo usado.
FORCE: compartilha cursores trocando literais por variveis bind,
mesmo que o plano de execuo no seja o mesmo.
DB_BLOCK_SIZE e
DB_FILE_MULTIBLOCK_READ_COUNT
Voc normalmente deve configurar o parmetro DB_BLOCK_SIZE para o
valor mximo suportado para a sua plataforma. Mesmo se isto significar a
recriao de um grande banco de dados, isto quase certamente vale a pena,
porque um tamanho de bloco maior facilita operaes de leitura intensivas que
so caractersticas de aplicaes DSS.
Dispense uma ateno particular para a configurao do parmetro
DB_FILE_MULTIBLOCK_READ_COUNT. Este determina, durante full table scans,
quantos blocos do banco de dados sero lidos com uma nica chamada de
leitura ao sistema operacional.
Um valor maior fornece um custo de table scan menor e favorece table
scans sobre ndices.
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:
Dispensar completamente o uso de ndices.
Mant-los somente para algumas tabelas que so acessadas
seletivamente.
Regularmente gerar histogramas para aquelas com distribuio de
dados no uniforme.
Escolher ndices bitmap para consultas em colunas com poucos
valores distintos. Eles oferecem acesso para recuperao muito mais
rpido.
Utilize tabelas index-organized para acesso rpido aos dados da
tabela baseado na chave para consultas envolvendo
correspondncia exata e/ou pesquisa de intervalos e recuperao
completa da linha de dados.
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
acesso em linhas que foram geradas recentemente. Ela oferece partition scan
ao invs de full table scan.
Tempo de Parse
provvel que o tempo gasto para efetuar o parse de comandos SELECT
seja uma proporo muito pequena do tempo gasto para executar a consulta.
O tuning do library cache muito menos importante para DSS do que para
OLTP.
Sua prioridade um caminho de acesso excelente no plano de execuo;
pequenas variaes podem custar minutos ou horas. Os desenvolvedores
devem:
Utilizar consultas paralelizadas que permitem que mltiplos
processos trabalham simultaneamente para processar um nico
comando SQL.
Configuraes com Symmetric Multiprocessors (SMP), clustered ou
Massively Parallel Processing (MPP) obtm os maiores benefcios de
performance, porque a operao pode ser efetivamente dividida
atravs de vrias CPUs em um nico sistema.
Utilize o comando EXPLAIN PLAN para efetuar o tuning de comandos
SQL, e hints para controlar os caminhos de acesso.
Se sua lgica de aplicao utiliza variveis bind, voc perde os benefcios
desta caracterstica: o otimizador efetua uma suposio geral sobre a
seletividade da coluna, enquanto que com literais, o otimizador baseado em
custo utiliza histogramas.
Exemplo: se voc enviar o seguinte comando, o valor de :1 no
conhecido quando o otimizador determina o plano de execuo.
Sistemas Hbridos
OLTP DSS
Necessita de mais ndices Efetua mais full table scans
ndices B-Tree ndices bitmap
ndices de chave reversa Tabelas IOT
PCTFREE de acordo com a atividade de PCTFREE pode ser configurado para 0,
atualizao esperada se houver recriao da tabela
atualizada
Cdigo compartilhado com variveis Literais e hints
bind
ANALYZE em ndices Gerao de histogramas
CURSOR_SHARING = similar CURSOR_SHARING = exact
Detalhes
OLTP necessita de mais ndices que DSS. Eles no utilizam
necessariamente os mesmos tipos de ndices devido s
caractersticas de DML/OLTP e consultas/DSS.
OLTP no deve utilizar parallel query, enquanto que DSS necessita
dela.
DSS necessita de blocos de dados com espao bem aproveitado para
obter excelentes full table scans. Linhas individuais geralmente no
sero atualizadas em um ambiente DSS. Portanto, o PCTFREE deve
ser configurado para 0 para bancos de dados DSS onde um PCTFREE
de 0 para OLTP causaria a migrao das linhas.
O Otimizador Baseado em Custo considera as estatsticas de
histogramas quando consultas utilizam literais e no variveis bind.
OLTP deve utilizar variveis bind, DSS no. Isto significa que a coleta
de estatsticas para histogramas uma perda de tempo e consumo
de recursos para transaes OLTP.
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:
Objetivos
Descrever os principais passos de tuning do sistema operacional.
Identificar similaridades entre o tuning do sistema operacional e do
banco de dados.
Explicar a diferena de um processo contra uma thread.
Descrever paging e swapping.
Introduo
Configuraes Multi-CPU
Paging e Swapping
Tuning de Memria
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.
Diretrizes
Quando estiver efetuando tuning da utilizao de CPU, o administrador do
sistema deve preocupar-se principalmente se:
Existem recursos de CPU adequados? O administrador do sistema
garante que a CPU no esteja muito ocupada. Como regra geral, se a
CPU estiver 90% do tempo ocupada, ento existem possibilidades de
atingir sua capacidade.
Existe uma boa proporo entre processamento do sistema
operacional e processamento da aplicao? Processamento do
sistema operacional inclui as tarefas que o sistema operacional
realiza para as aplicaes. Por exemplo: leitura e escrita para
dispositivos, envio de mensagens entre processos e programao
(schedule) de processos.
A meta no possuir mais que 25% a 40% de tempo de CPU gasto
efetuando tarefas do sistema operacional e os outros 60% a 75% do
tempo de CPU gasto executando a aplicao. Quanto menos tempo
for gasto efetuando tarefas do sistema operacional, melhor ser a
performance. Se muito tempo for gasto no modo do sistema
operacional, isto um sintoma de um problema, como:
Memria insuficiente, o que tambm causa swapping e/ou paging.
Design incorreto da aplicao, causando muitas chamadas ao
sistema operacional.
Para sistemas multi-processados, o administrador do sistema
tambm necessita verificar qual carga de CPU est balanceada
atravs de todas as CPUs, especialmente se qualquer das CPUs
possuir uma taxa de utilizao muito alta.
Estas so diretrizes gerais. Nmeros reais podem variar de acordo com a
plataforma de hardware e sistema operacional. Verifique as diretrizes de tuning
de seu hardware e sistema operacional para maiores informaes.
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 8
Tuning do Sistema Operacional
Processos e Threads
Diretrizes
sistema pode imediatamente fazer uso dos recursos adicionais de CPU. Mesmo
embora refazer o tuning no seja necessrio, o sistema pode melhorar com
ele.
Solues Exerccios 1
g. Continue a instalao
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.
No Linux:
export ORACLE_SID = <SID>
No Linux:
cat <diretrio background_dump_dest>/alert_<SID>.log.ora
No Linux:
cat <diretrio user_dump_dest>/<SID>ora_<SPID>.trc
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
sqlplus aluno/aluno
SQL>@lab03_1
sqlplus aluno/aluno
SQL>@lab03_2
sqlplus aluno/aluno
SQL>@lab03_3
SQL> SELECT *
FROM v$rollstat;
SQL> SELECT *
FROM dba_rollback_segs;
SQL> SELECT *
FROM v$filestat;
SQL> SELECT *
FROM v$datafile;
SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql
No linux:
cat alunoN_report.txt
SQL> SELECT *
FROM v$event_name;
SQL> SELECT *
FROM v$system_event
WHERE event LIKE '%wait%';
SQL> SELECT *
FROM v$session_event
WHERE event LIKE '%wait%';
SQL> SELECT *
FROM v$session_wait
WHERE state = 'WAITING';
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.
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.
3.
4. Efetue a medida do hit ratio para o data dictionary cache.
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> @$ORACLE_HOME/rdbms/admin/spreport.sql
5.
6. Utilize o resultado do relatrio para obter ambos os hit ratios.
No linux:
cat relatorio.txt
6.
7. Que solues voc iria aplicar se qualquer dos hit ratios estivesse ruim ?
7.
8. Determine que packages, procedures e triggers esto fixadas na shared
pool.
8.
9. Fixe uma das packages fornecidas pelo Oracle que necessite ser mantida
em memria. Por exemplo a package DBMS_OUTPUT.
9.
10. Determine a quantidade de memria de sesso utilizada na shared
pool para sua sesso.
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> @$ORACLE_HOME/rdbms/admin/spreport.sql
No linux:
cat relatorio.txt
sqlplus aluno/aluno
SQL>@lab05_1
SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql
TargetTrust Treinamento e Consultoria 10
Apndice - Resoluo dos Exerccios
No linux:
cat relatorio.txt
sqlplus aluno/aluno
SQL> SELECT *
FROM tab;
SQL> SELECT *
FROM aluno.s_emp;
SQL> SELECT *
FROM aluno.s_dept;
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
No init<SID>.ora:
LOG_BUFFER = n , onde n um valor em bytes maior do que o
anterior.
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?
C D
dados indices
redo file archive
system temp
undo
C D E
system dados indices
redo(a) redo(b) archive
control(a) control(b)
temp
undo
C D E
system dados indices
redo(a) redo(b) archive(b)
control(a) control(b)
archive(a) temp
undo
C D E F
system temp redo(b) archive(a)
dados indices control(b) undo
redo(a) archive(b)
control(a)
SQL> SELECT *
FROM v$sysstat
WHERE name like '%checkpoint%';
sqlplus aluno/aluno
SQL>@lab07_1
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> @procedure_hw_mark.sql
sqlplus aluno/aluno
SQL> @lab08_1
sqlplus system/oracle
sqlplus system/oracle
SQL> SELECT *
FROM chained_rows;
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
sqlplus aluno/aluno
SQL> @lab09_2
sqlplus system/oracle
SQL> SELECT (disk.value / mem.value ) * 100 "Ratio %"
FROM v$sysstat disk, v$sysstat mem
WHERE disk.name = 'sorts (disk)'
AND mem.name = 'sorts (memory)';
/* Deve ser menor que 5% */
sqlplus aluno/aluno
SQL> @lab09_2
sqlplus system/oracle
SQL> SELECT *
FROM v$sort_usage;
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> SELECT *
FROM v$rollname;
SQL> SELECT *
FROM v$rollstat;
sqlplus aluno/aluno
SQL> @insere_dados
sqlplus system/oracle
SQL> SELECT *
FROM v$transaction;
SQL> COMMIT;
sqlplus system/oracle
SQL> SELECT *
FROM v$transaction;
SQL> SELECT *
FROM v$system_event
WHERE event like '%undo%';
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
SQL> @lab12_1
SQL> @lab12_2
No linux:
cd <diretrio de dump>
tkprof <SID>_ora_<spid>.trc lab12-tkprof.txt sys=no
explain=aluno/aluno