TITLE Speaker
1 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/.
Melhores Práticas
●
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.
●
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.
●
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.
6
Eficiência X Eficácia
Regras → Histórias → Mitos → Lendas → Paradigmas
7
A experiência é mais perigosa do que a inexperiência.
“Não é só porque algo está escrito, que se trata da verdade.”
Jonathan Lewis
Lendas
9
Todo SELECT deverá utilizar um índice.
10
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
Estatísticas
● CURSOR_SHARING
● DB_FILE_MULTIBLOCK_READ_COUNT
● OPTIMIZER_INDEX_CACHING
● OPTIMIZER_INDEX_COST_ADJ
● OPTIMIZER_MODE
● PGA_AGGREGATE_TARGET
● STAR_TRANSFORMATION_ENABLED
Influenciando o Otimizador
Access Paths
Access Paths
● Full Table Scan
● Index Fast Full Scan
● Index Full Scan
● Index Unique Scan
● Index Range Scan
● Index Skip Scan
● Index Join
Índice BITMAP deve ser criado para colunas com baixa cardinalidade.
15
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
17
SQL> SELECT COUNT(*) FROM T; - - Sem índice.
COUNT(1)
———- 10936000
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
18
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
Tabelas grandes devem ser particionadas.
19
20
Deverá fazer COMMIT a cada N linhas.
21
Qual a transação mais longa que o sistema deve suportar?
UNDO_RETENTION
CREATE UNDO TABLESPACE … RETENTION GUARANTEE AUTOEXTEND ON
O desenvolvedor não quer alterar o SQL.
Não tem jeito.
23
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;
/
É melhor criar bancos / servidores separados, para um não incluenciar o outro.
25
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)
Resource Plan
Terá uma área de SWAP com o dobro da RAM.
27
28
Não utilizará mais que 50% da RAM para a SGA.
29
[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
Deverá separar dados e índices.
31
32
Seus DATAFILEs deverão ter no máximo nGB.
35
36
Eventos relacionados
● control file single write
● control file parallel write
● control file sequential read
● db file single write
37
Não utilizará AUTOEXTEND ON.
37
38 38
Eventos relacionados
● Data file init write
Deverá ter no máximo um Switch a cada 20m.
Não deverá ter grandes Redo Log.
Archive causa lentidão.
39
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
Mais é melhor.
41
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
LOG_BUFFER
log buffer space log file parallel write log file single write log file switch
log file sync
43
Deverá desfragmentar seu banco regularmente.
44
● 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.