Oh buon Dio, penso di averli visti tutti. Il più delle volte è uno sforzo per risolvere i problemi di prestazioni di qualcuno che è troppo dannatamente pigro per risolvere il problema fino alla CAUSA di quei problemi di prestazioni o persino ricercare se esiste effettivamente un problema di prestazioni. In molti di questi casi mi chiedo se non è solo il caso di quella persona che vuole provare una particolare tecnologia e cerca disperatamente un chiodo che si adatti al suo nuovo martello lucido.
Ecco un esempio recente:
Data Architect mi viene in mente con una proposta elaborata di partizionare verticalmente una tabella di chiavi in un'applicazione abbastanza grande e complessa. Vuole sapere quale tipo di sforzo di sviluppo sarebbe necessario per adeguarsi al cambiamento. La conversazione è andata così:
Io: perché lo stai prendendo in considerazione? Qual è il problema che stai cercando di risolvere?
Lui: la tabella X è troppo ampia, la stiamo partizionando per motivi di prestazioni.
Io: cosa ti fa pensare che sia troppo largo?
Lui: Il consulente ha detto che ci sono troppe colonne per avere in una tabella.
Io: E questo sta influenzando le prestazioni?
Lui: Sì, gli utenti hanno segnalato rallentamenti intermittenti nel modulo XYZ dell'applicazione.
Io: come fai a sapere che la larghezza della tabella è la fonte del problema?
Lui: Questa è la tabella delle chiavi utilizzata dal modulo XYZ, ed è come 200 colonne. Deve essere il problema.
Io (Spiegazione): Ma il modulo XYZ in particolare usa la maggior parte delle colonne in quella tabella e le colonne che utilizza sono imprevedibili perché l'utente configura l'app per mostrare i dati che vogliono visualizzare da quella tabella. È probabile che il 95% delle volte finiremmo per unire tutti i tavoli insieme, il che danneggerebbe le prestazioni.
Lui: Il consulente ha detto che è troppo ampio e dobbiamo cambiarlo.
Io: chi è questo consulente? Non sapevo che avessimo assunto un consulente, né avevano parlato con il team di sviluppo.
Lui: Beh, non li abbiamo ancora assunti. Questo fa parte di una proposta che hanno offerto, ma hanno insistito sulla necessità di riprogettare questo database.
Io: Uh eh. Quindi il consulente che vende servizi di riprogettazione del database pensa che abbiamo bisogno di una riprogettazione del database ....
La conversazione è andata avanti all'infinito. Successivamente, ho dato un'altra occhiata al tavolo in questione e ho determinato che probabilmente poteva essere ristretto con una semplice normalizzazione senza la necessità di strategie di partizionamento esotiche. Questo, ovviamente, si è rivelato essere un punto controverso una volta che ho esaminato i problemi di prestazioni (precedentemente non segnalati) e li ho rintracciati fino a due fattori:
- Indici mancanti su alcune colonne chiave.
- Alcuni analisti di dati non autorizzati che bloccavano periodicamente le tabelle delle chiavi (inclusa quella "troppo ampia") interrogando il database di produzione direttamente con MSAccess.
Ovviamente l'architetto sta ancora spingendo per un partizionamento verticale del tavolo aggrappato al meta-problema "troppo ampio". Ha anche rafforzato il suo caso ricevendo una proposta da un altro consulente di database che è stato in grado di determinare che avevamo bisogno di importanti modifiche di progettazione al database senza guardare l'app o eseguire alcuna analisi delle prestazioni.