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
- AWR - Otimização dos Segmentos de Rollback - Monitorando e Detectando Contenção de Lock Planejamento Parte 2 - 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).
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) Configuração 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
Parâmetro COMPATIBLE DB_BLOCK_SIZE Descrição Configuração Especifica a versão com a qual o ORACLE deve 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. 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.
Parâmetro SGA_TARGET PGA_AGGREGATE_TARGET PROCESSES SESSIONS Descrição Configuração 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. Especifica o destino de memória PGA agregada disponível para todos os processos do servidor conectado à instância. 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. 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.
Parâmetro UNDO_MANAGEMENT UNDO_TABLESPACE Descrição Configuração Especifica o modo de gerenciamento de espaço de undo usado pelo banco de dados. O padrão é AUTO. Se não for especificado, o banco de dados usa AUTO. 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
Sizing Redo Log Files Configuração 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 view V$INSTANCE_RECOVERY coluna OPTIMAL_LOGFILE_SIZE
Criar + de um Tablespace Quando utilizado muitas operações Pode utilizar a sintax ALTER TABLESPACE... ADD DATAFILE As mesmas podem ser Configuração Permanent Temporary auxilia a otimizar ordenação em disco
Na criação de tabela Valor PCTFREE PCTUSED Compressão Entender e estimar o tempo Melhorar o arquivamento Utilizar atributos de clustered Configuração 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)
Ambiente de servidor COLUNA WAIT TOTALQ Descrição Configuração Exibe o tempo total de espera, em centésimos de segundo, para todos os pedidos que já estive na fila Exibe o número total de pedidos que já estive na fila Tempo Médio por requisição SELECT 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';
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, I/O 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
View V$IOSTAT_CONSUMER_ GROUP V$IOSTAT_FILE V$IOSTAT_FUNCTION Descrição 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 Captura as estatísticas dos arquivos de banco de dados que são ou foram acessados (SMALL_SYNC_READ_LATENCY) Captura as estatísticas das funções do banco de dados (como LGWR Log WRiter e DBWR DataBase WRiter) I/O
select FUNCTION_ID, FUNCTION_NAME from v$iostat_function I/O 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
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
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.
Views de Consulta Nome Descrição Bloco de Dados Dba_segments Dba_extents Dba_free_space Número de extensões e blocos alocados para segmentos Extensões de um segmento especifico 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
Instalando Criar uma tablespace para o STATPACK STATSPACK 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 tablespace padrã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.
Alguns scripts padrão Script sppurge.sql spauto.sql spcreate.sql spdrop.sql spreport.sql sptrunc.sql Descrição STATSPACK Elimina um intervalo de SNAPSHOTS entre um ID inicial e Final Programa o DBMS_JOB automático para coletar informações do STATSPACK Instala o STATSPACK usuário, tabelas e pacotes no Banco de Dados (Executar como SYS) Desinstala o STATSPACK Relatório da diferenças entre os valores armazenados de dois SNAPSHOTS 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 evandro@deljoe.com.br