Você está na página 1de 130

Oracle Performance Diagnostics & Tuning

9iR1 a 11gR2
1
Ricardo Portilho Proni
ricardo@nervinformatica.com.br
Esta obra est licenciada sob a licena
Creative Commons Atribuio-SemDerivados 3.0 Brasil.
Para ver uma cpia desta licena, visite
http://creativecommons.org/licenses/by-nd/3.0/br/.

Performance de Sistemas Computacionais s pode ser medida em TEMPO.

Performance Tuning deve ser reativa.

Performance Tuning deve ter RO.

Apenas os maiores gargalos devem ser solucionados.

O processo deve ser Diagnostics, e depois Tuning.

Alto consumo de CPU no um problema.

O usurio no executa um SQL por prazer.

O desenvolvedor no deveria saber como fazer um bom SQL (COBOL?).

Ferramentas Grficas / Enterprise Manager / Wizards / Automao so bons auxiliares.

Bancos com bom desempenho devem ser observados.

Conhea outros RDBMSs: T no lugar para paixes.

No acredite em nada (separar tabelas e ndices?). Teste.

Se houvesse um parmetro que sempre deixasse o Oracle mais rpido, sem nenhum efeito
colateral, ele j viria habilitado.

Desenvolva um mtodo de convencimento gerencial.

Por algo chamar-se Storage, no quer dizer que ele no tenha problemas.

KSS (Keep t Simple, Stupid): a probabilidade de falha cresce linearmente com o aumento de
complexidade.

Saiba diser "No.

Saiba dizer "No sei.


2
Minha abordagem
Performance Diagnostics & Tuning
3
4
Mistificao
Mtodos ntigos
5

Experincia

ntuio

mpreciso

Tempo

Sorte

Recursos
6
Re!uisitos
7
TOP Tuning
Verificar maior consumidor de CPU;
Verificar o SQL agressor;
Alterar o SQL e esperar que o desempenho melhore;
Adicionar ndices e esperar que o desempenho melhore;
Se no melhorar, matar a sesso.
Se o desempenho no melhorar, voltar ao incio.

Verificar Sistema Operacional (free / taskmgr / Performance Monitor);

Verificar Sistema Operacional (vmstat / taskmgr / Performance Monitor);

Verificar Sistema Operacional (iostat / taskmgr / Performance Monitor);

Verificar SGA;

Verificar PGA;

Verificar coleta de estatsticas;

Verificar parmetros do Oracle;

Verificar fragmentao de tabelas;

Verificar LOCKs;

Verificar SQLs que consomem mais recursos;

Construir uma teoria baseada nos dados observados;

Alterar algo e esperar que o desempenho melhore;

Se o cliente no gostar da teoria, apenas cite e altere alguns parmetros


relacionados;

Se o desempenho no melhorar, voltar ao incio.


8
"hec#list Tuning
Verificar Buffer Cache Hit Ratio;
Verificar Data Dictionary Hit Ratio;
Verificar SQL Cache Hit Ratio;
Verificar Library Cache Hit Ratio;
.
Construir uma teoria baseada nos dados observados;
Alterar algo (geralmente aumentar) e esperar que o desempenho melhore;
Se o desempenho no melhorar, voltar ao incio.
9
Ratios Tuning

KW = Kill t With ron;

Adicionar Memria RAM;

Adicionar CPUs;

Melhorar o /O;

Migrar para um Servidor maior;

Migrar para RAC;

Adicionar Ns no RAC;

Pagar a conta, e esperar que o desempenho melhore.

Se o desempenho no melhorar, voltar ao incio.


10
$%&% Tuning

Migrar Banco para outro servidor;

Executar Upgrade de Banco de Dados;

Executar Upgrade da Aplicao;

Executar Upgrade do Middleware;

Juntar Aplicao e Banco de Dados;

Separar Aplicao e Banco de Dados;

Voltar Backups;

Se o desempenho no melhorar, tentar outra coisa, at melhorar.


11
Manager Tuning
O !ue est' errado(
12
13
Paradigma
14
)endas do Oracle

Todo teu SELECT dever utilizar um ndice, para que ele seja rpido.

Ters uma rea de SWAP com o dobro de tua RAM.

No utilizars mais que 50% de tua RAM para a SGA.

Utilizars HNTs, pois tu s mais sbio que o Oracle.

No coletars estatsticas do dicionrio de dados.

Devers separar teus dados e ndices.

Devers separar teus dados em diversas TABLESPACEs.

Teus DATAFLEs devero ter no mximo 2GB / 10GB / xGB.

No habilitars AUTOEXTEND ON.

Devers executar COMMT a cada N linhas.

Utilizars RAD 5, pois mais rpido para leituras

No permitirs mais que um SWTCH a cada 20 minutos.

Mas no ters grandes REDO LOGs.

Executars REBULD de ndices regularmente.

Executars MOVE de tabelas regularmente.

Se grande a tabela tornar-se, a particionars.

Se quiseres mais velocidade, usars RAC.

Quanto mais CPUs, mais rpido teu banco de dados ser.

Se teus RATOS estiverem altos, felizes estaro teus usurios.

Sempre que possvel, aumentars seu DB_CACHE_SZE e SHARED_POOL.

Desabilitars o AWR, pois ele causa lentido.

No utilizars memria automtica. Tu s mais sbio que o Oracle.

Se usar, deixars a SGA_TARGET um pouco menor que a SGA_MAX_SZE.

AUTOMATC SQL TUNNG um dos cavaleiros do apocalipse.


15
)endas do Oracle
Seu filho leva 2 horas para comprar leite na padaria, de carro.
Como melhorar este tempo?

necessrio um carro mais rpido?

So necessrios dois carros?

necessrio tornar a estrada mais larga?

melhor s comprar 1 litro de leite de cada vez?

Deve-se utilizar uma padaria que s tenha 1 tipo de leite?

A porta da garagem deve estar sempre aberta?


16
O carro e o leite
O carioca precisa acordar s 03:30 para chegar em SP s 09:00.
Como melhorar este tempo?Mas

Utilizar um Concorde?

Voar mais rente ao solo?

Tornar o avio mais leve, transportando menos pessoas e bagagem?


17
Ponte rea
18
O chefe e o atraso
19
"omo saber !uem *ence(
O Mtodo "orreto
20
21
Peste +egra
22
Tem,o
Tem,o "om,utacional
23
R - . / &
OU
Res,onse Time - .er*ice Time / &ait Time
24
%nstrumentao0 Mainframe
25
%nstrumentao0 .olaris
Oracle &ait %nterface
26
27
Oracle &ait %nterface
Benchmark 7.0.12: Juan Loainza
YAPP Paper: Anjo Kolk
28
+ascimento da O&%

Verso 7.0.12: 104 Wait Events

Verso 8: 140 Wait Events

Verso 8i: 220 Wait Events

Verso 9i: 400 Waits Events

Verso 10gR1: >800 Wait Events

Verso 11gR2: >1100 Wait Events


29
1*oluo da O&%
30
1nter,rise Manager
"onceitos 2'sicos
31
32
r!uitetura Oracle

db_block_size

db_file_multiblock_read_count

memory_max_target

memory_target

sga_max_size

sga_target

pga_aggregate_target

db_cache_size (db_2k_cache_size, db_4k_cache_size, db_8k_cache_size...)

buffer_pool_keep, buffer_pool_recycle

shared_pool_size, shared_pool_reserved_size

large_pool_size

java_pool_size

streams_pool_size

result_cache_max_result, result_cache_max_size, result_cache_mode

log_buffer

fast_start_mttr_target

log_checkpoint_interval, log_checkpoint_timeout
33
Par3metros elementares
4ands O+ 5
Par3metros elementares
34

Verifique os parmetros elementares em seu banco de dados.

Altere o parmetro memory_max_target para 0;

Altere o parmetro memory_target para 0;

Altere o parmetro sga_max_size para metade da RAM da mquina;

Altere o parmetro sga_target para 0;

Altere o parmetro db_cache_size para metade do sga_max_size.

Altere o parmetro shared_pool_size para metade do db_cache_size.

Altere o parmetro pga_aggregated_target para 100M;


35
)ab 1610 Par3metros elementares

SQL Statement

Session

nstance
36
7ranularidades de n'lise
37
"en'rios de n'lise

H lentido agora

Tivemos lentido ondem

Dynamic Performance Views

Extended SQL Trace (Event 10046)

Statspack / AWR
38
8erramentas de n'lise
Administrative
Application
Cluster
Commit
Concurrency
Configuration
dle
Network
Other
Queueing
Scheduler
System /O
User /O
39
&ait "lasses
)imita9es da O&%
40

No um monitoramento End-to-End

Sem dados de consumo de CPU

Sem dados de consumo de Memria

Bugs

mprecises
41
)imita9es0 O&%

Sem histrico
42
)imita9es0 :ie;s

Muitos dados

Altssima granularidade

Desempenho

Correlao de informaes

Sesses PARALLEL

Sesses SHARED SERVER

Waits s disponveis em >=9iR1

Suporte oficial s em >10gR1


43
)imita9es0 1<tended .=) Trace

Baixa granularidade

Apenas histrico
44
)imita9es0 .tats,ac# > &R
4ands O+ 5
D?namic Performance :ie;s
45
V$SYSTEM_EVENT
V$SESSON_EVENT
V$SESSON_WAT

Verifique as Dynamic Performance Views da OW em seu banco de dados.

Quais suas colunas mais importantes?

Que Waits voc tem em seu banco de dados?

Habitue-se a seu contedo.


46
)ab 2610 :ie;s
&ait 1*ents mais comuns
47

buffer busy

free buffer

read by oher session

control file single write / control file parallel write / control file sequential read

db file single write / db file parallel read / db file parallel write

db file scatteread read / db file sequential read

direct path read / direct path write

enqueue

free buffer

latch free / latch: library cache / latch: cache buffers chains

library cache pin / library cache lock

log buffer space

log file parallel write / log file single write / log file sequential read

log file switch (archiving needed)

log file switch (checkpoint incomplete) / log file switch completion

log file sync

SQL*Net message from client / SQL*Net message to client

SQL*Net more data from client / SQL*Net more data to client

SQL*Net break/reset from client / SQL*Net break/reset to client


48
&ait 1*ents mais comuns
4ands O+ 5
.imulando &ait 1*ents
Gravaes
49
4abilite o usu'rio ."OTT6
SQL> ALTER USER SCOTT ACCOUT ULOC! "#ET"$"E# %& T"'ER(
SQL> 'RAT SELECT A& #"CT"OAR& TO SCOTT(
bra uma sesso com o ."OTT com .1T T%M%+7 O+6
SQL> CO SCOTT)T"'ER
SQL> SET T"*"' O
1m outra sesso@ com o .A.@ *erifi!ue B*'rias *eCes seguidasD o conteEdo
da :F.1..%O+G&%T durante a e<ecuo dos comandos do ."OTT a
seguir6
"om o usu'rio ."OTT@ crie uma grande tabela@ com ,elo menos H726
SQL> CREATE TA%LE T AS SELECT + $RO* ALL_O%,ECTS(
SQL> "SERT "TO T SELECT + $RO* T(
SQL> "SERT "TO T SELECT + $RO* T(
SQL> ---
SQL> "SERT "TO T SELECT + $RO* T(
SQL> CO**"T(
50
)ab I610 7ra*a9es
8eche e abra a sesso com o ."OTT com .1T T%M%+7 O+
SQL> CO SCOTT)T"'ER
SQL> SET T"*"' O
1m outra sesso@ com o .A.@ *erifi!ue o conteEdo da :F.1..%O+G1:1+T
relacionado a sesso do ."OTT6
SQL> SELECT S"# $RO* ./SESS"O 01ERE USERA*E 2 3SCOTT3(
SQL> SELECT E.ET4 TOTAL_0A"TS4 TOTAL_T"*EOUTS4 A.ERA'E_0A"T $RO*
./SESS"O_E.ET 01ERE S"# 2 56 OR#ER %& 7(
"om o usu'rio ."OTT@ du,li!ue a grande tabela6
SQL> CREATE TA%LE T8 AS SELECT + $RO* T(
+a sesso do .A.@ a,Js a du,licao da tabela@ *erifi!ue no*amente o
conteEdo da :F.1..%O+G1:1+T relacionado a sesso do ."OTT
Remo*a a tabela T2@ feche e abra a sesso com o ."OTT@ e re,ita a
o,erao6 Durante a re,etio da o,erao@ *erifi!ue as mudanas do
conteEdo da :F.1..%O+G1:1+T relacionado a sesso do ."OTT6
51
)ab I620 7ra*a9es
Res,onda as seguintes ,erguntas0
9 O:de ;oi gasto mais tempo :esta sess<o=
9 A >?e se re;erem os maiores 0ait E@e:ts=
9 Q?al dos maiores 0ait E@e:ts podem ser red?zidos=
9 A elimi:aA<o de ?m 0ait E@e:t >?e pode ser red?zido4 ca?sarB ?ma melhoria de >?a:to tempo=
9 Como red?zir este 0ait E@e:t=
"orriKa a causa deste &ait 1*ent6
Remo*a a tabela T2@ feche e abra a sesso com o ."OTT@ e re,ita a o,erao6
52
)ab I6I0 7ra*a9es
Res,onda as seguintes ,erguntas0
9 O:de ;oi gasto mais tempo :esta sess<o=
9 A >?e se re;erem os maiores 0ait E@e:ts=
9 Q?al dos maiores 0ait E@e:ts podem ser red?zidos=
9 A elimi:aA<o de ?m 0ait E@e:t >?e pode ser red?zido4 ca?sarB ?ma melhoria de >?a:to tempo=
9 Como red?zir este 0ait E@e:t=
"orriKa a causa deste &ait 1*ent6
Remo*a a tabela T2@ feche e abra a sesso com o ."OTT@ e re,ita a o,erao6
53
)ab I6H0 7ra*a9es
Verifiquem as Dynamic Performance Views de seus servidores.
Tragam suas dvidas para a aula.
54
)io de casa
1<tended .=) Trace
55

0 = Standard Trace

4 = Bind Variables

8 = Wait States

12 = Bind Variables + Wait States


56
+L*eis 1<tended .=) Trace

Em toda a instncia

Em sua sesso

Em outra sesso
57
ti*ar 1<tended .=) Trace
58
Detalhes 1<tended .=) Trace
*** 2010-03-22 11:43:12.276
WAT #9: nam='db file scattered read' ela= 183330 file#=4 block#=9124 blocks=26 obj#=74574
WAT #9: nam='db file scattered read' ela= 2528 file#=4 block#=9150 blocks=26 obj#=74574
WAT #9: nam='db file scattered read' ela= 170358 file#=4 block#=9176 blocks=26 obj#=74574
WAT #9: nam='db file scattered read' ela= 96261 file#=4 block#=9202 blocks=26 obj#=74574
WAT #9: nam='db file scattered read' ela= 1669 file#=4 block#=9228 blocks=26 obj#=74574
WAT #9: nam='db file scattered read' ela= 26055 file#=4 block#=9254 blocks=26 obj#=74574
WAT #9: nam='db file scattered read' ela= 4760 file#=4 block#=9280 blocks=26 obj#=74574
WAT #9: nam='db file scattered read' ela= 108783 file#=4 block#=9306 blocks=26 obj#=74574
tim=1269268992840594
=====================
59
t#,rof

No um monitoramento End-to-End

Sem dados de consumo de CPU

Sem dados de consumo de Memria

Bugs

mprecises

Muitos dados

Altssima granularidade

Desempenho

Correlao de informaes

Sesses PARALLEL

Sesses SHARED SERVER

Waits s disponveis em >=9iR1

Suporte oficial s em >10gR1


60
)imita9es0 1<tended Trace
4ands O+ 5
1<tended .=) Trace
Full Table Scan
61
8eche e abra a sesso com o ."OTT com .1T T%M%+7 O+
SQL> EXT
$ sqlplus SCOTT/TGER
SQL> SET TMNG ON
"om o usu'rio .A.@ habilite o 1<tended Trace ,ara a sesso do ."OTT0
SQL> SELECT S.USERNAME, P.SPD OS_PROCESS_D, P.PD ORACLE_PROCESS_D
FROM V$SESSON S, V$PROCESS P WHERE S.PADDR = P.ADDR AND S.USERNAME
= 'SCOTT';
SQL> oradebug setospid 8708;
SQL> oradebug tracefile_name;
SQL> oradebug unlimit;
SQL> oradebug event 10046 trace name context forever, level 12;
1m outro terminal@ *erifi!ue o conteEdo do Trace6
$ tail -f /u01/app/oracle/diag/rdbms/test11gr2/TEST11GR2/trace/TEST11GR2_ora_8708.trc
62
)ab H610 1<tended .=) Trace
"om o usu'rio ."OTT@ a,ague o conteEdo da grande tabela@ altere o *alor
do ,ar3metro dbGfileGmultibloc#GreadGcount Ba,enas na sessoD e reinsira
os dados6
SQL> TRUNCATE TABLE T2;
SQL> ALTER SESSON SET db_file_multiblock_read_count = 8;
SQL> NSERT NTO T2 SELECT * FROM T;
SQL> COMMT;
"ontinue *erificando o conteEdo do Trace durante a e<ecuo da o,erao6
o trmino da e<ecuo@ *erifi!ue os *alores de :F.1..%O+G1:1+T da
sesso do ."OTT6 7uarde este resultado6
1<ecute o t#,rof nos Trace gerado6
$ tkprof /u01/app/oracle/diag/rdbms/test11gr2/TEST11GR2/trace/TEST11GR2_ora_8708.trc
nalise o relatJrio gerado ,elo t#,rof6
Re,ita a o,erao@ mas com dbGfileGmultibloc#GreadGcount de MN e 1NNN6
63
)ab H620 1<tended .=) Trace
&ait 1*ents O Detalhes
64
65
1nsinar a Pescar
66
ReferPncia
67
Performance Tuning 7uide
68
MO.
1<,licao0 O bloco solicitado est em uso, pois outra sesso est carregando o
bloco para o DB_CACHE_SZE, ou outra sesso est utilizando o bloco no
DB_CACHE_SZE em um modo incompatvel.
"ausa0 DB_CACHE_SZE insuficiente, ou SQL ineficiente.
"orreo0 Aumente o DB_CACHE_SZE ou altere o SQL.
P10 Nmero do DATAFLE.
P20 Nmero do bloco.
PI0 D a solicitao vem de diferentes locais da sesso.
69
buffer bus?
70
buffer bus?
1<,licao0 O RDBMS aguarda blocos de DB_CACHE_SZE livres.
"ausa0 DB_CACHE_SZE insuficiente.
"orreo0 Aumente o DB_CACHE_SZE.
P10 Nmero do DATAFLE.
P20 Nmero do bloco.
71
free buffer
1<,licao0 O bloco solicitado est em uso, pois outra sesso est carregando o
bloco para o DB_CACHE_SZE, ou outra sesso est utilizando o bloco no
DB_CACHE_SZE em um modo incompatvel.
"ausa0 DB_CACHE_SZE insuficiente, ou SQL ineficiente.
"orreo0 Aumente o DB_CACHE_SZE ou altere o SQL.
P10 Nmero do DATAFLE.
P20 Nmero do bloco.
PI0 Razo (<10g).
PI0 Wait Class (>=10g).
72
read b? other session
1<,licao0 Espera de /O para gravar em CONTROLFLEs.
"ausa0 Excesso de gravao nos CONTROLFLEs ou /O ineficiente.
"orreo0 Minimize as gravaes nos CONTROLFLEs ou melhore o mecanismo
de /O.
P10 Quntidade de CONTROLFLEs.
P20 Quantidade de blocos.
PI0 Quantidade de solicitaes de /O.
73
control file ,arallel ;rite
1<,licao0 Espera de /O para gravar em CONTROLFLEs.
"ausa0 Excesso de gravao nos CONTROLFLEs ou /O ineficiente.
"orreo0 Minimize as gravaes nos CONTROLFLEs ou melhore o mecanismo
de /O.
P10 Nmero do CONTROLFLE.
P20 Nmero do bloco.
PI0 Quantidade de blocos.
74
control file single ;rite
1<,licao0 Espera de /O para ler os CONTROLFLEs.
"ausa0 Excesso de leitura nos CONTROLFLEs ou /O ineficiente.
"orreo0 Minimize as leituras nos CONTROLFLEs ou melhore o mecanismo de
/O.
P10 Nmero do CONTROLFLE.
P20 Nmero do bloco.
PI0 Quantidade de blocos.
75
control file se!uential read
1<,licao0 Gravaes de dados nos DATAFLEs esperam pelo /O.
"ausa0 Excesso de gravaes ou lentido de /O.
"orreo0 Minimize as gravaes ou melhore o mecanismo de /O.
P10 Quantidade de requisies.
P20 nterrupt.
PI0 Timeout.
76
db file ,arallel ;rite
1<,licao0 Uma gravao no HEADER do DATAFLE esperam pelo /O.
"ausa0 Excesso de gravaes no HEADER dos DATAFLEs ou lentido de /O.
"orreo0 Minimize as gravaes no HEADER dos DATAFLEs ou melhore o
mecanismo de /O.
P10 Quantidade de requisies.
P20 nterrupt.
PI0 Timeout.
77
db file single ;rite
1<,licao0 Durante RECOVER ou durante PREFETCHNG, leituras de
DATAFLEs esperam pelo /O.
"ausa0 RECOVER muito longo, PREFETCHNG excessivo, ou lentido de /O.
"orreo0 Acelere o RECOVER, minimize o PREFETCHNG, ou melhore o
mecanismo de /O.
P10 Quantidade de DATAFLEs.
P20 Quantidade de blocos.
PI0 Quantidade de requisies.
78
db file ,arallel read
79
Qser %>O

CURSOR_SHARNG

DB_FLE_MULTBLOCK_READ_COUNT

OPTMZER_NDEX_CACHNG

OPTMZER_NDEX_COST_ADJ

OPTMZER_MODE

PGA_AGGREGATE_TARGET

STAR_TRANSFORMATON_ENABLED
80
%nfluenciando o OtimiCador
1<,licao0 Durante FTS, leituras de DATAFLEs esperam pelo /O.
"ausa0 DB_CACHE_SZE insuficiente, FTS desnecessrio ou lentido de /O
"orreo0 Aumente o DB_CACHE_SZE, elimine o FTS, ou melhore o
mecanismo de /O.
P10 Nmero do DATAFLE.
P20 Bloco inicial.
PI0 Quantidade de blocos.
81
db file scattered read
1<,licao0 Durante a leitura de um bloco, leituras de DATAFLEs esperam pelo
mecanismo de /O.
"ausa0 DB_CACHE_SZE insuficiente, leitura desnecessria ou lentido de /O
"orreo0 Aumente o DB_CACHE_SZE, elimine a leitura desnecessria, ou
melhore o mecanismo de /O.
P10 Nmero do DATAFLE.
P20 Bloco inicial.
PI0 Quantidade de blocos.
82
db file se!uential read
1<,licao0 Leitura / gravao entre DATAFLEs / TEMPFLEs e PGA.
"ausa0 PGA insuficiente, ou lentido de /O.
"orreo0 Aumente a PGA, ou melhore o mecanismo de /O.
P10 Nmero do arquivo (DATAFLE ou TEMPFLE).
P20 Bloco inicial.
PI0 Quantidade de blocos.
83
direct ,ath read > direct ,ath ;rite
1<,licao0 Mecanismo de fila ordenada do RDBMS.
"ausa0 Diversas, dependendo do tipo de fila.
"orreo0 Diversas, dependendo do tipo de fila.
P10 Tipo ou modo da enqueue.
P20 D1 (como na V$LOCK).
PI0 D2 (como na V$LOCK).
Problemas mais comuns0

TX, Transaction

TM, DML Enqueue

HW, High-Water Lock

SQ, Sequence Number Enqueue

CF, Controlfile Transaction


84
en!ueue
1<,licao0 Mecanismo de fila desordenada do RDBMS.
"ausa0 Diversas, dependendo do tipo de fila.
"orreo0 Diversas, dependendo do tipo de fila.
P10 Endereo da Latch (como na V$LATCH).
P20 Nmero da Latch (como na V$LATCH).
PI0 Quantidade de tentativas.
Problemas mais comuns0

shared pool

library cache

cache buffers lru chain

cache buffers chains

row cache objects


85
latch free
1<,licao0 Uso incompatvel do objeto entre duas sesses.
"ausa0 Uso do objeto de forma incompatvel entre duas sesses.
"orreo0 Finalizar o uso do objeto por uma das sesses.
P10 Endereo do objeto.
P20 Endereo do load lock.
PI0 Mode + Namespace.
SQL> SELECT /*+ ORDERED */ W1.SD WATNG_SESSON, H1.SD HOLDNG_SESSON,
W.KGLLKTYPE LOCK_OR_PN, W.KGLLKHDL ADDRESS,
DECODE(H.KGLLKMOD,0,'None',1,'Null',2,'Share',3,'Exclusive','Unknown') MODE_HELD,
DECODE(W.KGLLKREQ,0,'None',1,'Null',2,'Share',3,'Exclusive','Unknown') MODE_REQUESTED
FROM DBA_KGLLOCK W, DBA_KGLLOCK H, V$SESSON W1, V$SESSON H1 WHERE
(((H.KGLLKMOD != 0) AND (H.KGLLKMOD != 1) AND ((H.KGLLKREQ = 0) OR (H.KGLLKREQ = 1)))
AND (((W.KGLLKMOD = 0) OR (W.KGLLKMOD= 1)) AND ((W.KGLLKREQ != 0) AND (W.KGLLKREQ !=
1)))) AND W.KGLLKTYPE = H.KGLLKTYPE AND W.KGLLKHDL = H.KGLLKHDL AND W.KGLLKUSE =
W1.SADDR AND H.KGLLKUSE = H1.SADDR;

SQL> SELECT TO_NAME FROM V$OBJECT_DEPENDENCY WHERE TO_ADDRESS =
'0700000010F62750';
86
librar? cache ,in > librar? cache loc#
1<,licao0 Mais espao no LOG_BUFFER necessrio para gravaes.
"ausa0 LOG_BUFFER insuficiente, REDO LOGs insuficientes, ou /O lento.
"orreo0 Aumente o LOG_BUFFER, aumente a quantidade / tamanhode REDO
LOGs, ou melhore o mecanismo de /O.
P10 Quantidade de REDO LOGs.
P20 Quantidade de blocos do sistema operacional.
PI0 Quantidade de requisies de /O.
87
log buffer s,ace
1<,licao0 Durante gravao de REDO LOGs, o LGWR espera pelo /O.
"ausa0 Excesso de membros nos grupos de REDO LOGs ou lentido de /O.
"orreo0 Reduza a quantidade de membros nos grupos de REDO LOGs ou
melhore o mecanismo de /O.
P10 Quantidade de REDO LOGs.
P20 Quantidade de blocos de sistema operacional.
PI0 Quantidade de requisies de /O.
88
log file ,arallel ;rite
1<,licao0 Durante gravao no HEADER de um REDO LOGs, o LGWR
espera pelo /O.
"ausa0 Excesso de gravaes no HEADER do REDO LOG ou lentido de /O.
"orreo0 Reduza a quantidade de gravaes no HEADER do REDO LOG ou
melhore o mecanismo de /O.
P10 Nmero do REDO LOG.
P20 Nmero do bloco.
PI0 Quantidade de blocos.
89
log file single ;rite
1<,licao0 Durante leitura de REDO LOGs, o LGWR espera pelo /O.
"ausa0 Lentido de /O.
"orreo0 Melhore o mecanismo de /O.
P10 Nmero do REDO LOG.
P20 Nmero do bloco.
PI0 Quantidade de blocos.
90
log file se!uential read
1<,licao0 Todos os grupos de REDO LOGs foram utilizados e ainda so
necessrios para um eventual RECOVER, pois o ARCn ainda no criou os
ARCHVED REDO LOGs e o DBWR ainda no gravou seu contedo nos
DATAFLEs.
"ausa0 REDO LOGs sub-dimensionados, configurao inadequada de destino
de ARCHVED REDO LOGs ou /O ineficiente.
"orreo0 Aumentar os REDO LOGs em quantidade e/ou tamanho, corrigir a
configurao de destino do ARCn, ou melhorar o mecanismo de /O.
P10 No utilizado.
P20 No utilizado.
PI0 No utilizado.
:aria9es0

log file switch (archiving needed)

log file switch (checkpoint incomplete)

log file switch (clearing log file)

log file switch (private strand flush incomplete)

log file switch completion


91
log file s;itch
1<,licao0 Um CHECKPONT foi executado, e precisa ser registrado no REDO
LOG, e o LGRW est aguardando pelo mecanismo de /O.
"ausa0 COMMT em quantidade excessiva, ou /O ineficiente.
"orreo0 Reduzir a quantidade de COMMTs ou otimizar o mecanismo de /O.
P10 Nmero do Log Buffer.
P20 No utilizado.
PI0 No utilizado.
92
log file s?nc
1<,licao0 Espera durante comunicao via rede com o protocolo SQL*Net.
"ausa0 Sesso inativa, latncia de rede ou limitao do cliente.
"orreo0 Eliminar a sesso inativa, minimizar a latncia na rede ou minimizar a limitao
do cliente.
P10 Driver de rede.
P20 Quantidade de bytes.
PI0 No utilizado.
:aria9es

SQL*Net message from client

SQL*Net message to client

SQL*Net more data from client

SQL*Net more data to client

SQL*Net break/reset to client

SQL*Net message from dblink

SQL*Net message to dblink

SQL*Net more data from dblink

SQL*Net more data to dblink

SQL*Net break/reset to dblink


93
.=)R+et message to > from client
4ands O+ 5
.imulando &ait 1*ents
LGWR x DBWR
94
8eche e abra a sesso com o ."OTT com .1T T%M%+7 O+
SQL> CONN SCOTT/TGER
SQL> SET TMNG ON
Com o usurio SCOTT, apaue o con!e"#o #a ran#e !abela, e reinsira os
#a#os$
SQL> TRUNCATE TABLE T2;
SQL> NSERT NTO T2 SELECT * FROM T;
SQL> COMMT;
o trmino da e<ecuo@ *erifi!ue os *alores de :F.1..%O+G1:1+T da sesso
do ."OTT6 7uarde o resultado6
ltere o *alor do ,ar3metro logGbuffer ,ara M12#@ re,ita a o,erao@ e com,are6
ltere o *alor do ,ar3metro logGbuffer ,ara 1Nm@ re,ita a o,erao@ e com,are6
ltere o *alor do ,ar3metro logGbuffer ,ara 1NNm@ re,ita a o,erao@ e com,are6
Mantenha logGbuffer com a configurao mais otimiCada6
ltere o ,ar3metro 8.TG.TRTGMTTRGTR71T ,ara 1@ re,ita a o,erao@ e
com,are6
95
)ab M610 )7&R < D2&R
Parallel .=)
96
Permite =uer?@ DM) e DD)6
Qm obKeto ,ode ter Parallel ,ermanente@ inde,endente do .=)0
SQL> ALTER TABLE SCOTT.T PARALLEL DEGREE 4;
O Parallel .=) ,ode ser utiliCado diretamente no .=)0
SQL> SELECT /*+ PARALLEL(T2,4) */ COUNT(*) FROM T2;
97
Parallel .=)
Par3metros0
PARALLEL_ADAPTVE_MULT_USER = true ou false.
PARALLEL_AUTOMATC_TUNNG: Deprecated.
PARALLEL_DEGREE_LMT = CPU, O ou Nmero.
PARALLEL_DEGREE_POLCY = MANUAL, LMTED ou AUTO.
PARALLEL_EXECUTON_MESSAGE_SZE = De 2148 a 32768
PARALLEL_FORCE_LOCAL = true ou false.
PARALLEL_NSTANCE_GRouP = Oracle RAC service_name ou group_name.
PARALLEL_O_CAP_ENABLED = Deprecated.
PARALLEL_MAX_SERVERS = De 0 a 3600.
PARALLEL_MN_PERCENT = De 0 a 100.
PARALLEL_MN_SERVERS = Nmero entre 0 e PARALLEL_MAX_SERVERS.
PARALLEL_MN_TME_THRESHOLD = AUTO | Segundos.
PARALLEL_SERVERS_TARGET = Nmero entre 0 e PARALLEL_MAX_SERVERS.
PARALLEL_THREADS_PER_CPU = Qualquer nmero.
98
Parallel .=)
4ands O+ 5
.imulando &ait 1*ents
Desin #e %plica&o
99
Reinicie a %nstance6
:erifi!ue o conteEdo da :F.A.T1MG1:1+T6 7uarde esta consulta6
bra a sesso com o ."OTT com .1T T%M%+7 O+6
1m seguida@ faa um .1)1"T da tabela toda6
$ sqlplus SCOTT/TGER
SQL> SET TMNG ON
SQL> SELECT COUNT(*) FROM T;
o trmino da e<ecuo@ *erifi!ue os *alores de :F.1..%O+G1:1+T da
sesso do ."OTT6 7uarde o resultado6
Re,ita a o,erao com PR))1)@ e com,are6
SQL> SELECT /*+ PARALLEL(T 4) */ COUNT(*) FROM T;
SQL> SELECT /*+ PARALLEL(T 20) */ COUNT(*) FROM T;
100
)ab S610 Design de ,licao
101
)ab S620 Design de ,licao
"rie esta tabela com o usu'rio ."OTT0
SQL> CREATE TABLE T3 (NUMERO NUMBER);
Obser*e o conteEdo dos seguintes scri,ts Perl@ os e<ecute@ e com,are0
$ perl /home/oracle/CommitNOK_BindsNOK.pl
$ perl /home/oracle/CommitNOK_BindsOK.pl
$ perl /home/oracle/CommitOK_BindsNOK.pl
$ perl /home/oracle/CommitOK_BindsOK.pl
102
)ab S6I0 Design de ,licao
"rie um Lndice 2%TMP na tabela TI com o usu'rio ."OTT0
SQL> CREATE BTMAP NDEX DX_BTMAP_T3 ON T3(NUMERO);
1<ecute um %+.1RT nesta tabela@ sem e<ecutar "OMM%T ou fechar a
sesso60
SQL> NSERT NTO T3 VALUES (1);
bra outra sesso com o ."OTT@ e faa outro %+.1RT na tabela TI0
SQL> NSERT NTO T3 VALUES (1);
"om o usu'rio .A.@ *erifi!ue a :F.1..%O+G&%T6
Re,ita o e<ercLcio@ mas utiliCando um Lndice 2TR110
SQL> DROP NDEX DX_BTMAP_T3;
SQL> CREATE NDEX DX_T3 ON T3(NUMERO);
103
)ab S6H0 Design de ,licao
bra uma sesso com o usu'rio ."OTT com .1T T%M%+7 O+0
"rie um Lndice 2TR11 na coluna O&+1R da tabela T0
SQL> CREATE NDEX DX_T ON T(OWNER);
1<ecute este .=)0
SQL> SELECT COUNT(*) FROM T T_ALAS WHERE OBJECT_NAME = 'T';
"om o usu'rio .A.@ *erifi!ue o conteEdo da :F.1..%O+G1:1+T da sesso
do ."OTT6 7uarde o resultado6
8eche e abra a sesso com o ."OTT com .1T T%M%+7 O+
ltere a sesso ,ara utiliCar o Rule 2ased O,timiCer0
SQL> ALTER SESSON SET OPTMZER_MODE=RULE;
1<ecute este .=)0
SQL> SELECT /*+ NDEX(T_ALAS,DX_T) */ COUNT(*) FROM T T_ALAS WHERE
OBJECT_NAME = 'T';
1statLsticas
104
O,timiCer .tatistics
Table statistics
Number of rows
Number of blocks
Average row length
Column statistics
Number of distinct values (NDV) in column
Number of nulls in column
Data distribution (histogram)
Extended statistics
ndex statistics
Number of leaf blocks
Levels
Clustering factor
.?stem .tatistics
/O performance and utilization
CPU performance and utilization
105
1statLsticas
DBMS_AUTO_TASK_ADMN.DSABLE
DBMS_STATS.GATHER_DATABASE_STATS
DBMS_STATS.GATHER_DCTONARY_STATS
DBMS_STATS.GATHER_SCHEMA_STATS
DBMS_STATS.GATHER_TABLE_STATS
DBMS_STATS.GATHER_NDEX_STATS
DBMS_STATS.DELETE_TABLE_STATS
DBMS_STATS.LOCK_TABLE_STATS
DBMS_STATS.EXPORT_*_STATS
DBMS_STATS.MPORT_*_STATS
OPTMZER_DYNAMC_SAMPLNG
DBMS_STATS.GATHER_SYSTEM_STATS
106
1statLsticas
4ands O+ 5
D2M.G.=)TQ+1
107
108
)ab T610 D2M.G.=)TQ+1
1scolha um dos .=)s mais lentos na :F.=) e o analise com D2M.G.=)TQ+16
DECLARE RET_VAL VARCHAR2(4000);
BEGN
RET_VAL := DBMS_SQLTUNE.CREATE_TUNNG_TASK(SQL_D => '12345678910', SCOPE =>
DBMS_SQLTUNE.SCOPE_COMPREHENSVE, TME_LMT => 60, TASK_NAME => 'Portilho Tuning Task',
DESCRPTON => 'Portilho Tuning Task');
END;
/
BEGN DBMS_SQLTUNE.EXECUTE_TUNNG_TASK('Portilho Tuning Task'); END;
/
SELECT DBMS_SQLTUNE.REPORT_TUNNG_TASK('Portilho Tuning Task') RECOMMENTATON FROM
DUAL;
SELECT DBMS_SQLTUNE.SCRPT_TUNNG_TASK('Portilho Tuning Task') RECOMMENTATON FROM
DUAL;
BEGN DBMS_SQLTUNE.DROP_TUNNG_TASK('Portilho Tuning Task'); END;
/
8ragmentao
109

Blocos logicamente contguos espalhados fisicamente.

Espao livre na TABLESPACE / DATAFLEs.

Espao livre da TABELA.

Espao livre no NDCE.

Row Chaining.

Migrated Rows.

EXTENTs.
110
8ragmentao
111
8ragmentao0 "O)1."1
112
8ragmentao0 "O)1."1
113
8ragmentao0 Ro; "haining
114
8ragmentao0 Ro; Migration
4ands O+ 5
D2M.GD:+"1DGR1&R%T1
115
116
)ab U610 D2M.GD:+"1DGR1&R%T1
bra uma sesso com o usu'rio ."OTT com .1T T%M%+7 O+0
ltere a sesso ,ara utiliCar o Rule 2ased O,timiCer0
SQL> ALTER SESSON SET OPTMZER_MODE=RULE;
1<ecute este .=) e anote seu tem,o de e<ecuo0
SQL> SELECT /*+ NDEX(T_ALAS,DX_T) */ COUNT(*) FROM T T_ALAS WHERE
OBJECT_NAME = 'T';
1<ecute este .=) e anote seu tem,o de e<ecuo0
SQL> SELECT COUNT(*) FROM T T_ALAS WHERE OBJECT_NAME = 'T';
"om o usu'rio .A.@ dP as ,ermiss9es necess'rias ,ara !ue o usu'rio
."OTT utiliCe o D2M.GD:+"1DGR1&R%T10
$ sqlplus / AS SYSDBA
SQL> GRANT EXECUTE ON DBMS_ADVANCED_REWRTE TO SCOTT;
SQL> GRANT CREATE MATERALZED VEW TO SCOTT;
117
)ab U620 D2M.GD:+"1DGR1&R%T1
+a sesso do usu'rio ."OTT@ e<ecute o D2M.GD:+"1GR1&R%T10
BEGN
SYS.DBMS_ADVANCED_REWRTE.DECLARE_REWRTE_EQUVALENCE (
NAME => 'PORTLHO_REWRTE',
SOURCE_STMT => 'SELECT /*+ NDEX(T_ALAS,DX_T) */ COUNT(*) FROM T T_ALAS WHERE
OBJECT_NAME = ''T''',
DESTNATON_STMT => 'SELECT COUNT(OBJECT_NAME) FROM T T_ALAS WHERE
OBJECT_NAME = ''T''',
VALDATE => FALSE,
REWRTE_MODE => 'TEXT_MATCH');
END;
/
1<ecute no*amente este .1)1"T e *erifi!ue seu tem,o de e<ecuo0
SQL> SELECT /*+ NDEX(T_ALAS,DX_T) */ COUNT(*) FROM T T_ALAS WHERE OBJECT_NAME = 'T';
Remo*a o R1&R%T1@ e<ecute no*amente o .1)1"T e *erifi!ue seu tem,o de
e<ecuo0
SQL> EXEC SYS.DBMS_ADVANCED_REWRTE.DROP_REWRTE_EQUVALENCE (NAME =>
'PORTLHO_REWRTE');
SQL> SELECT /*+ NDEX(T_ALAS,DX_T) */ COUNT(*) FROM T T_ALAS WHERE OBJECT_NAME = 'T';

O Banco de Dados est lento agora.

Encontrar indcios do gargalo na V$SESSON_WAT.

Encontrar o SD na V$SESSON_WAT.

Encontrar o maior Wait Event na V$SESSON_EVENT.

Corrigir o maior Wait Event possvel.

O Banco de Dados estava lento ontem.

Encontrar indcios do gargalo na V$SYSTEM_EVENT.

Encontrar o maior Wait Event via Statspack / AWR.

Corrigir o maior Wait Event possvel.

Este SQL est lento.

Executar com Extended SQL Trace.

Encontrar o maior Wait Event via tkprof.

Corrigir o maior Wait Event possvel.


118
"en'rios de n'lise
.tats,ac# > &R
119

.tats,ac# > .Pre,ort


$ sqlplus / AS SYSDBA
SQL> @?/rdbms/admin/spcreate.sql
SQL> @?/rdbms/admin/spauto.sql
SQL> EXECUTE STATSPACK.SNAP;
SQL> @?/rdbms/admin/spreport.sql
&R > .4 Re,ort
SQL> EXEC dbms_workload_repository.create_snapshot;
SQL> @?/rdbms/admin/awrrpt.sql
120
.tats,ac# > &R
4ands O+ 5
.tats,ac# > &R
121
"rie uma T2)1.P"1 chamada .O1@ com QTO1VT1+D O+6
Tire um .+P.4OT a*ulso6
$ sqlplus / AS SYSDBA
SQL> EXEC DBMS_WORKLOAD_REPOSTORY.CREATE_SNAPSHOT;
1<ecute a criao do es!uema .O16
$ cd swingbench/bin
./oewizard
Tire outro .+P.4OT a*ulso6
$ sqlplus / AS SYSDBA
SQL> EXEC DBMS_WORKLOAD_REPOSTORY.CREATE_SNAPSHOT;
Tire um relatJrio &R com,arando os dois .+P.4OTs6
SQL> @?/rdbms/admin/awrrpt.sql
nalise o relatJrio &R6
122
)ab 9610 &R
Resource Plan
123
.e,arao de Recursos ,or0

ORACLE_USER

SERVCE_NAME

CLENT_OS_USER

CLENT_PROGRAM

CLENT_MACHNE

MODULE_NAME

MODULE_NAME_ACTON

SERVCE_MODULE

SERVCE_MODULE_ACTON
"ontrole dos Recursos0

CPU

Sesses Ativas

Paralelismo

/O (>= 11gR1)
124
Resource Plan
125
Resource Plan
Mudanas de ,lanos0
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'PEAKTME';
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'OFF-PEAK';
Monitorao0

DBA_RSRC_CONSUMER_GROUP_PRVS

DBA_RSRC_PLANS

V$SESSON

V$RSRC_PLAN

V$RSRC_CONSUMER_GROUP

V$RSRC_SESSON_NFO

V$RSRC_PLAN_HSTORY

V$RSRC_CONS_GROUP_HSTORY

V$RSRCMGRMETRC

V$RSRCMGRMETRC_HSTORY
126
Resource Plan
)2 11 W Resource Plan
4ands On 5
127
nalise o cJdigo do ar!ui*o ResourcePlan6s!l6
ltere o ar!ui*o ,ara su,rir as necessidades de trPs ti,os de uso do banco
de dados0

Usurio SOE: OLTP, deve ter muita prioridade durante o dia, e pouca durante a noite.

Usuario HR: B, deve ter pouca pridoridade durante o dia e muita durante a noite.

Usurio SCOTT: s pode utilizar CPU que nenhum dos usurios acima estiver utilizando.

Outros: s podem utilizar CPU que nenhum dos usurios acima estiver utilizando.
128
)ab 1N61 W Resource Plan
Re*iso
129

O 2anco de Dados est' lento agora0

Encontrar indcios do gargalo na V$SYSTEM_EVENT.

Encontrar indcios do gargalo na V$SESSON_WAT.

Encontrar o(s) SD(s) ofensor na V$SESSON_WAT.

Encontrar o maior Wait Event deste(s) SD(s) na V$SESSON_EVENT.

Corrigir o maior Wait Event possvel.

Se o tempo esta satisfatrio, finalizar o processo.

O 2anco de Dados esta*a lento ontem0

Encontrar indcios do gargalo na V$SYSTEM_EVENT.

Encontrar o maior Wait Event via Statspack / AWR.

Corrigir o maior Wait Event possvel.

Se o tempo esta satisfatrio, finalizar o processo.

1ste .=) est' lento0

Executar o comando SQL com Extended SQL Trace.

Encontrar indcios do gargalo durante a execuo do SQL Trace.

Encontrar o maior Wait Event via tkprof.

Corrigir o maior Wait Event possvel.

Se o tempo esta satisfatrio, finalizar o processo.


130
Mtodo de Tuning

Você também pode gostar