Sto sistemando il database per un piccolo e-commerce e mi sono accorto che i tempi di risposta per le query sui prodotti iniziano a diventare lenti. Ho aggiunto alcuni indici sui campi più usati, ma non sono sicuro di aver fatto la scelta giusta. Mi chiedo se esista un modo per capire quali query trarrebbero davvero beneficio da una normalizzazione più spinta, senza dover procedere a tentativi.
|
Quando dovrei considerare una gestione centralizzata della configurazione?
|
|
Se vuoi capire chi trae beneficio dalla normalizzazione, guarda i piani di esecuzione e i costi stimati: la normalizzazione cambia la cardinalità e i join, quindi i planner possono preferire join diversi o eseguire filtri in posizione diversa. Prendi uno snapshot della workload con EXPLAIN ANALYZE per le query sui prodotti, verifica quali access path usano indici esistenti e se i costi cambiano drasticamente quando si aggiungono o rimuovono tabelle. I segnali principali sono costi di join, numero di passi e tempo di esecuzione; se noti miglioramenti o peggioramenti coerenti con modifiche di normalizzazione, hai una pista.
Potrebbe non esserci una risposta universale: i tempi dipendono molto dal piano di esecuzione, non solo dalla normalizzazione. Se gli indici coprono i filtri principali, la normalizzazione potrebbe non aiutare e magari è l'I/O o la cache. Il punto è capire quali query hanno la variabilità di cardinalità e se i piani cambiano tra una query e l'altra.
Mi sembra frustrante vedere query lente proprio quando pensi di aver sistemato gli indici. Forse la normalizzazione potrebbe far spostare l'elaborazione su join multipli, ma potrebbe anche alleggerire ricerche su colonne poco selettive. In ogni caso guarda il modello di accesso dominante e tieni presente che le differenze di lettura possono essere esposte solo con workload reale.
Piuttosto che chiedere come capire cosa normalizzare, potresti riformulare il problema: quale parte della catena di accesso ai dati è effettivamente il collo di bottiglia? cache, query rewriting, o i modelli di accesso, e la normalizzazione è solo una delle leve da considerare.
ok, idea: usa statistiche e piani, guarda la collezione di query lente e verifica se la normalizzazione cambia i costi; ma non aspettarti una risposta semplice.
Parla di modello di dati, normalizzazione contro denormalizzazione; una risposta è che esiste un modello di costo che stima l'effetto della normalizzazione su join e cardinalità; basta aggregare metriche su query e tempi; la chiave è capire le dipendenze tra tabelle.
|
|
« Precedente | Successivo »
|

