48
Planejamento – Parte 1 01 - Visão Geral do Ajuste de Desempenho do Banco de Dados 02 - Arquivos de Alert e Trace do Oracle 03 - Utilitários e Visões Dinâmicas de Performance 04 - Otimizando a Shared Pool 05 - Otimizando o Buffer Cache 06 - Otimizando o Redo Log Buffer 07- Configuração do Banco de Dados e Problemas de I/O 08- Utilizando Blocos do Oracle com Eficiência 09 - Otimizando Operações de Ordenação 10 - STATSPACK

Planejamento Parte 1 - deljoe.com.brdeljoe.com.br/professor/op/aula_05.pdf · Planejamento –Parte 1 01 ... •Tem que ser parte do dia-a-dia do DBA •Utilizado como origem para

  • 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

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.

AWR

AWR

AWR• SQL DEVELOPER

Otimização dos Segmentos de Rollback

Segmentos de Rollback ?

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

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• Paralell Server

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

XXXXXXX• Utilizando V$ROLLSTAT e V$ROLLNAME

Segmentos de Rollback• Verificando as visões

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;

Monitorando e Detectando Contenção de Lock

Contenção de Lock

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#’;

Duvidas?

Obrigado

Evandro Deliberal

[email protected]