optimizer - mysql tuning script



Quante righe in un database sono TROPPE? (7)

Ho una tabella InnoDB MySQL con 1.000.000 di record. È troppo? Oppure i database possono gestire questo e altro? Chiedo perché ho notato che alcune query (ad esempio, ottenendo l'ultima riga da una tabella) sono più lente (secondi) nella tabella con 1 milione di righe rispetto a una con 100.

https://ffff65535.com


Ho una tabella InnoDB MySQL con 1000000 registri. È troppo?

No, 1.000.000 di righe (record AKA) non è troppo per un database.

Chiedo perché ho notato che alcune query (ad esempio, ottenendo l'ultimo registro di una tabella) sono più lente (secondi) nella tabella con 1 milione di registri rispetto a una con 100.

C'è molto da spiegare in questa affermazione. I soliti sospetti sono:

  1. Query scritta male
  2. Non usare una chiave primaria, supponendo che ne esista addirittura sul tavolo
  3. Modello di dati mal progettato (struttura della tabella)
  4. Mancanza di indici

Ho un database con oltre 97.000.000 di record ( file di dati da 30 GB ) e non ho problemi.

Ricordati solo di definire e migliorare l' indice della tua tabella.

Quindi è ovvio che 1.000.000 non sono MOLTI! (Ma se non indicizzi, sì, è MOLTI)


L'utilizzo della query fornita sarà eccezionalmente lento a causa dell'utilizzo di un metodo di unione di ordinamento per ordinare i dati.

Suggerirei di riconsiderare il design in modo da utilizzare gli indici per recuperarlo o accertarsi che sia già ordinato in quel modo, quindi non è necessario alcun ordinamento.


Penso che questo sia un malinteso comune: la dimensione è solo una parte dell'equazione in termini di scalabilità del database. Ci sono altri problemi che sono difficili (o più difficili):

  • Quanto è grande il working set (ovvero quanti dati devono essere caricati in memoria e attivamente lavorati). Se si inseriscono solo dati e quindi non si fa nulla, è in realtà un problema facile da risolvere.

  • Quale livello di concorrenza è richiesto? C'è solo un utente che inserisce / legge, o abbiamo migliaia di client operativi contemporaneamente?

  • Quali livelli di promessa / durata e coerenza delle prestazioni sono richiesti? Dobbiamo assicurarci di onorare ogni impegno. Va bene se la transazione media è veloce, o vogliamo essere sicuri che tutte le transazioni siano attendibilmente veloci (controllo della qualità di sei sigma come: http://www.mysqlperformanceblog.com/2010/06/07/performance-optimization-and-six-sigma/ ).

  • Hai bisogno di fare qualche problema operativo, come ALTER lo schema della tabella? In InnoDB questo è possibile, ma incredibilmente lento poiché spesso deve creare una tabella temporanea in primo piano (bloccando tutte le connessioni).

Quindi ho intenzione di dichiarare che i due problemi limitativi saranno:

  • La tua abilità nello scrivere le query / avere buoni indici.
  • Quanto dolore puoi tollerare in attesa di dichiarazioni ALTER TABLE.

Registrare? Vuoi dire record?

Al giorno d'oggi, un milione di record non è un grosso problema per un database. Se incontri qualche problema, è probabile che non sia il sistema stesso del database, ma piuttosto l'hardware su cui lo stai eseguendo. Non si verificherà un problema con il DB prima che si esaurisca l'hardware per lanciarlo, molto probabilmente.

Ora, ovviamente alcune query sono più lente di altre, ma se due query molto simili vengono eseguite in tempi molto diversi, è necessario capire quale sia il piano di esecuzione del database e ottimizzare per esso, cioè utilizzare indici corretti, normalizzazione adeguata, ecc.

Per inciso, non esiste un "ultimo" record in una tabella, dal punto di vista logico non hanno un ordine intrinseco.


Se intendi 1 milione di righe, dipende da come viene eseguita l'indicizzazione e dalla configurazione dell'hardware. Un milione di righe non è una grande quantità per un database aziendale, o anche un database di sviluppo su apparecchiature decenti.

se intendi 1 milione di colonne (non è sicuro che ciò sia possibile anche in MySQL) allora sì, sembra un po 'grande e probabilmente causerà problemi.


Usa 'spiega' per esaminare la tua query e vedere se c'è qualcosa di sbagliato nel piano di query.





performance