Post on 31-Jan-2021
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
TITLESpeaker
Lendas do Oracle
1
Ricardo Portilho Proniricardo@nervinformatica.com.br
Esta obra está licenciada sob a licençaCreative 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/.
mailto:ricardo@nervinformatica.com.br
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
6
Eficiência X Eficácia
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
Optimizer StatisticsTable statistics
Number of rowsNumber of blocksAverage row length
Column statisticsNumber 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
Estatísticas
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
● 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
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 1SQL> INSERT INTO T VALUES (1);1 linha criada.
SESSÃO 2SQL> 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
17
SQL> SELECT COUNT(*) FROM T; - - Sem índice.COUNT(1)———-10936000
SQL> SELECT COUNT(DISTINCT(OWNER)) FROM T; - - Sem índice.COUNT(DISTINCT(OWNER))———————-28Decorrido: 00:00:26.75
SQL> SELECT COUNT(DISTINCT(OWNER)) FROM T; - - Com índice BTREE.COUNT(DISTINCT(OWNER))———————-28Decorrido: 00:00:05.29
SQL> SELECT COUNT(DISTINCT(OWNER)) FROM T; - - Com índice BITMAP.COUNT(DISTINCT(OWNER))———————-28Decorrido: 00:00:01.84
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
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 BTREECOUNT(DISTINCT(OBJECT_NAME))—————————-40998Decorrido: 00:00:08.95
SQL> SELECT COUNT(DISTINCT(OBJECT_NAME)) FROM T; – Com índice BITMAPCOUNT(DISTINCT(OBJECT_NAME))—————————-40998Decorrido: 00:00:03.15
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_RETENTIONCREATE UNDO TABLESPACE … RETENTION GUARANTEEAUTOEXTEND 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
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
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 cachedMem: 3913052 957340 2955712 0 108616 318084-/+ buffers/cache: 530640 3382412Swap: 8388600 0 8388600[root@nerv01 ~]# df -hFilesystem 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
36
Eventos relacionados● control file single write● control file parallel write● control file sequential read● db file single write
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
37
Não utilizará AUTOEXTEND ON.
37
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
3838
Eventos relacionados● Data file init write
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 relacionadosSwitchlog file switchlog file switch (checkpoint incomplete)log file switch (clearing log file)log file switch (private strand flush incomplete)log file switch completion
Archivelog file sequential readlog 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 RACGC *
SHARED_POOL_SIZElatch freelatch: library cachelatch: shared pool
DB_CACHE_SIZEbuffer busyfree bufferread by oher sessionlatch: cache buffers chainslatch: row cache objects
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
LOG_BUFFERlog buffer spacelog file parallel writelog file single writelog file switchlog 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.
45
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
47
Fragmentação: COALESCE
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
48
Fragmentação: Row Chaining
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
49
Fragmentação: Row Migration
10 de Agosto de 2013 no Hotel Blue Tree Morumbi, São Paulo - SP
Dúvidas?
50
Ricardo Portilho Proniricardo@nervinformatica.com.br
mailto:ricardo@nervinformatica.com.br
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50