DBAs World
47 pág.

DBAs World


DisciplinaBancos de Dados para Redes90 materiais672 seguidores
Pré-visualização4 páginas
de acesso mais rápido
\u2013 Pouco usado pois o Rowid pode mudar ao 
exportar/importar os dados da tabela
31
Métodos de acesso (cont)
\ufffd CLUSTER SCAN
\u2013 Registros de tabelas relacionadas mantidos no mesmo 
bloco (NF e ítem NF, por exemplo)
\u2013 Índice com a chave do cluster + rowid
\ufffd HASH SCAN
\u2013 Aplicação de uma função \u2018hash\u2019 à chave do cluster
\u2013 Índice não necessário
\u2013 Obs: Métodos usados somente quando o comando fornece 
a chave do cluster
\ufffd SAMPLE TABLE SCAN
\u2013 Usado quando comando utiliza a cláusula \u2018SAMPLE\u2019:
SELECT * FROM FUNCIONARIOS SAMPLE(10)
(Recupera somente 10% dos registros da tabela)
Métodos de acesso (cont)
\ufffd INDEX SCAN
\u2013 Pesquisa no índice da tabela
\u2013 Se todas as colunas da cláusula SELECT pertencem ao 
índice, a tabela não é acessada.
\u2013 \u2018Fator de Cluster\u2019 indica o quanto os valores de uma coluna 
indexada está distribuída nos blocos da tabela. Fator baixo 
indica acesso a poucos blocos para determinado valor.
\u2013 Quando o valor da coluna for nulo, não há entrada de 
informação no índice (b-tree)
\ufffd Métodos envolvendo índices:
\u2013 Index Unique Scans, Index Range Scans, Index Range 
Scans Descending, Index Skip Scans, Full Scans, Fast Full 
Index Scans, Index Joins
32
Joins
\ufffd Junção de dados de duas ou mais tabelas em uma 
única consulta
\ufffd Tipos
\u2013 Junção simples (simple-join)
\u2013 Junções externas (outer-join)
\u2013 Produtos cartesianos
\ufffd Decisões para o plano de execução de join
\u2013 Métodos de acesso
\u2013 Método de Join: Nested loop, Hash join, Sort merge join,
Cartesian join, Outer join
\u2013 Ordem de Join: ordem de junção das tabelas, principal e 
secundária(s)
Índices
\ufffd Índices concatenados
\u2013 Índices compostos por mais de uma coluna da tabela, 
aumentam a seletividade do índice e podem eliminar o 
acesso à tabela
\u2013 Orientações:
\u2022 Colunas usadas com freqüência na cláusula WHERE
\u2022 Colunas referenciadas em muitas consultas
\u2022 Ordem das colunas: a ordem mais utilizada, colunas mais 
seletivas posicionadas na frente
\ufffd Índice baseado em função
\u2013 Para que o índice baseado em função seja usado, a 
cláusula WHERE ou ORDER BY deve ser idêntica à 
expressão do índice:
SELECT ... FROM funcionario WHERE UPPER(nome_func)
33
Índices (cont)
\ufffd Índices e chaves estrangeiras (FK)
\u2013 Oracle recomenda a criação de índices em todas as FKs:
\u2022 Agilização dos joins de tabelas
\u2022 Para não haver \u2018lock\u2019 em toda a tabela filha, quando se realiza, 
na tabela pai, \u2018delete\u2019 em um registro ou \u2018update\u2019 na coluna 
referenciada pela FK
\u2013 Nota: deve-se verificar sempre se o custo de manutenção 
do índice não é superior ao seu benefício
\ufffd Monitoramento de uso de índices:
ALTER INDEX <indice> MONITORING USAGE;
(...)
SELECT * FROM V$OBJETC_USAGE; (coluna USED)
Índices (cont)
\ufffd Índice Bitmap
\u2013 Tabelas com grande quantidade de registros
\u2013 Coluna com baixa quantidade de valores distintos (pouco 
seletiva)
\u2013 Para um determinado valor são recuperados muitos 
registros
\u2013 Uso freqüente das colunas em funções de agrupamento 
(sum, count)
\u2013 O índice bitmap economiza espaço, se comparado com b-
tree
\u2013 Exemplo:
\u2013 Obs: Índices bitmap só podem ser usados em condição com 
\u201c=\u201c
Sexo = \u201cM\u201d
Sexo = \u201cF\u201d
1
0
1
01
0
1
0
1
0
1
0
34
Índices: critérios para criação
\ufffd Uso freqüente na cláusula WHERE
\ufffd Uso freqüente em Joins
\ufffd Possuam alta seletividade (índices b-tree)
\ufffd Não use índice b-tree em colunas com pouco 
valores distintos (índices bitmap são mais 
adeqüados)
\ufffd Evitar índice em colunas alteradas 
freqüentemente (degrada operações DML)
Coleta de Estatísticas
\ufffd Estatísticas são dados sobre os objetos de BD:
\u2013 Número de registros em uma tabela
\u2013 Número de blocos de uma tabela ou índice
\u2013 Tamanho médio do registro de uma tabela
\u2013 Número de valores distintos de uma coluna
\u2013 Número de valores nulos de uma coluna
\u2013 Tamanho médio de uma coluna
\u2013 Distribuição dos valores de uma coluna (histograma)
\u2013 Número de blocos folhas em índices
\u2013 Quantidade de níveis em um índice
\u2013 Fator de bloco de um índice
35
Coleta de Estatísticas (cont)
\ufffd Package DBMS_STATS
GATHER_TABLE_STATS()
GATHER_INDEX_STATS ()
GATHER_SCHEMA_STATS ()
GATHER_DATABASE_STATS()
\ufffd Comando \u2018ANALYZE\u2019 não é mais 
recomendado pela Oracle
\ufffd Coleta dinâmica de estatísticas pode ser 
controlada configurando o parâmetro 
OPTIMIZER_DYNAMIC_SAMPLING (valores 0 a 10)
Hints de Otimização
SELECT /*+ <hint> */ ...
FROM ...
\ufffd Também podem ser utilizados em comandos 
INSERT, UPDATE, DELETE
\ufffd Se aplica ao bloco SQL onde ele existe e 
sobrescreve parâmetros de instância e de sessão
\ufffd Nota: use \u2018hints\u2019 como último remédio, pois eles 
aumentam o esforço de manutenção
\ufffd Nota 2: verifique se a situação que justificou o hint 
ainda existe, ou se na nova situação o hint não está 
prejudicando a performance
36
Hints (cont)
\ufffd Hints para modo de otimização: ALL_ROWS, 
FIRST_ROWS(N)
\ufffd Hints de método de acesso: full table scan, 
index scan, fast full index scan, etc
\ufffd Hints de métodos de join: nested loop, hash 
join, sort merge join
\ufffd Hints de ordem de joins e operações: ordered 
e leading
Hints (cont)
select /*+ FULL(func) */ cod_func --full table scan
from funcionarios func
where cod_funcionario > 20;
select /*+ USE_MERGE(d f) */ f.cod_func, f.cod_dep
from funcionarios f, departamento d
where f.cod_dep = d.cod_dep;
-- método sort merge nas tabelas d e f
select /*+ LEADING(d) USE_NL(f) */ f.cod_func, f.cod_dep
from funcionarios f, departamento d
where f.cod_dep = d.cod_dep;
-- nested loop com a tabela f sendo a \u201cinner\u201d, driving table é 
a tabela d
37
Estratégias de Otimização
\ufffd Redução do tempo de resposta ou redução do uso 
de recursos de determinado comando:
\u2013 Redução da carga: com um plano de execução mais 
eficiente (criação de índices ou forçando um determinado 
caminho de acesso)
\u2013 Balanceamento de carga: execução de processos \u2018batch\u2019 e 
relatórios pesados em horários de menor uso do sistema
\u2013 Paralelização da execução: comandos que acessam 
grande quantidade de dados podem ser paralelizados (não 
recomendável para sistemas com alto nível de concorrência, 
OLTP)
Agenda
\ufffd Arquitetura BD Oracle
\ufffd Segurança
\ufffd Backup
\ufffd Gerência de Objetos do BD
\ufffd Performance
\ufffdOtimização de aplicações (SQL Tuning)
\u2013 Otimização da instância (BD)
\ufffd Design
38
Configuração da Instância 
(manual)
Configuração mínima
\ufffd Initialization Parameters
DB_NAME = finance
DB_DOMAIN = hq.company.com
CONTROL_FILES = ('/u01/database/control1.dbf', 
'/u02/database/control2.dbf')
DB_BLOCK_SIZE = 8192
DB_BLOCK_BUFFERS = 12000 # this is approximately 100 Mb
DB_FILES = 200 # Maximum 200 files in the database
SHARED_POOL_SIZE = 100000000 # 100 Mb
PROCESSES = 80 # Would be good for approximately 70
# directly connected users
# log_archive_XXX
# Set various archiving parameters
39
Configuração da PGA (exemplo)
\ufffd Otimização da PGA:
WORKAREA_SIZE_POLICY = AUTO
PGA_AGGREGATE_TARGET = 100000K
sendo:
PGA_AGGREGATE_TARGET = (TOTAL_MEM * 80%) * 20% for an
OLTP system
PGA_AGGREGATE_TARGET = (TOTAL_MEM * 80%) * 50% for a DSS
system
\ufffd Configuração manual da PGA: 
WORKAREA_SIZE_POLICY = MANUAL
SORT_AREA_SIZE = ???
HASH_AREA_SIZE = ???
BITMAP_MERGE_AREA_SIZE = ???
CREATE_BITMAP_AREA_SIZE = ???
Configuração na Instalação
40
Alertas
\ufffd Notificam quando determinadas 
métricas (limites) são alcançadas ou 
ocorrem certos eventos.
\ufffd Exemplo 1: Tablespace 85% full:
'warning', 97% full: crítico (limites)
\ufffd Exemplo 2: \u2018Snapshot too old\u2019, 
\u2018Recovery area low on free space\u2019 
(eventos)
Diagnósticos
\ufffd Automatic Database Diagnostics
Monitor (ADDM)
\u2013 Coleta periódica (uma vez por hora) de 
informações de status do DB e carga de 
trabalho na AWR (Automatic Workload 
Repository) 
\u2013 Análises estatísticas: tempo de cpu e 
memória, sobrecarga de conexões, 
ocorrências de 'lock' em transações
41
Métricas
Alertas (exemplo)
42
Alertas por e-mail
Host Name=prod.empresa.com
Metric=Response Time per Call
Timestamp=08-NOV-2003 10:10:01 (GMT -
7:00)
Severity=Critical
Message=Tempo de resposta por chamada 
excedeu limite estabelecido. Verifique 
análise ADDM.
Rule Name=
Rule Owner=SYSMAN