Oh, bom Deus, acho que já vi todos eles. Na maioria das vezes, é um esforço para corrigir problemas de desempenho por alguém com muita preguiça de solucionar seus problemas até a CAUSA desses problemas de desempenho ou até mesmo pesquisar se há realmente um problema de desempenho. Em muitos desses casos, me pergunto se não é apenas o caso daquela pessoa querendo experimentar uma determinada tecnologia e procurando desesperadamente por uma unha que se encaixe no seu novo e brilhante martelo.
Aqui está um exemplo recente:
O arquiteto de dados me apresenta uma proposta elaborada para particionar verticalmente uma tabela-chave em um aplicativo bastante grande e complexo. Ele quer saber que tipo de esforço de desenvolvimento seria necessário para ajustar a mudança. A conversa foi assim:
Eu: Por que você está considerando isso? Qual é o problema que você está tentando resolver?
Ele: A Tabela X é muito ampla, estamos particionando por motivos de desempenho.
Eu: O que faz você pensar que é muito grande?
Ele: O consultor disse que são colunas demais para haver em uma tabela.
Eu: E isso está afetando o desempenho?
Ele: Sim, os usuários relataram lentidão intermitente no módulo XYZ do aplicativo.
Eu: Como você sabe que a largura da tabela é a fonte do problema?
Ele: Essa é a tabela principal usada pelo módulo XYZ, e tem 200 colunas. Deve ser o problema.
Eu (explicando): Mas o módulo XYZ, em particular, usa a maioria das colunas nessa tabela, e as colunas que ele usa são imprevisíveis porque o usuário configura o aplicativo para mostrar os dados que deseja exibir nessa tabela. É provável que 95% das vezes acabássemos juntando todas as tabelas novamente, o que prejudicaria o desempenho.
Ele: O consultor disse que é muito amplo e precisamos mudar isso.
Eu: Quem é esse consultor? Eu não sabia que contratamos um consultor, nem eles conversaram com a equipe de desenvolvimento.
Ele: Bem, ainda não os contratamos. Isso faz parte de uma proposta que eles ofereceram, mas insistiram que precisávamos re-arquitetar esse banco de dados.
Eu: Uh huh. Portanto, o consultor que vende serviços de redesenho de banco de dados acha que precisamos de um redesenho de banco de dados ....
A conversa continuou assim. Depois, dei uma outra olhada na tabela em questão e determinei que ela provavelmente poderia ser reduzida com alguma normalização simples, sem a necessidade de estratégias de particionamento exóticas. Isso, é claro, acabou sendo um ponto discutível depois que eu investiguei os problemas de desempenho (anteriormente não relatados) e os localizei em dois fatores:
- Índices ausentes em algumas colunas principais.
- Alguns analistas de dados não autorizados que estavam periodicamente bloqueando tabelas de chaves (incluindo a "ampla demais") consultando o banco de dados de produção diretamente com o MSAccess.
É claro que o arquiteto ainda está pressionando por um particionamento vertical da tabela pendurado no meta-problema "muito amplo". Ele até reforçou seu caso ao receber uma proposta de outro consultor de banco de dados que foi capaz de determinar que precisávamos de grandes alterações de design no banco de dados sem olhar o aplicativo ou executar qualquer análise de desempenho.