DBAs World
47 pág.

DBAs World


DisciplinaBancos de Dados para Redes90 materiais677 seguidores
Pré-visualização4 páginas
\u2013 Usuários não criam ou 
modificar quaisquer 
objetos de BD (meta-
dados)
\u2013 Usuários têm privilégios 
para atualizar objetos 
nos schemas (A)
Agenda
\ufffd Arquitetura BD Oracle
\ufffd Segurança
\ufffd Backup 
\ufffd Gerência de Objetos do BD
\ufffd Performance
\ufffd Design
14
Backup
\ufffd Backup físico: data files, control files, spfile, 
archived redo logs
\ufffd Backup lógico: tabelas, schemas, 
tablespaces
\ufffd Backup on-line x off-line (inconsistente x 
consistente): BD aberto, redo logs não 
aplicados aos data files x BD fechado, data 
files sem transações pendentes (redo)
\ufffd Backup \u201cquente\u201d (online), somente se BD 
operando em ARCHIVELOG mode
Backup (cont)
\ufffd Backup \u2018full\u2019 x backup incremental
\ufffd Restauração de BD a partir de um 
backup consistente: imediato
\ufffd Restauração de BD a partir de um 
backup inconsistente: transações 
pendentes, restaura os data files e 
aplica as transações constantes do 
Redo Log \u2013> BD consistente!
15
Backup (dicas)
\ufffd BD operando em ARCHIVELOG MODE
\ufffd Utilizar o RMAN (automatizar o backup)
\ufffd Fazer backup também do control file e 
spfile (server parameter file) \u2013
pequenos-
\ufffd Manter Backup Externo
Agenda
\ufffd Arquitetura BD Oracle
\ufffd Segurança
\ufffd Backup
\ufffd Gerência de Objetos do BD 
\ufffd Performance
\ufffd Design
16
Objetos de Schema
\ufffd Clusters
\ufffd Database links
\ufffd Database triggers
\ufffd Dimensions
\ufffd External procedure libraries
\ufffd Indexes and index types
\ufffd Java classes, Java resources, and Java
sources
\ufffd Materialized views and materialized view logs
Objetos de Schema (cont)
\ufffd Object tables, object types, and object views
\ufffd Operators
\ufffd Sequences
\ufffd Stored functions, procedures, and packages
\ufffd Synonyms
\ufffd Tables and index-organized tables
\ufffd Views
17
Objetos, tablespaces e datafiles
Outros objetos
Objetos do BD não pertencentes a um schema, 
mas igualmente acessíveis através de 
comandos SQL
\ufffd Contexts
\ufffd Directories
\ufffd Profiles
\ufffd Roles
\ufffd Tablespaces
\ufffd Users
\ufffd Rollback segments
18
Dicionário de Dados
\ufffd Conjunto de tabelas e views com 
informações do banco de dados
\ufffd Usuários, tabelas, constraints, espaço 
disponível em cada schema (...)
\ufffd Atualizados pelo Oracle conforme 
modificações realizadas no BD (read-only
para usuários)
\ufffd Utilizado pelo Oracle em todas as suas 
operações
Partições
\ufffd Tabelas grandes (milhões de registros)
\ufffd Partições têm mesma estrutura lógica, mas 
conteúdo (linhas) distintas
\ufffd Exemplo: particionamento por ano
\ufffd Vantagens: 
\u2013 operações de manutenção (carga, criação de 
índices, rebuild, backup/recovery) podem ser 
realizadas no nível da partição, com melhor 
performance
\u2013 Operações de consultas referenciam a tabela, 
sem conhecer o particionamento subjacente 
(transparente para a aplicação)
19
Métodos de Particionamento
Particionamento Composto
20
Clusters
\ufffd Grupo de tabelas armazenadas 
fisicamente no mesmo bloco
\ufffd Aplicável a tabelas com colunas 
comuns, onde os registros relacionados 
são freqüentemente manipulados juntos
\ufffd Exemplo: Nota Fiscal e itens da nota
Clusters
21
Ferramentas
\ufffd Ferramenta: Enterprise Manager
\u2013 Monitoramento e administração dos servidores de 
bancos de dados e instâncias Oracle
\u2013 Interface Web
\ufffd Ferramenta: TOAD
\u2013 Gerência dos objetos de banco de dados
\u2013 Execução de SQL
\u2013 Interface Gráfica
Enterprise Manager
22
Enterprise Manager
TOAD
23
TOAD
Agenda
\ufffd Arquitetura BD Oracle
\ufffd Segurança
\ufffd Backup
\ufffd Gerência de Objetos do BD
\ufffd Performance
\ufffd Design
24
Performance
\ufffd Otimização de aplicações (SQL Tuning)
\ufffd Otimização da instância (BD)
Linguagem SQL
\ufffd Linguagem não procedural: o que se 
deseja
SELECT employee_id, last_name
FROM employees
WHERE last_name = \u2018SILVA\u2019;
\ufffd Não indica como o comando é 
executado
25
Plano de Execução
\ufffd Comando EXPLAIN PLAN...
\ufffd Opção AUTOTRACE no SQL*Plus
\ufffd Plano de Execução é gravado na tabela 
PLAN_TABLE
\ufffd O Otimizador Oracle é baseado em 
custo (CBO), a partir da versão 10g
Plano de Execução (exemplo)
26
Processamento de comandos
Analisador
(parser)
Otimizador
Gerador de
registros
Dicionário
de Dados
Usuário
Consulta
SQL
Consulta
analisada
pelo Parser
Estatísticas
Plano de
execução
Executor
SQL
Resultado
Funcionamento do Otimizador 
Oracle
\ufffd Execução de expressões e condições
\ufffd Transformação de comandos
\ufffd Avaliação do objetivo da otimização 
(por exemplo, obter primeiros registros 
mais rápido)
\ufffd Seleção do caminho de acesso
\ufffd Seleção da ordem de \u2018joins\u2019
27
Expressões (exemplo)
\ufffd Como o CBO avalia o operador IN
select fist_name, last_name
from funcionarios
where last_name IN (\u2019SMITH\u2019, \u2019KING\u2019, \u2019JONES\u2019)
transformada em
select fist_name, last_name
from funcionarios
where last_name = \u2019SMITH\u2019 OR last_name = \u2019KING\u2019 OR
last_name = \u2019JONES\u2019
Transformação de queries 
(exemplo)
\ufffd Como o CBO modifica subqueries aninhadas
SELECT *
FROM orders
WHERE customer_id IN
(SELECT customer_id FROM customers);
Se coluna customer_id é a Primary Key ou Unique Key da 
tabela customers:
SELECT orders.*
FROM orders, customers
WHERE orders.customer_id = customers.customer_id;
\ufffd Importante: a query transformada retorna o mesmo resultado da 
inicial
28
Ações para melhoria de SQL
\ufffd Atualizar periodicamente as estatísticas de 
otimização (de tabelas e índices)
\ufffd Analisar e alterar o plano de execução
\ufffd Reestruturar o comando
\ufffd Reestruturar os índices envolvidos no comando
\ufffd Modificar ou desabilitar constraints e triggers (obs: 
\u201caprecie com moderação\u201d)
\ufffd Reestruturar os dados
\ufffd Armazenar o plano de execução
\ufffd Reduzir a quantidade de acesso aos dados
Objetivos da Otimização
\ufffd Como são estabelecidos os objetivos da 
otimização?
\u2013 Parâmetro OPTIMIZER_MODE =
\u2022 ALL_ROWS: melhor throughput
\u2022 FIRST_ROWS_n: melhor tempo de resposta para 
primeiros \u2018n\u2019 registros
\u2022 FIRST_ROWS (n=1) \ufffdnão aconselhável na versão 
Oracle 10g (sem estatísticas, não usa otimização por 
custo)
\u2013 Pode ser definido no nível da instância ou de uma 
única sessão
29
Objetivos da Otimização (cont)
\u2013 Uso de \u2018HINT\u2019 no comando
\u2022 Hints são comentários inseridos no comando e 
interpretados pelo otimizador como uma indicação do 
usuário para a geração do plano de execução
SELECT /*+ ALL_ROWS */ COD_FUNC
FROM FUNCIONARIOS FUNC
WHERE COD_FUNCIONARIO > 20
SELECT /*+ FIRST_ROWS(10) */ COD_FUNC
FROM FUNCIONARIOS FUNC
WHERE COD_FUNCIONARIO > 20
Parâmetros do Otimizador
OPTIMIZER_MODE
OPTIMIZER_FEATURES_ENABLE = 10.1.0 
CURSOR_SHARING = EXACT
DB_FILE_MULTIBLOCK_READ_COUNT
\u2013 Quantidade de blocos lidos em cada operação de I/O para \u201cfull 
table scan\u201d ou \u201cindex fast full scan\u201d
\u2013 Default: 8
\u2013 Quanto maior este valor, menor o custo dos métodos de acesso
\u2013 Valor acima de 16 costumam não representar ganhos de 
desempenho
PGA_AGREGATE_TARGET = 20% SGA ou 10MB (o maior)
30
Plano de Execução (exemplo)
SELECT f.cod_func, f.nome, f.salario, c.cargo_desc, d.dep_desc
FROM funcionarios f, cargos c, departamentos d
WHERE f.cod_cargo = c.cod_cargo
AND f.dep_cod = d.dep_cod
AND f.cod_func < 1002;
ID | OPERATION | NAME | ROWS | BYTES | COST
---------------------------------------------------------------------------------
0 | SELECT STATEMENT | | 3 | 189 | 10
1 | NESTED LOOPS | | 3 | 189 | 10
2 | NESTED LOOPS | | 3 | 141 | 7
3 | TABLE ACESS FULL | FUNCIONARIO | 3 | 60 | 4
4 | TABLE ACESS BY INDEX ROWID | CARGO | 19 | 513 | 2
5 | INDEX UNIQUE SCAN | CARGO_ID_PK | 3 | 189 | 10
6 | TABLE ACCESS BY INDEX ROWID | DEPARTAMENTO | 27 | 432 | 2
7 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 | |
Predicate information (identified by operation id):
3 \u2013 filter (\u201cF\u201d.\u201dCOD_FUNC\u201d<1002)
5 \u2013 access (\u201cF\u201d.\u201dCOD_CARGO\u201d=\u201cC\u201d.\u201dCOD_CARGO\u201d)
7 \u2013 access (\u201cF\u201d.\u201dDEP_COD\u201d=\u201cD\u201d.\u201dDEP_COD\u201d)
1
2
3
4
5
6
7
Métodos de Acesso
\ufffd FULL TABLE SCAN
\u2013 Leitura de todos os blocos em seqüência
\u2013 Nas situações em que se recupera um percentual 
grande da tabela (> 10%), ou a tabela tenha 
poucos blocos, esse método é menos custos
\ufffd ROWID SCAN
\u2013 Rowid contém o endereço do registro (arquivo 
físico + bloco + localização no bloco)
\u2013 É o método