Sou DBA júnior com 3 anos de experiência. Nosso trabalho é ajustar as consultas ou aconselhar os desenvolvedores que determinado código deve ser reescrito ou índices são necessários.
Uma pergunta simples que a equipe de desenvolvimento faz com frequência é: "Ontem funcionou bem, o que mudou de repente?" e seremos solicitados a verificar o lado da infraestrutura. A primeira reação em qualquer problema sempre parece ser colocar a culpa máxima na infraestrutura, que é sempre a primeira coisa a ser validada.
Como devemos responder às perguntas "o que mudou" feitas pela equipe de desenvolvimento? Vocês já enfrentaram a mesma situação? Em caso afirmativo, por favor, compartilhe sua experiência.
Essa é uma pergunta muito comum não apenas com DEV, mas também se aplica a todas as equipes de TI e negócios.
O que mudou ? ==> pode ser respondido por fatos e números.
Os fatos referem-se, por exemplo,
As figuras podem ser derivadas se você tiver dados para mostrar. Por exemplo :
(você deve treinar com base em seu ambiente e necessidades, com que frequência coletar os dados/ quais dados coletar e quanto será o período de retenção) ou (você pode investir em um software de terceiros como o sqlsentry ou o gerenciador de diagnóstico do idera que fará o trabalho acima para você) .
Bem, você pode estar recebendo um plano diferente porque:
sp_configure
alterações podem liberar o cacheEu passo por muitos deles com mais detalhes aqui:
Se eles estiverem sendo executados em ambientes diferentes, tenho uma série de coisas para verificar aqui:
Além disso, é importante ter em mente que criar um índice ou alterar a consulta pode não ser o motivo direto de uma consulta ter um desempenho melhor de repente - às vezes é apenas porque essas alterações realmente geraram um novo plano e/ou invalidaram o que já existia .
Como sempre , Aaron Bertrand e Kin forneceram respostas excelentes. No entanto, ambas as respostas contêm um fio comum. Se você analisar qualquer uma das respostas, verá que o motivo pelo qual XYZ não está funcionando como funcionou ontem não é por causa de algo que você / eles / a pessoa X fizeram. A razão pela qual as coisas mudaram é porque o banco de dados decidiu fazer as coisas de maneira diferente devido a razões XYZ.
Um banco de dados é uma entidade viva que respira . Os bancos de dados tomarão decisões e mudarão de ideia devido a uma combinação de suposições, estatísticas e outras ferramentas heurísticas. Isso é drasticamente diferente da maioria da programação da camada de aplicativo (aprendizado de máquina sendo uma exceção notável).
Vou usar algumas referências militares porque não consigo pensar em algo melhor agora. Uma metáfora mais geral seria apreciada (sem trocadilhos).
Na maioria das aplicações, o programador atua como um instrutor de exercícios. Eles dizem ao computador exatamente o que fazer, em que ordem e, às vezes, por quanto tempo. Programar um banco de dados é mais como atuar como um Comandante. Você diz a ele o que deseja fazer em alto nível e oferece alguma orientação quando necessário. O banco de dados assume a tarefa de descobrir a melhor maneira de executar o plano com base na inteligência atual, como os suboficiais e suboficiais.
Ao deixar essa distinção clara nas mentes dos outros programadores, eles começarão a ver que você não tem poderes ditatoriais como eles têm sobre seu ambiente. Você está guiando o banco de dados para a solução e, ocasionalmente, o banco de dados se desvia por bons ou maus motivos. Lembre-os de que, no final, não importa por que* o banco de dados saiu dos trilhos, mas sim o que podemos fazer para trazê-lo de volta.
* Reconheço que "por que" é muito valioso para prevenção futura, aprendizado, etc., mas parece que o OP está enfrentando resistência de pessoas que não estão tentando aprender ou ajudar no problema.