Professional Documents
Culture Documents
Minha abordagem
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 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. KISS (Keep It Simple, Stupid): a probabilidade de falha cresce linearmente com o aumento de complexidade. Saiba diser No. Saiba dizer No sei.
Mistificao
Mtodos Antigos
Requisitos
Experincia Intuio Impreciso Tempo Sorte Recursos
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.
Checklist Tuning
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.
Ratios 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.
KIWI Tuning
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
Manager 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
12
Paradigma
13
Lendas do Oracle
14
Lendas 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 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
O carro e o leite
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
Ponte Area
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
O chefe e o atraso
18
19
O Mtodo Correto
20
A Peste Negra
21
Tempo
22
Tempo Computacional
23
Instrumentao: Mainframe
24
Instrumentao: Solaris
25
26
27
Nascimento da OWI
Benchmark 7.0.12: Juan Loainza YAPP Paper: Anjo Kolk
28
Evoluo da OWI
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
Enterprise Manager
30
Conceitos Bsicos
31
Arquitetura Oracle
32
Parmetros elementares
db_block_size db_file_multiblock_read_count
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
33
34
35
Granularidades de Anlise
SQL Statement Session Instance
36
Cenrios de Anlise
H lentido agora Tivemos lentido ondem
37
Ferramentas de Anlise
Dynamic Performance Views Extended SQL Trace (Event 10046) Statspack / AWR
38
Wait Classes
Administrative Application Cluster Commit Concurrency Configuration Idle Network Other Queueing Scheduler System I/O User I/O
39
Limitaes da OWI
40
Limitaes: OWI
No um monitoramento End-to-End Sem dados de consumo de CPU Sem dados de consumo de Memria Bugs Imprecises
41
Limitaes: Views
Sem histrico
42
43
44
45
46
47
48
49
Em outra sesso, com o SYS, verifique (vrias vezes seguidas) o contedo da V$SESSION_WAIT durante a execuo dos comandos do SCOTT a seguir. 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
Em outra sesso, com o SYS, verifique o contedo da V$SESSION_EVENT relacionado a sesso do SCOTT.
SQL> SELECT SID FROM V$SESSION WHERE USERNAME = 'SCOTT'; SQL> SELECT EVENT, TOTAL_WAITS, TOTAL_TIMEOUTS, AVERAGE_WAIT FROM V$SESSION_EVENT WHERE SID = 17 ORDER BY 4;
Na sesso do SYS, aps a duplicao da tabela, verifique novamente o contedo da V$SESSION_EVENT relacionado a sesso do SCOTT Remova a tabela T2, feche e abra a sesso com o SCOTT, e repita a operao. Durante a repetio da operao, verifique as mudanas do contedo da V$SESSION_EVENT relacionado a sesso do SCOTT.
51
Corrija a causa deste Wait Event. Remova a tabela T2, feche e abra a sesso com o SCOTT, e repita a operao.
52
Corrija a causa deste Wait Event. Remova a tabela T2, feche e abra a sesso com o SCOTT, e repita a operao.
53
Lio de casa
Verifiquem as Dynamic Performance Views de seus servidores. Tragam suas dvidas para a aula.
54
55
56
57
58
tkprof
59
60
61
62
Continue verificando o contedo do Trace durante a execuo da operao. Ao trmino da execuo, verifique os valores de V$SESSION_EVENT da sesso 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
64
Ensinar a Pescar
65
Referncia
66
67
MOS
68
buffer busy
Explicao: O bloco solicitado est em uso, pois outra sesso est carregando o bloco para o DB_CACHE_SIZE, ou outra sesso est utilizando o bloco no DB_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
70
free buffer
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
72
73
74
75
76
77
78
User I/O
79
Influenciando o Otimizador
CURSOR_SHARING DB_FILE_MULTIBLOCK_READ_COUNT OPTIMIZER_INDEX_CACHING OPTIMIZER_INDEX_COST_ADJ OPTIMIZER_MODE PGA_AGGREGATE_TARGET STAR_TRANSFORMATION_ENABLED
80
81
82
83
enqueue
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
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
86
87
88
89
90
91
92
93
94
Ao trmino da execuo, verifique os valores de V$SESSION_EVENT da sesso do 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, e compare.
95
Parallel SQL
96
Parallel SQL
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
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 32768 PARALLEL_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
99
Ao trmino da execuo, verifique os valores de V$SESSION_EVENT da sesso 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
101
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);
102
Com o usurio SYS, verifique o contedo da V$SESSION_EVENT da sesso do 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;
103
Estatsticas
104
Estatsticas
Optimizer Statistics
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 Index statistics Number of leaf blocks Levels Clustering factor
System Statistics
I/O performance and utilization CPU performance and utilization
105
Estatsticas
DBMS_AUTO_TASK_ADMIN.DISABLE DBMS_STATS.GATHER_DATABASE_STATS DBMS_STATS.GATHER_DICTIONARY_STATS DBMS_STATS.GATHER_SCHEMA_STATS DBMS_STATS.GATHER_TABLE_STATS DBMS_STATS.GATHER_INDEX_STATS DBMS_STATS.DELETE_TABLE_STATS DBMS_STATS.LOCK_TABLE_STATS DBMS_STATS.EXPORT_*_STATS DBMS_STATS.IMPORT_*_STATS OPTIMIZER_DYNAMIC_SAMPLING DBMS_STATS.GATHER_SYSTEM_STATS
106
Hands ON ! DBMS_SQLTUNE
107
108
Fragmentao
109
Fragmentao
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
111
Fragmentao: COALESCE
112
113
114
Hands ON ! DBMS_ADVANCED_REWRITE
115
Com o usurio SYS, d as permisses necessrias para que o usurio SCOTT utilize o DBMS_ADVANCED_REWRITE:
$ sqlplus / AS SYSDBA SQL> GRANT EXECUTE ON DBMS_ADVANCED_REWRITE TO SCOTT; SQL> GRANT CREATE MATERIALIZED VIEW TO SCOTT;
116
117
Cenrios de Anlise
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
Statspack / AWR
119
Statspack / AWR
Statspack / SPreport $ sqlplus / AS SYSDBA SQL> @?/rdbms/admin/spcreate.sql SQL> @?/rdbms/admin/spauto.sql SQL> EXECUTE STATSPACK.SNAP; SQL> @?/rdbms/admin/spreport.sql
120
121
122
Resource Plan
123
Resource Plan
Separao de Recursos por:
ORACLE_USER SERVICE_NAME CLIENT_OS_USER CLIENT_PROGRAM CLIENT_MACHINE MODULE_NAME MODULE_NAME_ACTION SERVICE_MODULE SERVICE_MODULE_ACTION
124
Resource Plan
125
Resource Plan
Mudanas de planos:
ALTER 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
127
128
Reviso
129
Mtodo de Tuning
O Banco de Dados est lento agora: Encontrar indcios do gargalo na V$SYSTEM_EVENT. Encontrar indcios do gargalo na V$SESSION_WAIT. Encontrar o(s) SID(s) ofensor na V$SESSION_WAIT. Encontrar o maior Wait Event deste(s) SID(s) na V$SESSION_EVENT. Corrigir o maior Wait Event possvel. Se o tempo esta satisfatrio, finalizar o processo. 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. Se o tempo esta satisfatrio, finalizar o processo. Este SQL est lento: 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