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