Lendas do Oracle

Transcrição

Lendas do Oracle
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Lendas do Oracle
TITLE
Speaker
Ricardo Portilho Proni
[email protected]
Esta obra está licenciada sob a licença
Creative Commons Atribuição-SemDerivados 3.0 Brasil.
Para ver uma cópia desta licença, visite
http://creativecommons.org/licenses/by-nd/3.0/br/.
1
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Melhores Práticas
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Aplicação de conhecimento de Projetos anteriores.
●
Valiosas no início de um Projeto.
●
Engenharia → Projetos.
●
Também conhecidas como:
●
Rules of thumb.
●
Industry Standards.
●
Blue prints.
●
Guidelines.
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Cada vez mais populares.
●
Gerentes e Clientes estão obcecados por elas.
●
Tornaram-se leis em TI.
●
Projetos inteiros são dedicados às Melhores Práticas.
●
A tecnologia evolui demais para ter regras que duram anos.
●
São perigosas se aplicadas indiscriminadamente.
●
São aplicadas cegamente quando não se conhece a causa real.
●
Aplicar Melhores Práticas cegamente = adivinhação.
●
A culpa dessa situação é dos DBAs.
●
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Devemos entender sua origem.
●
Devemos saber que problemas elas resolvem.
●
Devemos conhecer seus efeitos colaterais.
●
Devemos saber como elas funcionam.
●
Devemos saber porque elas funcionam.
●
Devemos saber porque elas não funcionam.
●
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Eficiência X Eficácia
6
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Regras → Histórias → Mitos → Lendas → Paradigmas
7
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
A experiência é mais perigosa do que a inexperiência.
“Não é só porque algo está escrito, que se trata da verdade.”
Jonathan Lewis
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Lendas
9
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Todo SELECT deverá utilizar um índice.
10
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Estatísticas
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
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
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
●
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Access Paths
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Access Paths
Full Table Scan
●
Index Fast Full Scan
●
Index Full Scan
●
Index Unique Scan
●
Index Range Scan
●
Index Skip Scan
●
Index Join
●
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Índice BITMAP deve ser criado para
colunas com baixa cardinalidade.
15
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
SESSÃO 1
SQL> INSERT INTO T VALUES (1);
1 linha criada.
SESSÃO 2
SQL> INSERT INTO T VALUES (2);
1 linha criada.
SESSÃO 1:
SQL> INSERT INTO T VALUES (2);
Neste momento a Sessão 1 fica aguardando a conclusão da transação da Sessão 2.
SESSÃO 2:
SQL> INSERT INTO T VALUES (1);
Neste momento a Sessão 2 fica aguardando a conclusão da transação da Sessão 1.
SESSÃO 1:
ERRO na linha 1:
ORA-00060: conflito detectado ao aguardar recurso
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
SQL> SELECT COUNT(*) FROM T;
COUNT(1)
———10936000
- - Sem índice.
SQL> SELECT COUNT(DISTINCT(OWNER)) FROM T; - - Sem índice.
COUNT(DISTINCT(OWNER))
———————28
Decorrido: 00:00:26.75
SQL> SELECT COUNT(DISTINCT(OWNER)) FROM T; - - Com índice BTREE.
COUNT(DISTINCT(OWNER))
———————28
Decorrido: 00:00:05.29
SQL> SELECT COUNT(DISTINCT(OWNER)) FROM T; - - Com índice BITMAP.
COUNT(DISTINCT(OWNER))
———————28
Decorrido: 00:00:01.84
17
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
SQL> SELECT COUNT(*) FROM T;
COUNT(1)
———10936000
SQL> SELECT COUNT(DISTINCT(OWNER)) FROM T;
COUNT(DISTINCT(OWNER))
———————28
SQL> SELECT COUNT(DISTINCT(OBJECT_NAME)) FROM T; -- Com índice BTREE
COUNT(DISTINCT(OBJECT_NAME))
—————————40998
Decorrido: 00:00:08.95
SQL> SELECT COUNT(DISTINCT(OBJECT_NAME)) FROM T; – Com índice BITMAP
COUNT(DISTINCT(OBJECT_NAME))
—————————40998
Decorrido: 00:00:03.15
18
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Tabelas grandes devem ser particionadas.
19
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
20
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Deverá fazer COMMIT a cada N linhas.
21
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Qual a transação mais longa que o sistema deve suportar?
UNDO_RETENTION
CREATE UNDO TABLESPACE … RETENTION GUARANTEE
AUTOEXTEND ON
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
O desenvolvedor não quer alterar o SQL.
Não tem jeito.
23
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
DBMS_ADVANCED_REWRITE
BEGIN
SYS.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
NAME
=> 'PORTILHO_REWRITE',
SOURCE_STMT
=> 'SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T
T_ALIAS WHERE OBJECT_NAME = ''T''',
DESTINATION_STMT => 'SELECT COUNT(OBJECT_NAME) FROM T T_ALIAS WHERE
OBJECT_NAME = ''T''',
VALIDATE
=> FALSE,
REWRITE_MODE => 'TEXT_MATCH');
END;
/
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
É melhor criar bancos / servidores separados,
para um não incluenciar o outro.
25
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Resource Plan
Separação de Recursos por:
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
●
Sessões Ativas
●
Paralelismo
●
I/O (>= 11gR1)
●
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Terá uma área de SWAP com o dobro da RAM.
27
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
28
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Não utilizará mais que 50% da RAM para a
SGA.
29
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
[root@nerv01 ~]# free
total
used
free shared buffers cached
Mem:
3913052 957340 2955712
0 108616 318084
-/+ buffers/cache: 530640 3382412
Swap:
8388600
0 8388600
[root@nerv01 ~]# df -h
Filesystem
Size Used Avail Use% Mounted on
/dev/sda1
286G 12G 260G 5% /
tmpfs
1.9G 0 1.9G 0% /dev/shm
RAM Total do Servidor
- (quantidade máxima de conexões simultâneas + 40) x 20MB
- Memória do Sistema Operacional
= (OLTP) 80% SGA e 20% PGA OU
= (OLAP) 20% PGA e 80% SGA
30
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Deverá separar dados e índices.
31
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
32
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Seus DATAFILEs deverão ter no máximo nGB.
35
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Eventos relacionados
●
control file single write
●
control file parallel write
●
control file sequential read
●
db file single write
36
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Não utilizará AUTOEXTEND ON.
37
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Eventos relacionados
●
Data file init write
38
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Deverá ter no máximo um Switch a cada 20m.
Não deverá ter grandes Redo Log.
Archive causa lentidão.
39
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Eventos relacionados
Switch
log file switch
log file switch (checkpoint incomplete)
log file switch (clearing log file)
log file switch (private strand flush incomplete)
log file switch completion
Archive
log file sequential read
log file switch (archiving needed)
Como controlar?
archive_lag_target
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Mais é melhor.
41
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Oracle RAC
GC *
SHARED_POOL_SIZE
latch free
latch: library cache
latch: shared pool
DB_CACHE_SIZE
buffer busy
free buffer
read by oher session
latch: cache buffers chains
latch: row cache objects
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
LOG_BUFFER
log buffer space
log file parallel write
log file single write
log file switch
log file sync
43
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Deverá desfragmentar seu banco
regularmente.
44
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Blocos logicamente contíguos espalhados fisicamente.
●
Espaço livre na TABLESPACE / DATAFILEs.
●
Espaço livre da TABELA.
●
Espaço livre no ÍNDICE.
●
Row Chaining.
●
Migrated Rows.
●
EXTENTs.
●
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Fragmentação: COALESCE
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Fragmentação: COALESCE
47
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Fragmentação: Row Chaining
48
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Fragmentação: Row Migration
49
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Dúvidas?
Ricardo Portilho Proni
[email protected]
50

Documentos relacionados