it-swarm.it

Multi core e prestazioni MySQL

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

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

38
Rick James

Quando si tratta di MySQL, non vi è 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à 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). In effetti, Percona inietta circa 30.000 righe di codice appositamente per il miglioramento delle prestazioni di InnoDB con ogni nuovo GA del codice sorgente MySQL. Possiamo essere certi che Oracle abbia incluso i propri miglioramenti dal proprio think tank eseguire all'interno di 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 ottimizzare 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 tendere solo a MySQL . Data questa prospettiva, InnoDB impegnerà 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) allocare 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 di 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.

30
RolandoMySQLDBA

Trovo che parlare di motori di memorizzazione using core possa essere fuorviante per i principianti. A condizione che un programma sia sufficientemente multi-thread, il sistema operativo lo pianificherà su quanti più core possibile.

Il problema specifico che limita il ridimensionamento della CPU è quando il codice di blocco interno ( mutexes ) 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.

9
Morgan Tocker