Olá pessoal,
No artigo de hoje vou comentar sobre os 10 erros mais comuns encontrados em Bancos de Dados (BDs) Oracle, que impactam negativamente na performance dos BDs e que poderiam ser evitados implementando-se algumas dicas que darei a seguir. Várias dessas dicas (ver Solução(ões) possível(is)) podem ser implementadas sem muito esforço, porém, outras podem requerer uma reengenharia completa da aplicação ou uma análise mais aprofundada sobre o problema para definir um diagnóstico e soluções melhores.
Problemas mais comuns
1- Gerenciamento de conexão ruim:
Muitas aplicações (principalmente aplicações web) conectam e se desconectam rapidamente em cada interação com o BD. O custo de criar uma nova conexão em cada interação com o BD pode ser muito alto em relação ao tempo de parse e execução de cada instrução SQL que é executada nas interações com o BD.
Solução(ões) possível(is):
a) Criar pool de conexões (Connection Pooling) na aplicação.
b) No Oracle Database 11G já é possível habilitar Connection Pooling no BD, porém, pelo que eu li sobre o assunto, me parece que este recurso ainda não está muito bom no BD, portanto, recomendo ainda a opção “a)”.
2- Mau uso de cursores e da Shared Pool:
Não usar cursores compartilhados ou variáveis bind pode resultar em muitos hard parses, que degradam a performance das instruções SQL e que podem consumir muito espaço de memória na Shared Pool.
Solução(ões) possível(is):
a) Nas aplicações, use variáveis bind ou chame stored procedures.
b) Habilitar o compartilhamento de cursores na instância de BD também pode contornar o problema, mas CUIDADO, outros podem surgir… por isso, prefira a opção “a)”.
3- SQL ruim:
As instruções SQL estão usando muitos recursos do sistema.
Solução(ões) possível(is):
Otimizar as instruções SQL (SQL Tuning).
4- Parâmetros de inicialização com valores diferentes do padrão:
Muitos parâmetros de inicialização são configurados com valores inapropriados, baseando-se em mau entendimento ou suposições incorretas.
Solução(ões) possível(is):
Conhecer bem os parâmetros de inicialização, a arquitetura do SGBD Oracle e a sua necessidade real, para configurá-los corretamente.
5- I/O ruim:
Em muitos lugares o armazenamento do BD não está bem distribuído nos discos disponíveis ou a largura de banda de I/O não é suficiente para atender a demanda das requisições do BD.
Solução(ões) possível(is):
Conhecer bem os dispositivos de armazenamento (Ex.: Storage) disponíveis, configurar o tipo de armazenamento (Ex.: RAID) mais apropriado e distribuir os arquivos do BD (log files, datafiles, control files etc.) em vários discos, seguindo as recomendações da própria Oracle. Para mais informações, leia I/O Configuration and Design.
6- Configuração de Redo Logs:
Redo logs pequenos ou poucos grupos de redo logs podem gerar muitos checkpoints que, consequentemente, irão gerar uma sobrecarga na Buffer Cache e no sistema de I/O.
Solução(ões) possível(is):
Configurar apropriadamente a quantidade de grupos de redo log e o tamanho dos redo log files. Para mais informações, leia Sizing Redo Log Files.
7- Serialização de blocos de dados:
A serialização de blocos de dados na Buffer Cache ocorre quando há a falta de listas livres, grupos de listas livres, slots de transação (initrans) ou segmentos de rollback. Normalmente isso ocorre quando:
- As aplicações executam pesadas rotinas de carga;
- As aplicações tem muita concorrência e tamanhos de blocos maiores que 8K;
- As aplicações possuem uma grande qtde. de usuários e o BD possui poucos segmentos de rollback.
Solução(ões) possível(is):
a) Configurar tablespaces para usar ASSM;
b) Configurar o gerenciamento automático de UNDO;
c) Não configurar tablespaces com tamanho de bloco maior que 8K para armazenar dados de objetos que sofrem muitas atualizações concorrentes.
8- Full Table Scans longos:
Full Table Scans em operações online interativas ou de alto volume, normalmente consomem muito I/O lógico e físico.
Solução(ões) possível(is):
Criar índices, otimizar SQL Ruim, particionar tabelas etc.
9- Grande quantidade de SQL recursivo (SYS) executados:
Uma grande quantidade de SQL recursivo executado pelo usuário SYS pode indicar atividades muito altas de gerenciamento de espaço de armazenamento, tais como alocação de extents. Essas atividades impactam negativamente no tempo de resposta do usuário.
Solução(ões) possível(is):
Usar tablespaces gerenciados localmente, configurar auto-incremento adequeado, etc.
10- Erros de migração e implantação:
Em muitos casos, uma aplicação usa muitos recursos do sistema porque o schema contendo as tabelas não foi migrado com sucesso, por exemplo, de um ambiente de desenvolvimento para o ambiente de produção. Nestes casos, o que ocorre normalmente é a ausência de índices ou estatísticas incorretas, que influenciam negativamente nos planos de execução.
Solução(ões) possível(is):
a) Exporte as estatísticas do schema de origem usando a package DBMS_STATS;
b) Atualize as estatísticas de objetos manualmente;
c) Crie os objetos ausentes.
Por hoje é só!
Referência:
- Top Ten Mistakes Found in Oracle Systems: http://docs.oracle.com/cd/B19306_01/server.102/b14211/technique.htm#i11221
Artigo original em Blog Fábio Prado
10 Comentários
Mas que barbaridade Fábio. Seria um ótimo artigo se você não tivesse copiado (traduzido) e alterado poucos trechos do original que está em Docs Oracle.
Mais sério ainda é citar ao final que o DOCS ORACLE foi apenas uma referência. Quando utilizamos algo como referência não é para copiar, serve para fazer uma relação com um conteúdo próprio, isto é, escrito por você.
Descordei e nem quis comentar o que o Fagner falou, de forma agressiva, em relação ao outro artigo. Sempre acompanho o que você publica e gosto muito.
Mas dessa vez você não foi correto com seus leitores.
Minha crítica é mais com o Portal Profissionais TI, que inclusive mudaram a política de reprodução dos textos publicados aqui. Pô Jackson, li o texto que você publicou sobre o problema dos autores que publicam aqui terem com seu artigos: eles estavam sendo copiados sem a devida autorização ou menção de fonte.
Agora acontece aqui. O Fábio praticamente postou, com pequenas alterações, o que está em outra fonte e dando crédito a ele. Em alguns trechos foi tradução direta, sem alteração.
Levando em consideração que o material é protegido por Copyright, isso pode gerar problemas.
Mais atenção pessoal. Publicar, por publicar, é melhor ficar sem conteúdo.
Cecília,
Entendo sua crítica, no entanto, a responsabilidade pelos textos publicados são dos respectivos autores. Isso consta no “Termos de Colaboração”.
O que faço nas revisões de textos: pego o texto, jogo numa ferramenta de plágio e avalio o resultado. Textos já publicados em outras fontes só são republicados no PTI se a origem for o site/blog do próprio autor. Cópias literais não são publicadas. Só não tenho controle se os autores publicam seus textos também em outros portais – os artigos são deles, não pedimos exclusividade!
O que não faço é avaliar se um texto é apenas uma tradução com modificações, pois acredito que todos os autores são profissionais suficiente para saber que “apropriar-se” de conteúdo não é correto (e pode gerar problemas!).
Tenho plena confiança no Fábio, e acredito que ele possa nos conceder mais informações sobre isso, pois é um grande profissional e autor do PTI de longa data – sem ressalvas anteriores!
Agradeço pela crítica. Somente desta forma sabemos o que erramos e podemos evoluir.
Voltando ao tópico, sinceramente, é uma vergonha alguém que só quer criticar o trabalho dos outros ficar se escondendo por nomes e e-mails falsos.
César, Cecília, Fabrício, Fagner são todos fakes. Todos os comentários um pouco mais “pesados” em diversos artigos vieram destas “pessoas”.
A mesma faixa de IP em todos os comentários e até mesmo o mesmo IP (179.219.255.116) em comentários diferentes em nome de Cecília e César.
Você, que se esconde para fazer estas críticas, porque faz isso? Eu (Jackson) fiz algo a você? Algum autor do PTI fez algo a você?
Abra sua identidade e vamos conversar, pois algumas de suas críticas são pertinentes, logo, não é necessário se esconder.
Abrir uma discussão sobre comentários feitos por uma mesma pessoa com nomes diferentes é querer desviar o assunto. Leia o texto em inglês e verá que foi plágio: imitação ou cópia fraudulenta.
E ponto final.
Interesse ZERO de desviar o assunto, tanto que estou aguardando comentários do Fábio Prado.
Criei o PTI para disseminar conhecimentos de profissionais da área, não para ter intrigas, muito menos ficar respondendo comentários para mascarados. Mas tudo bem, vamos lá. Faz parte lidar com pessoas do tipo.
Como comentei anteriormente, abra sua identidade e vamos conversar, pois algumas críticas são pertinentes, logo, não é necessário se esconder atrás de Pedros, Cecilias, Fabricios e etc.
Cecília, diante dos comentários do Jackson, vc, César, Fabrício e Fagner parece que estão aqui no blog só para desvalorizar o trabalho de profissionais que dedicam seu tempo em compartilhar conhecimentos e fazer algo útil para os profissionais de TI. Quando a gente afirma algo temos que ter certeza do assunto! Pessoas anônimas que se expõem sobre vários fakes e que não tem coragem de se expor não tem credibilidade para merecer uma resposta. De qq forma, vou responder para outros leitores que irão ler posteriormente este artigo!
Plágio é a cópia ou reprodução parcial ou total de textos sem citar os créditos ou fazer referências ao autor original. No artigo coloquei a referência do texto original da Oracle.
Agora vamos refletir um pouco! Eu trabalho com Oracle todos os dias da semana, dou aulas de Oracle e estudo muita documentação oficial da Oracle para poder entender bem este BD e dar aulas com qualidade e satisfazer meus alunos. Quem pesquisar um pouco sobre mim, poderá entrar no meu Linkedin e consultar comentários positivos de muitos alunos sobre a qualidade das minhas aulas! Por estudar muitos materiais oficiais da Oracle é natural que eu queira compartilhar aqueles que eu mais gostar e que eu mais tiver afinidades com o assunto! A Oracle está feliz por isso. Eu escrevo artigos para eles também!
Quando eu li pela 1a. vez o link oficial da Oracle que eu referencio neste artigo, eu comecei a escrever este artigo visando facilitar a compreensão e acrescentando no mínimo uma sugestão de solução, baseada em meus conhecimentos prévios, pois o artigo original, não fornecia sugestões de soluções para todos os erros. O artigo é bem parecido com o original, isso é verdade, mas não é plágio. O que caracteriza plágio é não dar créditos ao autor ou não fazer referência a ele. De qq forma, vc tem todo direito de reclamar e postar sua opinião!
Parabéns pelos argumentos Fábio. E valeu por repassar um conteúdo de forma mais clara aos com pouca capacidade ou dificuldade de compreensão de textos mais complexos.a
Obrigado Ricardo!
Excelente artigo e excelentes dicas! Como propósito do site, não interessa se houve cópia, tradução ou citação do conteúdo original da Oracle. Afinal, o autor está justamente falando de um produto da ORACLE. Não tem lógica não citar a documentação do próprio produto. Aliás, que discussão mais sem sentido essa acima, sobre direitos autorais, cópia, etc. O que importa é o conteúdo que está sendo compartilhado.
abraços a todos..
at
Obrigado pelo feedback Fábio Cristovão.