Multi core e prestazioni MySQL


38

L'importanza della RAM è un dato di fatto, ma è disponibile molto meno materiale sull'importanza dei core e del multithreading quando si tratta dell'utilizzo della CPU da parte di MySQL. Sto parlando della differenza tra l'esecuzione di MySQL su 4cores vs 6cores vs 8cores e così via.

I diversi motori di archiviazione utilizzano la CPU in modo diverso?



è correlato ma non indirizza i comportamenti di diversi motori di archiviazione verso CPU multi core.
Rick James,

1
Infatti. Ecco perché non esiste un voto "vicino come duplicato" ...
gbn

Questa è una comunità meravigliosa, sto ancora imparando come usare questo sito.
Rick James,

Ciao amico dai un'occhiata qui: mysql-cluster-blog.com trovi almeno qualcosa

Risposte:


30

Quando si tratta di MySQL, non esiste alcun confronto tra i motori di archiviazione, tranne che rientra in due categorie di base:

MySQL offre l'uso di diversi motori di archiviazione

Per quanto riguarda i motori di archiviazione elencati, gli unici con conformità ACID sono InnoDB e NDB. Perché questa importazione è da menzionare? Due motivi:

  • Altri motori di archiviazione non beneficiano semplicemente della presenza di più core, oltre all'I / O del disco di base, all'utilizzo della CPU e alla velocità effettiva complessiva.
  • Il codice per ciascun motore di archiviazione non transazionale, che determina sostanzialmente 14 operazioni interne indipendentemente dal motore di archiviazione, non è stato progettato per sfruttare l'accesso a più core.

InnoDB in MySQL 5.5, Plugin InnoDB) e XtraDB di Percona Server hanno opzioni che puoi impostare per accedere a più core (Percona Server lo fa da più tempo). Infatti, Percona inietta circa 30.000 righe di codice appositamente per il miglioramento delle prestazioni di InnoDB con ogni nuova versione GA del codice sorgente MySQL. Possiamo essere certi che Oracle abbia incluso i propri miglioramenti dal proprio think tank per l'esecuzione in InnoDB per operazioni multicore (da MySQL 5.1.38).

Con la necessità di eseguire MVCC sui dati in combinazione con il blocco di righe / pagine, ora le prestazioni delle transazioni possono essere strumentate, misurate e configurate.

Se c'è una cosa che ho imparato sull'uso di più core, è che devi sintonizzare InnoDB in modo efficace e non fare affidamento solo su InnoDB .

AGGIORNAMENTO 2011-09-20 08:03 EDT

Per quanto riguarda InnoDB che beneficia di tutti i core, dobbiamo mantenere le cose in prospettiva. I core devono anche tendere ad altre questioni (sistema operativo, disco, memoria, applicazioni, monitoraggio, ecc.) Nel server database. Per quelli con budget modesti, molti tendono ad avere un Database Server che fornisce anche NFS, il monitoraggio da Munin, il supporto delle app per JBoss, PHP e l'elenco continua. Se si desidera che MySQL, in particolare InnoDB, utilizzi più core, il server database deve essere dedicato esclusivamente a MySQL e il sistema operativo / disco / memoria deve essere destinato esclusivamente a MySQL . Vista questa prospettiva, InnoDB coinvolgerà più core senza dubbio .

Per quanto riguarda il plug-in InnoDB, è stato menzionato semplicemente per mostrare le iniziative precedenti per avere un InnoDB migliore da parte di MySQL (eh, Oracle. Siamo spiacenti, non è ancora uscito dalla lingua). Nuove variabili per richiamare più attività di base sono diventate evidenti da MySQL 5.1.38.

Ad esempio, innodb_read_io_threads e innodb_write_io_threads (entrambi da MySQL 5.1.38) assegnano il numero specificato di thread per letture e scritture. Il valore predefinito è 4 e il massimo è 64. Le impostazioni predefinite e massime essendo così diverse (4 - 64) mostrano che InnoDB è multithread e ad alta intensità di core durante la configurazione !!!

Percona ha risposto alle esigenze della comunità MySQL per accedere a più core con InnoDB. Di conseguenza, MySQL ha iniziato a seguire l'esempio. Devo ammettere che Oracle (yuck) ha apportato i miglioramenti necessari per una maggiore attività di base.


InnoDB con MySQL 5.5 ottimizzato come suggerito sopra può beneficiare di tutti i core? {un po 'confuso riguardo al plugin InnoDB}
Rick James,

@Rick - Ho ulteriormente indirizzato il tuo commento nella mia risposta
RolandoMySQLDBA il

Qui sembra essere una storia completamente diversa e MyISAM sembra fallire quando si tratta di utilizzare multi core ma dall'altro lato su dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb MyISAM ha vantaggi. Quindi, sembra essere un pareggio per decidere quale strada da percorrere.
Rick James,

2
Tutto dipende dallo scopo che hai nell'utilizzo di MyISAM o InnoDB. Cosa e quanto sei disposto a memorizzare nella cache? Ti affidi a MySQL o ad altri meccanismi di memorizzazione nella cache (come vernice e memcached) per il recupero dei dati? Il tuo hardware è correttamente ridimensionato per InnoDB? Il 98% dei tuoi SQL SELECT è? La tabella è nel formato migliore per le letture ad alta velocità? Rispondere a queste domande prima di tutto dovrebbe guidarci sulla selezione del motore di archiviazione, sulla configurazione appropriata, sulla selezione dell'hardware, persino sul raggiungimento di cose più profonde come la disponibilità elevata, la topologia di database, la suddivisione in lettura / scrittura e questo elenco può continuare.
RolandoMySQLDBA

9

Trovo che parlare di motori di archiviazione usando i core possa essere fuorviante per i principianti. A condizione che un programma sia sufficientemente multi-thread, il sistema operativo lo pianificherà attraverso il maggior numero di core possibile.

Il problema specifico che limita il ridimensionamento della CPU è quando il codice di blocco interno ( mutex ) presenta contese e blocca l'esecuzione simultanea dei thread. Tutti i motori di archiviazione richiederanno i mutex, ma certamente ce ne sono alcuni caldi in MyISAM.

Se ignoriamo la contesa mutex per un secondo e torniamo alla tua domanda principale: quanto è importante avere molti core? -

Mi piace avere molti core per i carichi di lavoro che soddisfano le richieste degli utenti. Avere molti può ridurre la varianza tra i tempi delle query. Pensa a questo come fare la fila al supermercato con 12 navate aperte contro solo 2.

Aggiornamento : ho scritto un post sul blog sul perché la scalabilità verticale (multi-core) è importante.


5
+1 per menzionare l'elefante nella stanza: contesa mutex
cerd
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.