Upload
alexandre-lira
View
281
Download
0
Embed Size (px)
Citation preview
7/27/2019 Tunning Oracle
1/130
Oracle Performance Diagnostics & Tuning
9iR1 a 11gR2
Ricardo Portilho [email protected]
1
7/27/2019 Tunning Oracle
2/130
Performance de Sistemas Computacionais s pode ser medida em TEMPO. Performance Tuning deve ser reativa. Performance Tuning deve ter ROI.
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: TI 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 efeitocolateral, ele j viria habilitado. Desenvolva um mtodo de convencimento gerencial. Por algo chamar-se Storage, no quer dizer que ele no tenha problemas.
KISS (Keep It Simple, Stupid): a probabilidade de falha cresce linearmente com o aumento decomplexidade. Saiba diser No. Saiba dizer No sei.
2
Minha abordagem
7/27/2019 Tunning Oracle
3/130
Performance Diagnostics & Tuning
3
7/27/2019 Tunning Oracle
4/130
4
Mistificao
7/27/2019 Tunning Oracle
5/130
Mtodos Antigos
5
7/27/2019 Tunning Oracle
6/130
Experincia Intuio
Impreciso Tempo Sorte Recursos
6
Requisitos
7/27/2019 Tunning Oracle
7/1307
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.
7/27/2019 Tunning Oracle
8/130
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
Checklist Tuning
7/27/2019 Tunning Oracle
9/130
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
7/27/2019 Tunning Oracle
10/130
KIWI = Kill It With Iron; Adicionar Memria RAM;
Adicionar CPUs; Melhorar o I/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
KIWI Tuning
7/27/2019 Tunning Oracle
11/130
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
7/27/2019 Tunning Oracle
12/130
O que est errado?
12
7/27/2019 Tunning Oracle
13/130
7/27/2019 Tunning Oracle
14/13014
Lendas do Oracle
7/27/2019 Tunning Oracle
15/130
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 HINTs, 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 DATAFILEs devero ter no mximo 2GB / 10GB / xGB. No habilitars AUTOEXTEND ON. Devers executar COMMIT a cada N linhas. Utilizars RAID 5, pois mais rpido para leituras
No permitirs mais que um SWITCH a cada 20 minutos. Mas no ters grandes REDO LOGs. Executars REBUILD 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 RATIOS estiverem altos, felizes estaro teus usurios.
Sempre que possvel, aumentars seu DB_CACHE_SIZE 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_SIZE. AUTOMATIC SQL TUNING um dos cavaleiros do apocalipse.
15
Lendas do Oracle
7/27/2019 Tunning Oracle
16/130
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
7/27/2019 Tunning Oracle
17/130
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 Area
7/27/2019 Tunning Oracle
18/13018
O chefe e o atraso
7/27/2019 Tunning Oracle
19/13019
Como saber quem vence?
7/27/2019 Tunning Oracle
20/130
O Mtodo Correto
20
7/27/2019 Tunning Oracle
21/130
21
A Peste Negra
7/27/2019 Tunning Oracle
22/130
22
Tempo
7/27/2019 Tunning Oracle
23/130
Tempo Computacional
23
R = S + W
OU
Response Time = Service Time + Wait Time
7/27/2019 Tunning Oracle
24/130
24
Instrumentao: Mainframe
7/27/2019 Tunning Oracle
25/130
25
Instrumentao: Solaris
7/27/2019 Tunning Oracle
26/130
Oracle Wait Interface
26
O l W it I t f
7/27/2019 Tunning Oracle
27/130
27
Oracle Wait Interface
N i t d OWI
7/27/2019 Tunning Oracle
28/130
Benchmark 7.0.12: Juan Loainza YAPP Paper: Anjo Kolk
28
Nascimento da OWI
E l d OWI
7/27/2019 Tunning Oracle
29/130
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
Evoluo da OWI
E t i M
7/27/2019 Tunning Oracle
30/130
30
Enterprise Manager
7/27/2019 Tunning Oracle
31/130
Conceitos Bsicos
31
A it t O l
7/27/2019 Tunning Oracle
32/130
32
Arquitetura Oracle
P t l t
7/27/2019 Tunning Oracle
33/130
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
Parmetros elementares
7/27/2019 Tunning Oracle
34/130
Hands ON !
Parmetros elementares
34
Lab 1 1: Parmetros elementares
7/27/2019 Tunning Oracle
35/130
Verifique os parmetros elementares em seu banco de dados. Altere o parmetro memory_max_targetpara 0; Altere o parmetro memory_targetpara 0; Altere o parmetro sga_max_size para metade da RAM da mquina; Altere o parmetro sga_targetpara 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 parmetropga_aggregated_targetpara 100M;
35
Lab 1.1: Parmetros elementares
Granularidades de Anlise
7/27/2019 Tunning Oracle
36/130
SQL Statement Session Instance
36
Granularidades de Anlise
Cenrios de Anlise
7/27/2019 Tunning Oracle
37/130
37
Cenrios de Anlise
H lentido agora Tivemos lentido ondem
Ferramentas de Anlise
7/27/2019 Tunning Oracle
38/130
Dynamic Performance Views Extended SQL Trace (Event 10046) Statspack / AWR
38
Ferramentas de Anlise
Wait Classes
7/27/2019 Tunning Oracle
39/130
Administrative Application Cluster Commit Concurrency Configuration Idle Network
Other Queueing Scheduler System I/O User I/O
39
Wait Classes
7/27/2019 Tunning Oracle
40/130
Limitaes da OWI
40
Limitaes: OWI
7/27/2019 Tunning Oracle
41/130
No um monitoramento End-to-End Sem dados de consumo de CPU Sem dados de consumo de Memria Bugs Imprecises
41
Limitaes: OWI
Limitaes: Views
7/27/2019 Tunning Oracle
42/130
Sem histrico
42
Limitaes: Views
Limitaes: Extended SQL Trace
7/27/2019 Tunning Oracle
43/130
Muitos dados Altssima granularidade Desempenho Correlao de informaes Sesses PARALLEL Sesses SHARED SERVER Waits s disponveis em >=9iR1 Suporte oficial s em >10gR1
43
Limitaes: Extended SQL Trace
Limitaes: Statspack / AWR
7/27/2019 Tunning Oracle
44/130
Baixa granularidade Apenas histrico
44
Limitaes: Statspack / AWR
7/27/2019 Tunning Oracle
45/130
Hands ON !
Dynamic Performance Views
45
Lab 2 1: Views
7/27/2019 Tunning Oracle
46/130
V$SYSTEM_EVENT V$SESSION_EVENT
V$SESSION_WAIT
Verifique as Dynamic Performance Views da OWI 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
Lab 2.1: Views
7/27/2019 Tunning Oracle
47/130
Wait Events mais comuns
47
Wait Events mais comuns
7/27/2019 Tunning Oracle
48/130
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
Wait Events mais comuns
7/27/2019 Tunning Oracle
49/130
Hands ON !
Simulando Wait EventsGravaes
49
Lab 3.1: Gravaes
7/27/2019 Tunning Oracle
50/130
Habilite o usurio SCOTT.SQL> ALTER USER SCOTT ACCOUNT UNLOCK IDENTIFIED BY TIGER;SQL> GRANT SELECT ANY DICTIONARY TO SCOTT;
Abra uma sesso com o SCOTT com SET TIMING ON.SQL> CONN SCOTT/TIGERSQL> SET TIMING ON
Em outra sesso, com o SYS, verifique (vrias vezes seguidas) o contedo
da V$SESSION_WAIT durante a execuo dos comandos do SCOTT aseguir.
Com o usurio SCOTT, crie uma grande tabela, com pelo menos 4GB.SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;SQL> INSERT INTO T SELECT * FROM T;SQL> INSERT INTO T SELECT * FROM T;SQL> ...SQL> INSERT INTO T SELECT * FROM T;SQL> COMMIT;
50
Lab 3.1: Gravaes
Lab 3.2: Gravaes
7/27/2019 Tunning Oracle
51/130
Feche e abra a sesso com o SCOTT com SET TIMING ONSQL> CONN SCOTT/TIGERSQL> SET TIMING ON
Em outra sesso, com o SYS, verifique o contedo da V$SESSION_EVENTrelacionado a sesso do SCOTT.SQL> SELECT SID FROM V$SESSION WHERE USERNAME = 'SCOTT';SQL> SELECT EVENT, TOTAL_WAITS, TOTAL_TIMEOUTS, AVERAGE_WAIT FROMV$SESSION_EVENT WHERE SID = 17 ORDER BY 4;
Com o usurio SCOTT, duplique a grande tabela.SQL> CREATE TABLE T2 AS SELECT * FROM T;
Na sesso do SYS, aps a duplicao da tabela, verifique novamente ocontedo da V$SESSION_EVENT relacionado a sesso do SCOTT
Remova a tabela T2, feche e abra a sesso com o SCOTT, e repita aoperao. Durante a repetio da operao, verifique as mudanas docontedo da V$SESSION_EVENT relacionado a sesso do SCOTT.
51
Lab 3.2: Gravaes
Lab 3.3: Gravaes
7/27/2019 Tunning Oracle
52/130
Responda as seguintes perguntas:- Onde foi gasto mais tempo nesta sesso?- A que se referem os maiores Wait Events?
- Qual dos maiores Wait Events podem ser reduzidos?- A eliminao de um Wait Event que pode ser reduzido, causar uma melhoria de quanto tempo?- Como reduzir este Wait Event?
Corrija a causa deste Wait Event.
Remova a tabela T2, feche e abra a sesso com o SCOTT, e repita a operao.
52
Lab 3.3: Gravaes
Lab 3.4: Gravaes
7/27/2019 Tunning Oracle
53/130
Responda as seguintes perguntas:- Onde foi gasto mais tempo nesta sesso?- A que se referem os maiores Wait Events?
- Qual dos maiores Wait Events podem ser reduzidos?- A eliminao de um Wait Event que pode ser reduzido, causar uma melhoria de quanto tempo?- Como reduzir este Wait Event?
Corrija a causa deste Wait Event.
Remova a tabela T2, feche e abra a sesso com o SCOTT, e repita a operao.
53
Lab 3.4: Gravaes
Lio de casa
7/27/2019 Tunning Oracle
54/130
Verifiquem as Dynamic Performance Views de seus servidores. Tragam suas dvidas para a aula.
54
Lio de casa
7/27/2019 Tunning Oracle
55/130
Extended SQL Trace
55
Nveis Extended SQL Trace
7/27/2019 Tunning Oracle
56/130
0 = Standard Trace 4 = Bind Variables 8 = Wait States 12 = Bind Variables + Wait States
56
SQ
Ativar Extended SQL Trace
7/27/2019 Tunning Oracle
57/130
Em toda a instncia Em sua sesso Em outra sesso
57
Q
Detalhes Extended SQL Trace
7/27/2019 Tunning Oracle
58/130
58
Q
*** 2010-03-22 11:43:12.276WAIT #9: nam='db file scattered read' ela= 183330 file#=4 block#=9124 blocks=26 obj#=74574WAIT #9: nam='db file scattered read' ela= 2528 file#=4 block#=9150 blocks=26 obj#=74574
WAIT #9: nam='db file scattered read' ela= 170358 file#=4 block#=9176 blocks=26 obj#=74574WAIT #9: nam='db file scattered read' ela= 96261 file#=4 block#=9202 blocks=26 obj#=74574WAIT #9: nam='db file scattered read' ela= 1669 file#=4 block#=9228 blocks=26 obj#=74574WAIT #9: nam='db file scattered read' ela= 26055 file#=4 block#=9254 blocks=26 obj#=74574WAIT #9: nam='db file scattered read' ela= 4760 file#=4 block#=9280 blocks=26 obj#=74574WAIT #9: nam='db file scattered read' ela= 108783 file#=4 block#=9306 blocks=26 obj#=74574tim=1269268992840594
=====================
tkprof
7/27/2019 Tunning Oracle
59/130
59
p
Limitaes: Extended Trace
7/27/2019 Tunning Oracle
60/130
No um monitoramento End-to-End Sem dados de consumo de CPU Sem dados de consumo de Memria
Bugs Imprecises Muitos dados Altssima granularidade Desempenho Correlao de informaes Sesses PARALLEL Sesses SHARED SERVER Waits s disponveis em >=9iR1 Suporte oficial s em >10gR1
60
7/27/2019 Tunning Oracle
61/130
Hands ON !
Extended SQL TraceFull Table Scan
61
Lab 4.1: Extended SQL Trace
7/27/2019 Tunning Oracle
62/130
Feche e abra a sesso com o SCOTT com SET TIMING ONSQL> EXIT$ sqlplus SCOTT/TIGER
SQL> SET TIMING ON
Com o usurio SYS, habilite o Extended Trace para a sesso do SCOTT:SQL> SELECT S.USERNAME, P.SPID OS_PROCESS_ID, P.PID ORACLE_PROCESS_IDFROM V$SESSION 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;
Em outro terminal, verifique o contedo do Trace.$ tail -f /u01/app/oracle/diag/rdbms/test11gr2/TEST11GR2/trace/TEST11GR2_ora_8708.trc
62
Lab 4.2: Extended SQL Trace
7/27/2019 Tunning Oracle
63/130
Com o usurio SCOTT, apague o contedo da grande tabela, altere o valordo parmetro db_file_multiblock_read_count (apenas na sesso) e reinsiraos dados.
SQL> TRUNCATE TABLE T2;SQL> ALTER SESSION SET db_file_multiblock_read_count = 8;SQL> INSERT INTO T2 SELECT * FROM T;SQL> COMMIT;
Continue verificando o contedo do Trace durante a execuo da operao.
Ao trmino da execuo, verifique os valores de V$SESSION_EVENT dasesso do SCOTT. Guarde este resultado.
Execute o tkprof nos Trace gerado.$ tkprof /u01/app/oracle/diag/rdbms/test11gr2/TEST11GR2/trace/TEST11GR2_ora_8708.trc
Analise o relatrio gerado pelo tkprof.
Repita a operao, mas com db_file_multiblock_read_count de 50 e 1000.
63
7/27/2019 Tunning Oracle
64/130
Wait Events - Detalhes
64
Ensinar a Pescar
7/27/2019 Tunning Oracle
65/130
65
Referncia
7/27/2019 Tunning Oracle
66/130
66
Performance Tuning Guide
7/27/2019 Tunning Oracle
67/130
67
MOS
7/27/2019 Tunning Oracle
68/130
68
buffer busy
7/27/2019 Tunning Oracle
69/130
Explicao: O bloco solicitado est em uso, pois outra sesso est carregando obloco para o DB_CACHE_SIZE, ou outra sesso est utilizando o bloco noDB_CACHE_SIZE em um modo incompatvel.
Causa: DB_CACHE_SIZE insuficiente, ou SQL ineficiente.Correo: Aumente o DB_CACHE_SIZE ou altere o SQL.
P1: Nmero do DATAFILE.P2: Nmero do bloco.P3: ID a solicitao vem de diferentes locais da sesso.
69
buffer busy
7/27/2019 Tunning Oracle
70/130
70
free buffer
7/27/2019 Tunning Oracle
71/130
Explicao: O RDBMS aguarda blocos de DB_CACHE_SIZE livres.Causa: DB_CACHE_SIZE insuficiente.Correo: Aumente o DB_CACHE_SIZE.
P1: Nmero do DATAFILE.P2: Nmero do bloco.
71
read by other session
7/27/2019 Tunning Oracle
72/130
Explicao: O bloco solicitado est em uso, pois outra sesso est carregando obloco para o DB_CACHE_SIZE, ou outra sesso est utilizando o bloco noDB_CACHE_SIZE em um modo incompatvel.
Causa: DB_CACHE_SIZE insuficiente, ou SQL ineficiente.Correo: Aumente o DB_CACHE_SIZE ou altere o SQL.
P1: Nmero do DATAFILE.P2: Nmero do bloco.P3: Razo (=10g).
72
control file parallel write
7/27/2019 Tunning Oracle
73/130
Explicao: Espera de I/O para gravar em CONTROLFILEs.Causa: Excesso de gravao nos CONTROLFILEs ou I/O ineficiente.Correo: Minimize as gravaes nos CONTROLFILEs ou melhore o mecanismo
de I/O.
P1: Quntidade de CONTROLFILEs.P2: Quantidade de blocos.P3: Quantidade de solicitaes de I/O.
73
control file single write
7/27/2019 Tunning Oracle
74/130
Explicao: Espera de I/O para gravar em CONTROLFILEs.Causa: Excesso de gravao nos CONTROLFILEs ou I/O ineficiente.Correo: Minimize as gravaes nos CONTROLFILEs ou melhore o mecanismo
de I/O.
P1: Nmero do CONTROLFILE.P2: Nmero do bloco.P3: Quantidade de blocos.
74
control file sequential read
7/27/2019 Tunning Oracle
75/130
Explicao: Espera de I/O para ler os CONTROLFILEs.Causa: Excesso de leitura nos CONTROLFILEs ou I/O ineficiente.Correo: Minimize as leituras nos CONTROLFILEs ou melhore o mecanismo de
I/O.
P1: Nmero do CONTROLFILE.P2: Nmero do bloco.P3: Quantidade de blocos.
75
db file parallel write
7/27/2019 Tunning Oracle
76/130
Explicao: Gravaes de dados nos DATAFILEs esperam pelo I/O.Causa: Excesso de gravaes ou lentido de I/O.Correo: Minimize as gravaes ou melhore o mecanismo de I/O.
P1: Quantidade de requisies.P2: Interrupt.P3: Timeout.
76
db file single write
7/27/2019 Tunning Oracle
77/130
Explicao: Uma gravao no HEADER do DATAFILE esperam pelo I/O.Causa: Excesso de gravaes no HEADER dos DATAFILEs ou lentido de I/O.Correo: Minimize as gravaes no HEADER dos DATAFILEs ou melhore o
mecanismo de I/O.
P1: Quantidade de requisies.P2: Interrupt.P3: Timeout.
77
db file parallel read
7/27/2019 Tunning Oracle
78/130
Explicao: Durante RECOVER ou durante PREFETCHING, leituras deDATAFILEs esperam pelo I/O.Causa: RECOVER muito longo, PREFETCHING excessivo, ou lentido de I/O.
Correo: Acelere o RECOVER, minimize o PREFETCHING, ou melhore omecanismo de I/O.
P1: Quantidade de DATAFILEs.P2: Quantidade de blocos.P3: Quantidade de requisies.
78
User I/O
7/27/2019 Tunning Oracle
79/130
79
Influenciando o Otimizador
7/27/2019 Tunning Oracle
80/130
CURSOR_SHARING DB_FILE_MULTIBLOCK_READ_COUNT OPTIMIZER_INDEX_CACHING
OPTIMIZER_INDEX_COST_ADJ OPTIMIZER_MODE PGA_AGGREGATE_TARGET STAR_TRANSFORMATION_ENABLED
80
db file scattered read
7/27/2019 Tunning Oracle
81/130
Explicao: Durante FTS, leituras de DATAFILEs esperam pelo I/O.Causa: DB_CACHE_SIZE insuficiente, FTS desnecessrio ou lentido de I/OCorreo: Aumente o DB_CACHE_SIZE, elimine o FTS, ou melhore o
mecanismo de I/O.
P1: Nmero do DATAFILE.P2: Bloco inicial.P3: Quantidade de blocos.
81
db file sequential read
7/27/2019 Tunning Oracle
82/130
Explicao: Durante a leitura de um bloco, leituras de DATAFILEs esperam pelomecanismo de I/O.Causa: DB_CACHE_SIZE insuficiente, leitura desnecessria ou lentido de I/O
Correo: Aumente o DB_CACHE_SIZE, elimine a leitura desnecessria, oumelhore o mecanismo de I/O.
P1: Nmero do DATAFILE.P2: Bloco inicial.P3: Quantidade de blocos.
82
direct path read / direct path write
7/27/2019 Tunning Oracle
83/130
Explicao: Leitura / gravao entre DATAFILEs / TEMPFILEs e PGA.Causa: PGA insuficiente, ou lentido de I/O.Correo: Aumente a PGA, ou melhore o mecanismo de I/O.
P1: Nmero do arquivo (DATAFILE ou TEMPFILE).P2: Bloco inicial.P3: Quantidade de blocos.
83
enqueue
7/27/2019 Tunning Oracle
84/130
Explicao: Mecanismo de fila ordenada do RDBMS.Causa: Diversas, dependendo do tipo de fila.Correo: Diversas, dependendo do tipo de fila.
P1: Tipo ou modo da enqueue.P2: ID1 (como na V$LOCK).P3: ID2 (como na V$LOCK).
Problemas mais comuns: TX, Transaction TM, DML Enqueue HW, High-Water Lock SQ, Sequence Number Enqueue CF, Controlfile Transaction
84
latch free
7/27/2019 Tunning Oracle
85/130
Explicao: Mecanismo de fila desordenada do RDBMS.Causa: Diversas, dependendo do tipo de fila.Correo: Diversas, dependendo do tipo de fila.
P1: Endereo da Latch (como na V$LATCH).P2: Nmero da Latch (como na V$LATCH).P3: Quantidade de tentativas.
Problemas mais comuns: shared pool library cache cache buffers lru chain cache buffers chains row cache objects
85
library cache pin / library cache lock
7/27/2019 Tunning Oracle
86/130
Explicao: Uso incompatvel do objeto entre duas sesses.Causa: Uso do objeto de forma incompatvel entre duas sesses.Correo: Finalizar o uso do objeto por uma das sesses.
P1: Endereo do objeto.P2: Endereo do load lock.P3: Mode + Namespace.
SQL> SELECT /*+ ORDERED */ W1.SID WAITING_SESSION, H1.SID HOLDING_SESSION,
W.KGLLKTYPE LOCK_OR_PIN, 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_REQUESTEDFROM DBA_KGLLOCK W, DBA_KGLLOCK H, V$SESSION W1, V$SESSION 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
log buffer space
7/27/2019 Tunning Oracle
87/130
Explicao: Mais espao no LOG_BUFFER necessrio para gravaes.Causa: LOG_BUFFER insuficiente, REDO LOGs insuficientes, ou I/O lento.Correo: Aumente o LOG_BUFFER, aumente a quantidade / tamanhode REDO
LOGs, ou melhore o mecanismo de I/O.
P1: Quantidade de REDO LOGs.P2: Quantidade de blocos do sistema operacional.P3: Quantidade de requisies de I/O.
87
log file parallel write
7/27/2019 Tunning Oracle
88/130
Explicao: Durante gravao de REDO LOGs, o LGWR espera pelo I/O.Causa: Excesso de membros nos grupos de REDO LOGs ou lentido de I/O.Correo: Reduza a quantidade de membros nos grupos de REDO LOGs ou
melhore o mecanismo de I/O.
P1: Quantidade de REDO LOGs.P2: Quantidade de blocos de sistema operacional.P3: Quantidade de requisies de I/O.
88
log file single write
7/27/2019 Tunning Oracle
89/130
Explicao: Durante gravao no HEADER de um REDO LOGs, o LGWRespera pelo I/O.Causa: Excesso de gravaes no HEADER do REDO LOG ou lentido de I/O.
Correo: Reduza a quantidade de gravaes no HEADER do REDO LOG oumelhore o mecanismo de I/O.
P1: Nmero do REDO LOG.P2: Nmero do bloco.P3: Quantidade de blocos.
89
log file sequential read
7/27/2019 Tunning Oracle
90/130
Explicao: Durante leitura de REDO LOGs, o LGWR espera pelo I/O.Causa: Lentido de I/O.Correo: Melhore o mecanismo de I/O.
P1: Nmero do REDO LOG.P2: Nmero do bloco.P3: Quantidade de blocos.
90
7/27/2019 Tunning Oracle
91/130
log file sync
7/27/2019 Tunning Oracle
92/130
Explicao: Um CHECKPOINT foi executado, e precisa ser registrado no REDOLOG, e o LGRW est aguardando pelo mecanismo de I/O.Causa: COMMIT em quantidade excessiva, ou I/O ineficiente.
Correo: Reduzir a quantidade de COMMITs ou otimizar o mecanismo de I/O.
P1: Nmero do Log Buffer.P2: No utilizado.P3: No utilizado.
92
SQL*Net message to / from client
7/27/2019 Tunning Oracle
93/130
Explicao: Espera durante comunicao via rede com o protocolo SQL*Net.Causa: Sesso inativa, latncia de rede ou limitao do cliente.Correo: Eliminar a sesso inativa, minimizar a latncia na rede ou minimizar a limitaodo cliente.
P1: Driver de rede.P2: Quantidade de bytes.P3: No utilizado.
Variaes
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
7/27/2019 Tunning Oracle
94/130
Hands ON !
Simulando Wait Events
LGWR x DBWR
94
Lab 5.1: LGWR x DBWR
7/27/2019 Tunning Oracle
95/130
Feche e abra a sesso com o SCOTT com SET TIMING ONSQL> CONN SCOTT/TIGERSQL> SET TIMING ON
Com o usurio SCOTT, apague o contedo da grande tabela, e reinsira os
dados.SQL> TRUNCATE TABLE T2;SQL> INSERT INTO T2 SELECT * FROM T;SQL> COMMIT;
Ao trmino da execuo, verifique os valores de V$SESSION_EVENT da sessodo SCOTT. Guarde o resultado.
Altere o valor do parmetro log_buffer para 512k, repita a operao, e compare.Altere o valor do parmetro log_buffer para 10m, repita a operao, e compare.
Altere o valor do parmetro log_buffer para 100m, repita a operao, e compare.Mantenha log_buffer com a configurao mais otimizada.Altere o parmetro FAST_START_MTTR_TARGET para 1, repita a operao, ecompare.
95
7/27/2019 Tunning Oracle
96/130
Parallel SQL
96
Parallel SQL
7/27/2019 Tunning Oracle
97/130
Permite Query, DML e DDL.
Um objeto pode ter Parallel permanente, independente do SQL:SQL> ALTER TABLE SCOTT.T PARALLEL DEGREE 4;
O Parallel SQL pode ser utilizado diretamente no SQL:SQL> SELECT /*+ PARALLEL(T2,4) */ COUNT(*) FROM T2;
97
Parallel SQL
7/27/2019 Tunning Oracle
98/130
Parmetros:PARALLEL_ADAPTIVE_MULTI_USER = true ou false.PARALLEL_AUTOMATIC_TUNING: Deprecated.
PARALLEL_DEGREE_LIMIT = CPU, IO ou Nmero.PARALLEL_DEGREE_POLICY = MANUAL, LIMITED ou AUTO.PARALLEL_EXECUTION_MESSAGE_SIZE = De 2148 a 32768PARALLEL_FORCE_LOCAL = true ou false.PARALLEL_INSTANCE_GRouP = Oracle RAC service_name ou group_name.PARALLEL_IO_CAP_ENABLED = Deprecated.PARALLEL_MAX_SERVERS = De 0 a 3600.
PARALLEL_MIN_PERCENT = De 0 a 100.PARALLEL_MIN_SERVERS = Nmero entre 0 e PARALLEL_MAX_SERVERS.PARALLEL_MIN_TIME_THRESHOLD = AUTO | Segundos.PARALLEL_SERVERS_TARGET = Nmero entre 0 e PARALLEL_MAX_SERVERS.PARALLEL_THREADS_PER_CPU = Qualquer nmero.
98
7/27/2019 Tunning Oracle
99/130
Hands ON !
Simulando Wait Events
Design de Aplicao
99
R i i i I t
Lab 6.1: Design de Aplicao
7/27/2019 Tunning Oracle
100/130
Reinicie a Instance.Verifique o contedo da V$SYSTEM_EVENT. Guarde esta consulta.
Abra a sesso com o SCOTT com SET TIMING ON.Em seguida, faa um SELECT da tabela toda.$ sqlplus SCOTT/TIGERSQL> SET TIMING ONSQL> SELECT COUNT(*) FROM T;
Ao trmino da execuo, verifique os valores de V$SESSION_EVENT dasesso do SCOTT. Guarde o resultado.
Repita a operao com PARALLEL, e compare.SQL> SELECT /*+ PARALLEL(T 4) */ COUNT(*) FROM T;SQL> SELECT /*+ PARALLEL(T 20) */ COUNT(*) FROM T;
100
Lab 6.2: Design de Aplicao
C i t t b l i SCOTT
7/27/2019 Tunning Oracle
101/130
101
Crie esta tabela com o usurio SCOTT:SQL> CREATE TABLE T3 (NUMERO NUMBER);
Observe o contedo dos seguintes scripts Perl, os execute, e compare:$ perl /home/oracle/CommitNOK_BindsNOK.pl$ perl /home/oracle/CommitNOK_BindsOK.pl$ perl /home/oracle/CommitOK_BindsNOK.pl$ perl /home/oracle/CommitOK_BindsOK.pl
Lab 6.3: Design de Aplicao
Crie um ndice BITMAP na tabela T3 com o usurio SCOTT:
7/27/2019 Tunning Oracle
102/130
102
Crie um ndice BITMAP na tabela T3 com o usurio SCOTT:SQL> CREATE BITMAP INDEX IDX_BITMAP_T3 ON T3(NUMERO);
Execute um INSERT nesta tabela, sem executar COMMIT ou fechar asesso.:SQL> INSERT INTO T3 VALUES (1);
Abra outra sesso com o SCOTT, e faa outro INSERT na tabela T3:SQL> INSERT INTO T3 VALUES (1);
Com o usurio SYS, verifique a V$SESSION_WAIT.
Repita o exerccio, mas utilizando um ndice BTREE:SQL> DROP INDEX IDX_BITMAP_T3;SQL> CREATE INDEX IDX_T3 ON T3(NUMERO);
Lab 6.4: Design de Aplicao
Abra uma sesso com o usurio SCOTT com SET TIMING ON:
7/27/2019 Tunning Oracle
103/130
103
Abra uma sesso com o usurio SCOTT com SET TIMING ON:
Crie um ndice BTREE na coluna OWNER da tabela T:
SQL> CREATE INDEX IDX_T ON T(OWNER);
Execute este SQL:SQL> SELECT COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = 'T';
Com o usurio SYS, verifique o contedo da V$SESSION_EVENT da sessodo SCOTT. Guarde o resultado.
Feche e abra a sesso com o SCOTT com SET TIMING ON
Altere a sesso para utilizar o Rule Based Optimizer:SQL> ALTER SESSION SET OPTIMIZER_MODE=RULE;
Execute este SQL:SQL> SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS WHEREOBJECT_NAME = 'T';
7/27/2019 Tunning Oracle
104/130
Estatsticas
104
O i i S i i
Estatsticas
7/27/2019 Tunning Oracle
105/130
Optimizer StatisticsTable statistics
Number of rows
Number of blocksAverage row lengthColumn statistics
Number of distinct values (NDV) in columnNumber of nulls in columnData distribution (histogram)Extended statistics
Index statisticsNumber of leaf blocksLevelsClustering factor
System StatisticsI/O performance and utilizationCPU performance and utilization
105
DBMS AUTO TASK ADMIN DISABLE
Estatsticas
7/27/2019 Tunning Oracle
106/130
DBMS_AUTO_TASK_ADMIN.DISABLE
DBMS_STATS.GATHER_DATABASE_STATSDBMS_STATS.GATHER_DICTIONARY_STATSDBMS_STATS.GATHER_SCHEMA_STATSDBMS_STATS.GATHER_TABLE_STATSDBMS_STATS.GATHER_INDEX_STATS
DBMS_STATS.DELETE_TABLE_STATSDBMS_STATS.LOCK_TABLE_STATS
DBMS_STATS.EXPORT_*_STATSDBMS_STATS.IMPORT_*_STATS
OPTIMIZER_DYNAMIC_SAMPLING
DBMS_STATS.GATHER_SYSTEM_STATS
106
7/27/2019 Tunning Oracle
107/130
Hands ON !
DBMS_SQLTUNE
107
Lab 7.1: DBMS_SQLTUNE
Escolha um dos SQLs mais lentos na V$SQL e o analise com DBMS SQLTUNE
7/27/2019 Tunning Oracle
108/130
108
Escolha um dos SQLs mais lentos na V$SQL e o analise com DBMS_SQLTUNE.
DECLARE RET_VAL VARCHAR2(4000);BEGIN
RET_VAL := DBMS_SQLTUNE.CREATE_TUNING_TASK(SQL_ID => '12345678910', SCOPE =>DBMS_SQLTUNE.SCOPE_COMPREHENSIVE, TIME_LIMIT => 60, TASK_NAME => 'Portilho Tuning Task',DESCRIPTION => 'Portilho Tuning Task');END;/
BEGIN DBMS_SQLTUNE.EXECUTE_TUNING_TASK('Portilho Tuning Task'); END;
/
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('Portilho Tuning Task') RECOMMENTATION FROMDUAL;SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK('Portilho Tuning Task') RECOMMENTATION FROMDUAL;
BEGIN DBMS_SQLTUNE.DROP_TUNING_TASK('Portilho Tuning Task'); END;
/
7/27/2019 Tunning Oracle
109/130
Fragmentao
109
Blocos logicamente contg os espalhados fisicamente
Fragmentao
7/27/2019 Tunning Oracle
110/130
Blocos logicamente contguos espalhados fisicamente. Espao livre na TABLESPACE / DATAFILEs. Espao livre da TABELA.
Espao livre no NDICE. Row Chaining. Migrated Rows. EXTENTs.
110
Fragmentao: COALESCE
7/27/2019 Tunning Oracle
111/130
111
Fragmentao: COALESCE
7/27/2019 Tunning Oracle
112/130
112
Fragmentao: Row Chaining
7/27/2019 Tunning Oracle
113/130
113
Fragmentao: Row Migration
7/27/2019 Tunning Oracle
114/130
114
7/27/2019 Tunning Oracle
115/130
Hands ON !
DBMS_ADVANCED_REWRITE
115
Lab 8.1: DBMS_ADVANCED_REWRITE
Abra uma sesso com o usurio SCOTT com SET TIMING ON:
7/27/2019 Tunning Oracle
116/130
116
Abra uma sesso com o usurio SCOTT com SET TIMING ON:
Altere a sesso para utilizar o Rule Based Optimizer:SQL> ALTER SESSION SET OPTIMIZER_MODE=RULE;
Execute este SQL e anote seu tempo de execuo:SQL> SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS WHEREOBJECT_NAME = 'T';
Execute este SQL e anote seu tempo de execuo:
SQL> SELECT COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = 'T';
Com o usurio SYS, d as permisses necessrias para que o usurioSCOTT utilize o DBMS_ADVANCED_REWRITE:$ sqlplus / AS SYSDBASQL> GRANT EXECUTE ON DBMS_ADVANCED_REWRITE TO SCOTT;
SQL> GRANT CREATE MATERIALIZED VIEW TO SCOTT;
Lab 8.2: DBMS_ADVANCED_REWRITE
Na sesso do usurio SCOTT, execute o DBMS_ADVANCE_REWRITE:
7/27/2019 Tunning Oracle
117/130
117
, _ _BEGIN
SYS.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (NAME => 'PORTILHO_REWRITE',
SOURCE_STMT => 'SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS WHEREOBJECT_NAME = ''T''',DESTINATION_STMT => 'SELECT COUNT(OBJECT_NAME) FROM T T_ALIAS WHERE
OBJECT_NAME = ''T''',VALIDATE => FALSE,REWRITE_MODE => 'TEXT_MATCH');
END;/
Execute novamente este SELECT e verifique seu tempo de execuo:SQL> SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = 'T';
Remova o REWRITE, execute novamente o SELECT e verifique seu tempo deexecuo:SQL> EXEC SYS.DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE (NAME =>'PORTILHO_REWRITE');SQL> SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = 'T';
O Banco de Dados est lento agora
Cenrios de Anlise
7/27/2019 Tunning Oracle
118/130
O Banco de Dados est lento agora. Encontrar indcios do gargalo na V$SESSION_WAIT. Encontrar o SID na V$SESSION_WAIT.
Encontrar o maior Wait Event na V$SESSION_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
7/27/2019 Tunning Oracle
119/130
Statspack / AWR
119
Statspack / SPreport
Statspack / AWR
7/27/2019 Tunning Oracle
120/130
p p$ sqlplus / AS SYSDBASQL> @?/rdbms/admin/spcreate.sql
SQL> @?/rdbms/admin/spauto.sqlSQL> EXECUTE STATSPACK.SNAP;SQL> @?/rdbms/admin/spreport.sql
AWR / ASH ReportSQL> EXEC dbms_workload_repository.create_snapshot;
SQL> @?/rdbms/admin/awrrpt.sql
120
7/27/2019 Tunning Oracle
121/130
Hands ON !
Statspack / AWR
121
Crie uma TABLESPACE chamada SOE, com AUTOEXTEND ON.
Lab 9.1: AWR
7/27/2019 Tunning Oracle
122/130
,
Tire um SNAPSHOT avulso.
$ sqlplus / AS SYSDBASQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
Execute a criao do esquema SOE.$ cd swingbench/bin./oewizard
Tire outro SNAPSHOT avulso.$ sqlplus / AS SYSDBASQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
Tire um relatrio AWR comparando os dois SNAPSHOTs.SQL> @?/rdbms/admin/awrrpt.sql
Analise o relatrio AWR.
122
7/27/2019 Tunning Oracle
123/130
Resource Plan
123
Separao de Recursos por:
Resource Plan
7/27/2019 Tunning Oracle
124/130
p p ORACLE_USER SERVICE_NAME CLIENT_OS_USER CLIENT_PROGRAM CLIENT_MACHINE MODULE_NAME MODULE_NAME_ACTION SERVICE_MODULE SERVICE_MODULE_ACTION
Controle dos Recursos: CPU Sesses Ativas Paralelismo I/O (>= 11gR1)
124
Resource Plan
7/27/2019 Tunning Oracle
125/130
125
Mudanas de planos:
Resource Plan
7/27/2019 Tunning Oracle
126/130
pALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'PEAKTIME';ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'OFF-PEAK';
Monitorao: DBA_RSRC_CONSUMER_GROUP_PRIVS DBA_RSRC_PLANS V$SESSION V$RSRC_PLAN V$RSRC_CONSUMER_GROUP
V$RSRC_SESSION_INFO V$RSRC_PLAN_HISTORY V$RSRC_CONS_GROUP_HISTORY V$RSRCMGRMETRIC V$RSRCMGRMETRIC_HISTORY
126
7/27/2019 Tunning Oracle
127/130
LAB 11 Resource Plan
Hands On !
127
Analise o cdigo do arquivo ResourcePlan.sql.
Lab 10.1 Resource Plan
7/27/2019 Tunning Oracle
128/130
Altere o arquivo para suprir as necessidades de trs tipos de uso do banco
de dados: Usurio SOE: OLTP, deve ter muita prioridade durante o dia, e pouca durante a noite. Usuario HR: BI, 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
7/27/2019 Tunning Oracle
129/130
Reviso
129
7/27/2019 Tunning Oracle
130/130