planejamento parte 1 - deljoe.com.brdeljoe.com.br/professor/op/aula_04.pdf · manter para cada...

50
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

Upload: buikien

Post on 28-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

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

Configuração do Banco de Dados e Problemas de I/O

Configuração• Antes de iniciar a instalação é preciso que o

ambiente esteja compatível para receber o RDBMS

• é necessário analisar os requisitos mínimos de hardware e software.

– Uma boa prática é utilizar a própria documentação disponível pela Oracle

• Realizar um checklist pré e pós instalação ajudam a evitar problemas no decorrer da instalação

Configuração• Faça o download da mídia• Hardware (Linux)• Para determinar o tamanho da memória física RAM:

– # grep MemTotal /proc/meminfo (Para determinar o tamanho da memória física RAM:)

– # grep SwapTotal /proc/meminfo (Para determinar o tamanho do swap configurado)– # df -h /tmp (Para determinar a quantidade de espaço disponível no diretório / tmp:)– # df –h (Para determinar a quantidade de espaço livre em disco no sistema)– # free –mt (Para determinar a quantidade de memória RAM livre e espaço swap no

sistema)– # uname –m (Para determinar se a arquitetura do sistema pode executar o software)– x86_64 (Verifique se a arquitetura do processador corresponde à versão do

software x86-64 bits:)

Configuração• Certifique-se de que o seu sistema Linux x86-64 atende aos

requisitos de espaço em disco para arquivos de software e arquivos de dados, conforme recomendação abaixo:

• Para instalação tipo Enterprise Edition será necessário o mínimo de 6.4 GB. – Para outros tipos como Standard Edition e Standard Edition One é

necessário espaço de 6.1 GB;

• 1 GB de espaço no diretório / tmp;

• Requisitos mínimos de memória do servidor: Mínimo 1 GB (Recomendado 2 GB ou mais).

Configuração• Pré-requisito de software

– Os seguintes pacotes precisam ser instalados em caso de configuração manual no Oracle Linux 6:

• binutils-2.20.51.0.2-5.11.el6 (x86_64)• compat-libcap1-1.10-1 (x86_64)• compat-libstdc++-33-3.2.3-69.el6 (x86_64)• compat-libstdc++-33-3.2.3-69.el6 (i686)• gcc-4.4.4-13.el6 (x86_64)• gcc-c++-4.4.4-13.el6 (x86_64)• glibc-2.12-1.7.el6 (i686)• glibc-2.12-1.7.el6 (x86_64)• glibc-devel-2.12-1.7.el6 (x86_64)• glibc-devel-2.12-1.7.el6 (i686)• ksh• libgcc-4.4.4-13.el6 (i686)• libgcc-4.4.4-13.el6 (x86_64)• libstdc++-4.4.4-13.el6 (x86_64)• libstdc++-4.4.4-13.el6 (i686)• libstdc++-devel-4.4.4-13.el6 (x86_64)• libstdc++-devel-4.4.4-13.el6 (i686)

• libaio-0.3.107-10.el6 (x86_64)

• libaio-0.3.107-10.el6 (i686)

• libaio-devel-0.3.107-10.el6 (x86_64)

• libaio-devel-0.3.107-10.el6 (i686)

• libXext-1.1 (x86_64)

• libXext-1.1 (i686)

• libXtst-1.0.99.2 (x86_64)

• libXtst-1.0.99.2 (i686)

• libX11-1.3 (x86_64)

• libX11-1.3 (i686)

• libXau-1.0.5 (x86_64)

• libXau-1.0.5 (i686)

• libxcb-1.5 (x86_64)

• libxcb-1.5 (i686)

• libXi-1.3 (x86_64)

• libXi-1.3 (i686)

• make-3.81-19.el6

• sysstat-9.0.4-11.el6 (x86_64)

Configuração• A Oracle recomenda a configuração dos seguintes parâmetros no arquivo

“/etc/sysctl.conf”. Caso a configuração seja manual, utilizar os seguintes valores:– fs.aio-max-nr = 1048576– fs.file-max = 6815744– kernel.shmall = 2097152– kernel.shmmax = 536870912– kernel.shmmni = 4096– kernel.sem = 250 32000 100 128– net.ipv4.ip_local_port_range = 9000 65500– net.core.rmem_default = 262144– net.core.rmem_max = 4194304– net.core.wmem_default = 262144– net.core.wmem_max = 1048586

Configuração• Execute o seguinte comando para alterar os parâmetros do

kernel:– # /sbin/sysctl -p

• Execute o seguinte comando para criar os usuários e grupos necessários:– # groupadd oinstall– # groupadd dba– # groupadd oper– # useradd -g oinstall -G dba,oper, oracle

• Obs.: Esta instalação não utiliza ASM, por isso não é necessário criar o grupo asmadmin.

Configuração

Configuração

Configuração

Configuração

Configuração

ConfiguraçãoParâmetro Descrição

COMPATIBLE Especifica a versão com a qual o ORACLEdeve manter a compatibilidade. Ele permite que vocêtire vantagem das melhorias de uma nova versão imediatamente em seus sistemas de produção sem testar a nova funcionalidade no seu ambiente. Se o seu aplicativo foi projetado para uma versão específica de banco de dados Oracle, e você está, na verdade, a instalação de uma versão posterior, então você pode querer definir esse parâmetro para a versão do anterior release.

DB_BLOCK_SIZE Define o tamanho dos blocos de banco de dados Oracle armazenados nos arquivos de banco de dados e armazenados em cache no SGA. A gama de valores depende do sistema operativo, mas é tipicamente 8192 para os sistemas de processamento de transacções e valores mais elevados para os sistemas de armazenamento de dados.

ConfiguraçãoParâmetro Descrição

SGA_TARGET Especifica o tamanho total de todos os componentes PIG. Se SGA_TARGET for especificado, então o cache de buffer (DB_CACHE_SIZE), piscina Java (JAVA_POOL_SIZE), piscina grande (LARGE_POOL_SIZE), e piscina comum (SHARED_POOL_SIZE) pools de memória são dimensionados automaticamente.

PGA_AGGREGATE_TARGET Especifica o destino de memória PGA agregada disponível para todos os processos do servidor conectado à instância.

PROCESSES Define o número máximo de processos que podem ser iniciados por essa instância. Este é normalmente o principal parâmetro mais importante para definir, porque muitos outros valores de parâmetros são deduzidos a partir deste.

SESSIONS Isso é definido por padrão a partir do valor dos processos. No entanto, se você estiver usando o servidor compartilhado, então o valor deduzida é provável que seja insuficiente.

ConfiguraçãoParâmetro Descrição

UNDO_MANAGEMENT Especifica o modo de gerenciamento de espaço de undousado pelo banco de dados. O padrão é AUTO. Se não for especificado, o banco de dados usa AUTO.

UNDO_TABLESPACE Especifica a tabela de undo para ser usado quando uma instância é iniciada.

Configuração• UNDO Space

– O banco utiliza este espaço para armazenar dados usado para leitura, recuperação e ROLLBACK

– Existe em uma ou mais TABLESPACE– No DBCA é criado automaticamente– Manualmente utilize o UNDO TABLESPACE na clausa CREATE

DATABASE– Para habilitar automaticamente configure o parâmetro

UNDO_MANAGEMENT (por default já vem AUTO)– Oracle sempre recomenda AUTO– Utilize as views V$UNDOSTAT e V$ROLLSTAT

Configuração• Sizing Redo Log Files

– O tamanho do arquivo pode influenciar na performance, por que paralelo ao processos do banco existe um processo que irá escrever e arquivar as ações e processos

– FAST_START_MTTR_TARGET

– Para verificar o tamanho ideal consultar na viewV$INSTANCE_RECOVERY coluna OPTIMAL_LOGFILE_SIZE

Configuração• Criar + de um Tablespace

– Quando utilizado muitas operações

– Pode utilizar a sintax

• ALTER TABLESPACE ...

• ADD DATAFILE

– As mesmas podem ser

• Permanent

• Temporary – auxilia a otimizar ordenação em disco

Configuração• Na criação de tabela

– Valor PCTFREE

– PCTUSED

• Compressão– Entender e estimar o tempo

– Melhorar o arquivamento

– Utilizar atributos de clustered

• INSERT/*+APPEND*/ or ALTER

• TABLE ... MOVE PARTITION

Configuração• Indexação de dados

– Utilizar a clause PARALLEL na criação de um índice CREATE INDEX

– Especificar o espaço de memória para a ordenação pelo parâmetro PGA_AGGREGATE_TARGET

• Compartilhamento de servidor– Verificar os processos (utilize as views V$DISPATCHER

ou V$DISPATCHER_RATE)

– Pode reduzir o numero de saídas (MAX_DISPATCHERS)

Configuração• Ambiente de servidor

• Tempo Médio por requisiçãoSELECT DECODE(TOTALQ, 0, 'No Requests', WAIT/TOTALQ || ' HUNDREDTHS OF SECONDS') "AVERAGE WAIT TIME PER REQUESTS" FROM V$QUEUE WHERE TYPE = 'COMMON';

SELECT COUNT(*) "Shared Server Processes" FROM V$SHARED_SERVER WHERE STATUS != 'QUIT';

COLUNA Descrição

WAIT Exibe o tempo total de espera, em centésimos de segundo, para todos os pedidos que já estive na fila

TOTALQ Exibe o número total de pedidos que já estive na fila

I/O• Sempre importante identificar e monitorar

• As informações de I/O estão armazenadas nas VISÕES DE PERFORMANCE DINÂNAMICAS

• Verificar a view V$SYSTEM_EVENT– Eventos relacionados

• Db fiel sequential read

• Db file scattered read

• Db file single wirte

• Db file parallel

• Log file parallel write

• Objetivo:

– Coletar identificadores,

– Tempo total de espera,

– Numero de espera executadas,

– Requisições por cada operação,

– Único ou vários bytes de blocos lidos e

– Um ou vários bytes de gravação

I/OView Descrição

V$IOSTAT_CONSUMER_GROUP

captura estatísticas de I / O para os grupos de consumidores. Se o Oracle Database Resource Manager é ativada, todas estatistivas dos grupos de consumidores que fazem parte do plano de recursos ativado atualmente são capturados

V$IOSTAT_FILE Captura as estatísticas dos arquivos de banco de dados que são ou foram acessados (SMALL_SYNC_READ_LATENCY)

V$IOSTAT_FUNCTION Captura as estatísticas das funções do banco de dados (como LGWR – Log WRiter e DBWR – DataBase WRiter)

I/Oselect FUNCTION_ID, FUNCTION_NAME from v$iostat_function

FUNCTION_ID FUNCTION_NAME

----------- ----------------------------------

0 RMAN

1 DBWR

2 LGWR

3 ARCH

4 XDB

5 Streams AQ

6 Data Pump

7 Recovery

8 Buffer Cache Reads

9 Direct Reads

10 Direct Writes

11 Others

Utilizando Blocos do Oracle com Eficiência

Bloco de Dados• O formato do bloco de

dados Oracle é semelhante, independentemente de o bloco de dados contém a tabela, índice ou dados em cluster

Bloco de Dados• Parâmetros de controle de Simultaneidade

– INITRANS • um dados e dois índices. Pode-se criara segmentos adicionais

– MAXTRANS• 255 valor default, com limite para transações simultâneas• A definição deste valor restringirá o uso do espaço de slots de transações

– PCTFREE = Parâmetro de controle de utilização de espaço de dados (10% padrão)

– PCTUSED = Parâmetro utilizado para representa a porcentagem mínima de espaço utilizado que o servidor Oracle tentara manter para cada bloco de dados da tabela• Um bloco será colocado novamente na free list, quando se espaço utilizado for

menor que o valor do parâmetro PCTUSED

Bloco de Dados• Free List

– uma lista de um segmento que contém blocos que concorrem para acomodar futuras inserções

– um segmento é sempre criado com uma free list, mas também possível criar segmento com altos números de free lists definindo o parâmeto FREELISTS, sendo o valor default de PCTUSED de 40%

– Os valores para PCTFREE e PCTUSED são calculados como porcentagem de espaço de dados disponíveis

– Esses parâmetros somente são definidos como segmento e nunca no nível do tablespace.

Bloco de Dados• Views de Consulta

Nome Descrição

Dba_segments Número de extensões e blocos alocados para segmentos

Dba_extents Extensões de um segmento especifico

Dba_free_space Extensões de um segmento especifico.

Otimizando Operações de Ordenação

Otimizando Ordenação• Muitas técnicas surgiram a partir do Oracle 10.2

• Utilização do conceito Hash-Based– Anteriormente, um GROUP BY envolvia a classificação

dos dados nas colunas relevantes, em seguida, acumula os resultados agregados. O GROUP BY com o método hash, cria os agregados sem triagem, e é quase sempre mais rápido do que o grupo com base GROUP BY.

• Controlado pelo parâmetro _GBY_HASH_AGGREGATION_ENABLED

Otimizando Ordenação

Otimizando Ordenação

Otimizando Ordenação

Otimizando Ordenação

Otimizando Ordenação• Quando um GROUP BY está associada a um ORDER BY sobre as

mesmas colunas, o otimizador Oracle pode escolher um GROUP BY SORT, em vez de o GRUPO HASH geralmente mais eficiente BY.

• Usando o SORT GROUP BY evite a adição de uma ordem de classificação para o plano, mas o resultado global é geralmente decepcionante.

• Para obter um melhor resultado, você pode executar o GROUP BY em uma visão em linha e executar a ORDER BY na consulta externa.

• Use a dica NO_MERGE para evitar que as duas operações sejam combinadas.

STATSPACK

STATSPACK• O STATSPACK é fornecido pela Oracle desde a

versão 8i

• Tem como objetivo auxiliar na análise e monitoramento de performance do ambiente, fornecendo um relatório detalhado, semelhante ao AWR

• São requeridos 64MB para a instalação

STATSPACK• Instalando

• Criar uma tablespace para o STATPACK

• Para uma melhor performance, configure a inicialização do parâmetro TIMED_STATISTICS = TRUE

.

STATSPACK• próximo passo consiste na execução do script spcreate.sql

localizado em $ORACLE_HOME/rdbms/admin conectado como sysdba.

• Durante a execução deste script será solicitada a definição de uma senha para o usuário perfstat (criado pelo processo). A definição de uma senha é obrigatório para possamos continuar com a instalação;

• Após definir a senha, será solicitada a default tablespace. • Por último será solicitado qual a tablespace temporária a

ser utilizada. Neste caso, definirei como a tablespacepadrão (TEMP).

STATSPACK

STATSPACK• Para uma coleta automática, execute o script

spauto.sql. – Este script criará um job que por padrão irá gerar um

snapshot por hora. De acordo com a necessidade do ambiente é possível alterar o intervalo de execução deste job

SQL> @?/rdbms/admin/spauto.sql

• Para uma coleta manual utilize comando abaixo:– SQL> EXECUTE STATPACK.snap

STATSPACK• Para remover Statspack basta executar o

spdrop.sql encontrado no $ORACLE_HOME/rdbms/admin

• Na criação do script, um arquivo spckg.list é criado, reveja o arquivo para qualquer possível erro que encontrar.

STATSPACK• Alguns scripts padrãoScript Descrição

sppurge.sql Elimina um intervalo de SNAPSHOTS entre um ID inicial e Final

spauto.sql Programa o DBMS_JOB automático para coletar informações do STATSPACK

spcreate.sql Instala o STATSPACK usuário, tabelas e pacotes no Banco de Dados (Executar como SYS)

spdrop.sql Desinstala o STATSPACK

spreport.sql Relatório da diferenças entre os valores armazenados de dois SNAPSHOTS

sptrunc.sql Truncate de todos os dados das tabelas de STATSPACK

STATSPACK• Problemas

– Algumas estatísticas só podem ser comunicados ao término de uma consulta. Por exemplo, se uma consulta é executada por 12 horas, o seu processamento não serão relatados durante qualquer uma das fotografias tiradas enquanto a consulta foi ocupado executando.

– Se as consultas são antigas e fora do SharedPool as estatísticas de V $ SQL são restauradas. Isto pode jogar fora os cálculos delta e até mesmo torná-lo negativo. Por exemplo, consulta A tem 10.000 tampão recebe um instantâneo 1, mas pelo instantâneo # 2, que foi envelhecido fora doSharedPool e recarregado e agora mostra apenas 1.000 buffer ficar. Então, quando você executar spreport.sql de snapshot 1-2, você obterá 1,00010,000 = 9,000 para esta consulta.

STATSPACK• Problemas

– Algumas estatísticas só podem ser comunicados ao término de uma consulta. Por exemplo, se uma consulta é executada por 12 horas, o seu processamento não serão relatados durante qualquer uma das fotografias tiradas enquanto a consulta foi ocupado executando.

– Se as consultas são antigas e fora do SharedPool as estatísticas de V $ SQL são restauradas. Isto pode jogar fora os cálculos delta e até mesmo torná-lo negativo. Por exemplo, consulta A tem 10.000 tampão recebe um instantâneo 1, mas pelo instantâneo # 2, que foi envelhecido fora doSharedPool e recarregado e agora mostra apenas 1.000 buffer ficar. Então, quando você executar spreport.sql de snapshot 1-2, você obterá 1,00010,000 = 9,000 para esta consulta.

Duvidas?

Obrigado

Evandro Deliberal

[email protected]