• Nenhum resultado encontrado

Lendas do Oracle. Ricardo Portilho Proni TITLE Speaker

N/A
N/A
Protected

Academic year: 2021

Share "Lendas do Oracle. Ricardo Portilho Proni TITLE Speaker"

Copied!
50
0
0

Texto

(1)

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/.

(2)

Melhores Práticas

(3)

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.

(4)

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.

(5)

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)

6

Eficiência X Eficácia

(7)

Regras → Histórias → Mitos → Lendas → Paradigmas

7

(8)

A experiência é mais perigosa do que a inexperiência.

“Não é só porque algo está escrito, que se trata da verdade.”

Jonathan Lewis

(9)

Lendas

9

(10)

Todo SELECT deverá utilizar um índice.

10

(11)

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

(12)

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

(13)

Access Paths

(14)

Access Paths

Full Table Scan

Index Fast Full Scan

Index Full Scan

Index Unique Scan

Index Range Scan

Index Skip Scan

Index Join

(15)

Índice BITMAP deve ser criado para colunas com baixa cardinalidade.

15

(16)

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)

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)

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

(19)

Tabelas grandes devem ser particionadas.

19

(20)

20

(21)

Deverá fazer COMMIT a cada N linhas.

21

(22)

Qual a transação mais longa que o sistema deve suportar?

UNDO_RETENTION

CREATE UNDO TABLESPACE … RETENTION GUARANTEE AUTOEXTEND ON

(23)

O desenvolvedor não quer alterar o SQL.

Não tem jeito.

23

(24)

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;

/

(25)

É melhor criar bancos / servidores separados, para um não incluenciar o outro.

25

(26)

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

(27)

Terá uma área de SWAP com o dobro da RAM.

27

(28)

28

(29)

Não utilizará mais que 50% da RAM para a SGA.

29

(30)

[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

(31)

Deverá separar dados e índices.

31

(32)

32

(33)
(34)
(35)

Seus DATAFILEs deverão ter no máximo nGB.

35

(36)

36

Eventos relacionados

control file single write

control file parallel write

control file sequential read

db file single write

(37)

37

Não utilizará AUTOEXTEND ON.

37

(38)

38 38

Eventos relacionados

Data file init write

(39)

Deverá ter no máximo um Switch a cada 20m.

Não deverá ter grandes Redo Log.

Archive causa lentidão.

39

(40)

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

(41)

Mais é melhor.

41

(42)

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

(43)

LOG_BUFFER

log buffer space log file parallel write log file single write log file switch

log file sync

43

(44)

Deverá desfragmentar seu banco regularmente.

44

(45)

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

(46)

Fragmentação: COALESCE

(47)

47

Fragmentação: COALESCE

(48)

48

Fragmentação: Row Chaining

(49)

49

Fragmentação: Row Migration

(50)

Dúvidas?

50

Ricardo Portilho Proni

[email protected]

Referências

Documentos relacionados

Em outras palavras, o valor obtido diretamente da leitura da escala do eixo vertical no gráco di-log (quando x = C ) é o valor de A nas

Substituindo os valores

Os prefixos kibi, mebi e gibi, entre outros, empregados para especificar múltiplos binários são formados a partir de prefixos já existentes no Sistema Internacional de Unidades -

Os prefixos kibi, mebi e gibi, entre outros, empregados para especificar múltiplos binários são formados a partir de prefixos já existentes no Sistema Internacional de Unidades -

10) O ouvido humano pode perceber uma extensa faixa de intensidades de ondas sonoras (som), desde cerca de 10 -12 w/m 2 (que se toma usualmente como o limiar de audição) até cerca

O cálculo do índice do PIB é feito através da seguinte fórmula mostrada, onde PIB per capita é o valor da renda per capita do país analisado, em dólar; 40000 dólares é o

2) Uma pessoa vai retirar dinheiro de um caixa eletrônico de um banco, mas na hora de digitar, esqueceu-se da senha. Determine o número de maneiras diferentes de se formar uma

Para formar comissões com exatamente 2 oposicionistas, devemos selecionar os elementos dentro de suas naturezas: apoiar ou não apoiar. A ordem das escolhas