Upload
voliem
View
225
Download
0
Embed Size (px)
Citation preview
Planejamento – Parte 101 - Visão Geral do Ajuste de Desempenho do Banco de Dados02 - Arquivos de Alert e Trace do Oracle
03 - Utilitários e Visões Dinâmicas de Performance04 - Otimizando a Shared Pool05 - Otimizando o Buffer Cache06 - Otimizando o Redo Log Buffer
07- Configuração do Banco de Dados e Problemas de I/O08- Utilizando Blocos do Oracle com Eficiência09 - Otimizando Operações de Ordenação10 - STATSPACK
Planejamento – Parte 2
- AWR- Otimização dos Segmentos de Rollback- Monitorando e Detectando Contenção de Lock
- Problemas de SQL e Considerações sobre Otimização para Aplicações Diversas- Gerenciando Cargas de Trabalho Mistas- Utilizando as ferramentas do Oracle para diagnosticar problemas de performance;- Problemas de Otimização no Servidor Multi-Threaded Server
AWR• Definição
– Uma ferramenta do ORACLE que Coleta, Processa e mantém os estatísticas de performance para detecção de problemas e auto-tuning
• Tem que ser parte do dia-a-dia do DBA• Utilizado como origem para outras ferramentas:
– Automatic Databse Diagnostic Monitor– SQL Tuning Advisor– Undo Advisor– Segment Advisor
AWR• Usado para coletar estatísticas de desempenho incluindo:
– Aguarda a utilização dos eventos para identificar problemas de performance
– Indicadores de desempenho para modelo de tempo do total do DB com os processos em V$SESS_TIME_MODEL e V$SYS_TIME_MODEL
– Estatísticas de Histórico de Sessões Ativas V$SCTIVE_SESSION_HISTORY
– Algumas estatísticas de sistemas e sessões em V$SYSSTAT e V$SESSTAT
– Utilização de objetos estatísticos– Recursos intensivos de Instruções SQL
AWR• Por padrão o SNAPSHOT a coleta é realiza a cada
hora e é armazenada por 7 dias
• Os mesmos podem ser alterados
BEGIN
DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(
retention => 43200, -- Minutes (= 30 Days). Current
value retained if NULL.
interval => 30); -- Minutes. Current value retained
if NULL.
END;
/
AWR• As alterações são refletidas no
DBA_HIST_WR_CONTROL
• Geralmente, o período de retenção deve captar pelo menos um ciclo de carga de trabalho completo
• Um intervalo de "0" desliga recolha instantâneo– O qual por sua vez interrompe a maior parte da
funcionalidade de auto-ajuste (Não recomendado)
• Coleta automática só é possível se o parâmetro STATISTICS_LEVEL está definido como TYPICAL ou ALL.
AWR• Pode-se criar e eliminar SNAPSHOTS
• Criando:EXEC DBMS_WORKLOAD_REPOSITORY.create_snapshot;
• EliminandoBEGIN
DBMS_WORKLOAD_REPOSITORY.drop_snapshot_range (
low_snap_id => 22,
high_snap_id => 32);
END;
/
AWR• Para verificar os SNAPSHOTS verificar a view
– DBA_HIST_SNAPSHOT
• Baseline (Linha de Base)– Um par de SNAPSHOTS que representa um perído especifico
de uso– Uma vez que as linhas de base são definidas eles podem ser
usados para comparar o desempenho atual contra iguais períodos do passado.
– Você pode querer criar linha de base para representar um período de processamento em lote.
– Pode ser consulta em DBA_HIST_BASELINE
AWR• Criando Linha de Base
BEGIN
DBMS_WORKLOAD_REPOSITORY.create_baseline (
start_snap_id => 210,
end_snap_id => 220,
baseline_name => 'batch baseline');
END;
/
AWR• O par de snapshots associados com uma linha de base são
mantidas até que a linha de base é explicitamente excluída.
BEGIN
DBMS_WORKLOAD_REPOSITORY.drop_baseline (
baseline_name => 'batch baseline',
cascade => FALSE); -- Deletes associated snapshots if TRUE.
END;
/
AWR• Views
– V$ACTIVE_SESSION_HISTORY – Mostra o Histórico das Sessões ativas (ASH) amostras por segundo.
– V$METRIC – Apresenta as informações de métricas.
– V$METRICNAME - Apresenta as informações de métricas de cada grupo.
– V$METRIC_HISTORY – Histórico de Métricas.
– V$METRICGROUP – Mostra todos os grupos de Métricas.
AWR• Views
– DBA_HIST_ACTIVE_SESS_HISTORY – Conteúdo histórico de sessões ativas.
– DBA_HIST_BASELINE – Informações de Baseline.
– DBA_HIST_DATABASE_INSTANCE – Informações do Ambiente do DB.
– DBA_HIST_SNAPSHOT – Informações de SNAPSHOTS.
– DBA_HIST_SQL_PLAN – Planos de execução SQL.
– DBA_HIST_WR_CONTROL – Configurações AWR.
AWR• Reports
– Normalmente gera em dois scripts• Awrrpt.sql• Awrrpt.sql
• AWR– Esta disponível no Enterprise Manager– A página "Automatic Workload Repository" é acessado a partir da
página principal, clicando no link "Administração",– Em seguida, o link "Workload Repository" na seção "Workload".
• A página permite modificar as configurações do AWR ou organizar os SNAPSHOTS sem usar as APIs PL / SQL.
AWR• a primeira coisa que você provavelmente deve fazer é
executar o relatório ADDM – para o período de tempo específico
– O relatório ADDM fornece análise de causa raiz das partes do sistema consumindo a maior parte do tempo.
– Muitas vezes, é mais rápido para começar com o relatório ADDM para ajudar a afinar a sua área de foco no relatório AWR.
– Ao olhar para um relatório AWR, um bom lugar para começar é a seção "Top 5 Timed primeiro plano Eventos", na parte superior do relatório. Isto dá-lhe uma indicação dos pontos de estrangulamento no sistema durante este período de amostragem.
Segmentos de Rollback• Definção: é um objeto de banco de dados contendo antes-imagens de
dados gravados no banco de dados.• Os segmentos de Rollback são usados para:
– Desfazer as alterações quando uma transação é revertida– Assegurar outras transações não ver as alterações não confirmadas feitas ao
banco de dados– Recuperar o banco de dados para um estado consistente em caso de falhas
• Cada banco de dados contém um ou mais segmentos de reversão, que são partes do banco de dados que gravar as ações de transações no caso em que uma transação será revertida. Você usa segmentos de reversão para fornecer consistência de leitura, reverter transações, e recuperar o banco de dados.
IMPORTANTE: Se você usar os segmentos de reversão, em vez de AutomaticUndo Management, existem algumas restrições ao utilizar DML paralelo.
Segmentos de Rollback• Guidelines para Gestão de Segmentos de Rollback
– Utilização de múltiplos Segmentos de Rollback
– Escolha entre publico e Privado
– Aquisição de segmentos automático
– Tamanho
– Criação com Muitos extensores de tamanho equalizados
– Definição de um número ideal de Extensões para cada segmento de reversão
– Coloque segmentos de rollback em um espaço de tabela separado
Segmentos de Rollback• Utilizando múltiplos segmentos
– distribui contenção– melhora o desempenho do sistema.– Vários segmentos de reversão são necessárias nas seguintes
situações:• Após a criação do Banco onde se cria apenas um segmento, pode-
se criar outros segmentos• Quando tiver muitas transações simultâneas
– Informações + Rollback = são criadas juntamente
• TRANSACTIONS_PER_ROLLBACK_SEGMENT = é o número de transações que você espera de cada segmento de reversão de ter de lidar com o parâmetro de inicialização
Segmentos de Rollback• Utilizando múltiplos segmentos
– Uma instância sempre adquire o segmento de rollbackSYSTEM para além de quaisquer outros segmentos de reversão que necessita. No entanto, se houver vários segmentos de reversão, o Oracle tenta usar o segmento de rollback SYSTEM apenas para transações especiais do sistema e distribui as transações do usuário entre outros segmentos de reversão. Se houver muitas transações para os segmentos de reversão não é do sistema, o Oracle usa o segmento SYSTEM.
Segmentos de Rollback• Públicos ou privados
– Definição• Privado = é aquele adquirido explicitamente por uma instância quando abre o Banco de
dados (Se ela for nomeada no parâmetro ROLLBACK_SEGMENTS)• Publico = forma um pool de segmentos de rollback que qualquer instância que exigem um
segmento de rollback pode usar.
– Base de dados com a opção Paralell Server pode ter apenas segmentos públicas• contanto que o número de segmentos é seja alto o suficiente para que cada instância de
abrir a base de dados pode adquirir, pelo menos, um segmento de reversão para além do seu segmento SISTEMA reversão.
– Você também pode usar os segmentos de reversão privadas ao usar o servidor Oracle Parallel.
– Se um banco de dados não tem a opção Parallel Server, segmentos de rollbackpúblicos e privados são idênticos.
– Disponivel na versão Enterprise Manager
Segmentos de Rollback• Aquisição de Segmentos Automáticos
– Quando uma instância é iniciado, ele adquire por Transações / segmentos de reversão TRANSACTIONS_PER_ROLLBACK_SEGMENT. • Se você quiser garantir que a instância adquire segmentos de reversão
particulares que têm tamanhos específicos ou particulares de tabela, especifique os segmentos de reversão por nome no parâmetro ROLLBACK_SEGMENTS no arquivo de parâmetros da instância.
– A instância adquire todos os segmentos de reversão listados neste parâmetro, mesmo se mais de TRANSACTIONS / TRANSACTIONS_PER_ROLLBACK_SEGMENT são especificados. Os segmentos de reversão pode ser público ou privado.
Segmentos de Rollback• Tamanho
– Deve ser definido com base no tamanho das operações mais comuns emitidos contra um DB
• Lembre-se o tamanho das operações são similar ao tamanho do segmento
– Quando temos muitas operações curtas se utiliza do cache SGA (melhora a performance por não ter acesso em disco)
• Porém aumenta a probabilidade de erro
Segmentos de Rollback• Tamanho
– Para otimizar o desempenho de transações extremamente pequenas e grandes transações, fazer uma série de segmentos de reversão de tamanho adequado para cada tipo de transação (como pequeno, médio e grande). • A maioria dos segmentos de reversão devem corresponder às transações
típicas, com um menor número de segmentos de reversão para as transações atípicas. Em seguida, defina ideal para cada segmento de rollback tal modo que retorna o segmento de rollback ao seu tamanho pretendido, se tiver a crescer.
– Quando uma mistura de transacções não é predominante, cada segmento de reversão deve ser de 10% do tamanho da maior tabela de base de dados, porque a maioria das instruções SQL afectar 10% ou menos de uma tabela;
– De um modo geral, você deve definir um alto MAXEXTENTS para os segmentos de reversão
Segmentos de Rollback• Criando Segmentos de rollback
– deve ser dividido entre muitas extensões igualmente dimensionadas. • Em geral, o desempenho ideal de reversão I / O é observado se cada segmento de
reversão de uma instância tem de 10 a 20 extensões igualmente dimensionadas.
– utilizar a seguinte fórmula para calcular o tamanho de cada extensão do segmento de reversão:T / N = s• onde:
– T = tamanho do segmento rollback inicial total, em bytes– n = número de extensões inicialmente alocar– s = tamanho calculada, em bytes, de cada medida inicialmente alocado
– especificar os parâmetros de armazenamento inicial e NEXT como s, e MINEXTENTS para n. PCTINCREASE não pode ser especificado para os segmentos de reversão e, portanto, o padrão é 0.
Segmentos de Rollback• Definindo um numero ideal
– Você deve avaliar com cuidado o tipo de transações que o sistema é executado quando definir o parâmetro ideal para cada segmento de reversão.
– Para um sistema que executa as transações de longa duração com freqüência, OPTIMAL deve ser grande • para que a Oracle não tem a encolher e alocar extensões• para evitar "instantâneo muito antigo" erros.
– OPTIMAL deve ser menor para um sistema que executa, principalmente, as operações de curto e consultas de modo que os segmentos de reversão permanecem pequenas o suficiente para ser armazenada em cache na memória, melhorando assim o desempenho do sistema.
– Os V $ rollname e V $ ROLLSTAT visões de desempenho dinâmico pode ser monitorado para coletar estatísticas úteis para determinar as configurações apropriadas para OPTIMAL. Consulte "segmento de rollback Estatísticas".
Segmentos de Rollback• Crie segmentos em TableSpace separados
– Criar um espaço de tabela especificamente para armazenar todos os segmentos de reversão. Desta forma, todos os segmentos de rollback é armazenado separadamente de outros tipos de dados.
– Beneficios:• maximizando, assim, a capacidade de armazenamento combinada
de segmentos de reversão em todos os momentos• espaços de tabelas podem ser tomadas offline sem preocupação
para os segmentos de reversão do banco de dados.• Extensões livres de um espaço de tabelas são susceptíveis de ser
mais fragmentada se o espaço de tabela contém segmentos de reversão que freqüentemente alocam e extensões desalocar
Segmentos de Rollback• Criando
CREATE ROLLBACK SEGMENT rs1 TABLESPACE rbsts;
ALTER ROLLBACK SEGMENT rs1 ONLINE;
• MonitorandoSELECT segment_name, status FROM dba_rollback_segs;
SEGMENT_NAME STATUS
-------------------- ----------------
SYSTEM ONLINE
_SYSSMU2_1186132793$ ONLINE
_SYSSMU1_1186132793$ ONLINE
Segmentos de Rollback• Monitorando utilizando as ViewsSELECT rn.Name "Rollback Segment", rs.RSSize/1024 "Size
(KB)", rs.Gets "Gets",
rs.waits "Waits", (rs.Waits/rs.Gets)*100 "% Waits",
rs.Shrinks "# Shrinks", rs.Extends "# Extends"
FROM sys.v_$rollName rn, sys.v_$rollStat rs
WHERE rn.usn = rs.usn;
Segmentos de Rollback• Criando utilizando parametrizaçõesCREATE PUBLIC ROLLBACK SEGMENT rbs_01
TABLESPACE rbsspace
STORAGE (
INITIAL 100K
NEXT 100K
OPTIMAL 4M
MINEXTENTS 20
MAXEXTENTS 100 );
Segmentos de Rollback• Alterando
ALTER ROLLBACK SEGMENT rbs_01
STORAGE (MAXEXTENTS 120);
• Diminuindo o segmentoALTER ROLLBACK SEGMENT rbs1 SHRINK TO
100K;
Segmentos de Rollback• Colocando ONLINE
ALTER ROLLBACK SEGMENT user_rs_2
ONLINE;
• Colocando OFFLINE
ALTER ROLLBACK SEGMENT user_rs_2
OFFLINE;
Segmentos de Rollback• Configurando as transações
SET TRANSACTION USE ROLLBACK
SEGMENT large_rs1;
• Eliminando segmento
DROP ROLLBACK SEGMENT rbs1;
Contenção de Lock• Detectando / Monitorando
selectblocking_session,sid, serial#,wait_class,seconds_in_wait
fromv$session
whereblocking_session is not NULL
order byblocking_session;
Contenção de Lock• Detectando
– Executar o script catblock.sqlWAITING_SESSION TYPE MODE REQUESTED MODE HELD LOCK ID1 LOCK ID2
--------------- ---- -------------- --------- -------- --------
8 NONE None None 0 0
9 TX Share Exclusive (X) 604 302
7 RW Exclusive (X) S/Row-X(SSX) 50304040 19
10 RW Exclusive (X) S/Row-X(SSX) 50304040 19
Contenção de Lock• Solucionando problemas de lock
SELECT sid, serial#
FROM v$session
WHERE sid in (SELECT holding_session
FROM dba_waiters);
ALTER SYSTEM
KILL SESSION ‘sid,serial#’;