Planejamento Parte 1 - deljoe.com.brdeljoe.com.br/professor/op/aula_04.pdf · manter para cada...
Transcript of Planejamento Parte 1 - deljoe.com.brdeljoe.com.br/professor/op/aula_04.pdf · manter para cada...
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• 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çã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
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 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• 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• 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• 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.