Você fará 3 tipos de ajuste, 1 reativo e 2 proativo.
Reativo
Do nada, algumas consultas começam a causar problemas. Pode ser por causa de um bug ou recurso do aplicativo, uma tabela crescendo acima das expectativas, um pico de tráfego ou o otimizador de consultas ficando "criativo". Esse pode ser um caso do tipo no meio da noite, oh porcaria do site, ou pode ser uma resposta à lentidão do sistema de natureza não crítica. De qualquer maneira, o caráter definidor da sintonia reativa é que você já tem um problema . Escusado será dizer que você quer fazer o mínimo possível disso. O que nos leva a ...
Proativo
Tipo 1: Manutenção de rotina
Em algum tipo de agendamento, a cada poucos meses ou semanas, dependendo da frequência com que o esquema muda e da rapidez com que seus dados crescem, você deve revisar a saída das ferramentas de análise de desempenho do banco de dados (por exemplo, relatórios AWR para DBAs do Oracle). Você está procurando por problemas incipientes, que são coisas que estão a caminho de exigir ajuste Reativo, além de frutas baixas, itens que provavelmente não causarão problemas em breve, mas que podem melhorar com pouco esforço na esperança de evitar longe. problemas futuros. Quanto tempo você deve gastar com isso dependerá de quanto tempo você tem e do que mais você poderia estar gastando, mas a quantidade ideal nunca é zero. No entanto, você pode facilmente reduzir o valor necessário gastando mais de ...
Tipo 2: Design Adequado
A advertência de Knuth contra a "otimização prematura" é amplamente conhecida e devidamente respeitada. Mas a definição adequada de "prematuro" deve ser usada. Alguns desenvolvedores de aplicativos, quando autorizados a escrever suas próprias consultas, tendem a adotar a primeira consulta que eles encontrarem que é logicamente correta e não se importam com o desempenho, presente ou futuro. Ou eles podem testar um conjunto de dados de desenvolvimento que simplesmente não é representativo do ambiente de produção (dica: não faça isso! Os desenvolvedores sempre devem ter acesso a dados realistas para teste.). O ponto é que o momento adequado para ajustar uma consulta é quando ela é implantada pela primeira vez, não quando aparece em uma lista de SQL com baixo desempenho e, definitivamente, não quando causa um problema crítico.
Então, o que qualificaria como uma otimização prematura no território do DBA? No topo da minha lista estaria sacrificando a normalização sem uma necessidade demonstrada. Claro que você pode manter uma soma em uma linha pai em vez de calculá-la em tempo de execução a partir das linhas filho, mas você realmente precisa? Se você é Twitter ou Amazon, a desnormalização estratégica e o pré-cálculo podem ser seus melhores amigos. Se você estiver projetando um pequeno banco de dados contábil para 5 usuários, a estrutura adequada para facilitar a integridade dos dados precisará ser a principal prioridade. Outras otimizações prematuras também são uma questão de prioridades. Não gaste horas ajustando uma consulta que é executada uma vez por dia e leva 10 segundos, mesmo se você acha que pode reduzi-la para 0,1 segundos. Talvez você tenha um relatório que é executado por 6 horas diariamente, mas explore a programação como um trabalho em lotes antes de investir tempo em ajustá-lo. Não invista em uma instância separada de relatórios replicados em tempo real se sua carga de produção nunca flutuar acima de 10% (supondo que você possa gerenciar a segurança).
Ao testar dados realistas, adivinhar suposições educadas sobre padrões de crescimento e tráfego (além de provisões para picos) e aplicar seu conhecimento das peculiaridades do otimizador da plataforma, você pode implantar consultas que executam (perto de) de forma otimizada não apenas agora, mas no futuro , e sob condições abaixo do ideal. Quando você aplica as técnicas apropriadas, o desempenho da consulta pode ser previsto com precisão e otimizado (no sentido de cada componente ser o mais rápido possível).
(E enquanto você está nisso, aprenda estatísticas! )