Mi sono stati presentati alcuni server MySQL dedicati che non usano mai più di un singolo core. Sono più sviluppatore di DBA per MySQL, quindi ho bisogno di aiuto
Impostare
I server sono piuttosto pesanti con un carico di tipo OLAP / DataWarehouse (DW):
- Primario: 96 GB di RAM, 8 core + singolo array RAID 10
- Test: 32 GB di RAM con 4 core
- Il DB più grande è 540 GB, il totale è di circa 1,1 TB e principalmente tabelle InnoDB
- Solaris 10 Intel-64
- MySQL 5.5.x
Nota: il DB più grande è quello replicato dal server DR OLTP e il DW viene caricato da questo. Non è un DW completo: dura solo dai 6 mesi alle 6 settimane, quindi è più piccolo del DB OLTP.
Osservazioni su un server di prova
- 3 connessioni separate
- ognuno ha un concorrente (e diverso)
ALTER TABLE...DROP KEY...ADD INDEX
- le 3 tabelle hanno 2,5, 3,8 e 4,5 milioni di righe
- L'utilizzo della CPU arriva fino al 25% (un core è al massimo) e non più in alto
- i 3 ALTER impiegano 12-25 minuti (uno solo sul più piccolo dura 4,5)
Domande
- Quale impostazione o patch è richiesta per consentire l'utilizzo di più di un core?
Cioè, perché MySQL non utilizza tutti i core disponibili? (come altri RDBMS) - È una conseguenza della replica?
Altre note
- Comprendo la differenza tra un "thread" RDBMS e un "thread" del sistema operativo
- Non sto chiedendo alcuna forma di parallelismo
- Alcune delle variabili di sistema per InnoDB e thread non sono ottimali
(in cerca di una rapida vittoria) - A breve termine, non riesco a modificare il layout del disco
- Il sistema operativo può essere modificato, se necessario
- Una singola tabella ALTER sul tavolo più piccolo richiede 4,5 minuti (IMO scioccante)
Modifica 1
- innodb_thread_concurrency è impostato su 8 su entrambi. Sì, è sbagliato ma MySQL non utilizzerà più core
- innodb_buffer_pool_size è 80 GB su primario, 10 GB su un test (un'altra istanza viene chiusa). Questo va bene per ora.
- innodb_file_per_table = ON
Modifica 2
- innodb_flush_log_at_trx_commit = 2
- innodb_use_sys_malloc = ON
- innodb_flush_method dovrebbe essere O_DIRECT (ma SHOW VARIABLES non lo mostra)
- innodb_doublewrite = OFF
- File system = ZFS (E il mio amministratore di sistema ha trovato questo: http://blogs.oracle.com/realneel/entry/mysql_innodb_zfs_best_practices )
Testare
- innodb_flush_method non viene mostrato come O_DIRECT quando dovrebbe essere
- seguirà le impostazioni di RolandoMySQLDBA
Fammi sapere se ho perso qualcosa di importante
Saluti
Aggiornare
Modificato innodb_flush_method + 3 impostazioni di thread nella risposta di RolandoMySQLDBA
Risultato:> 1 core utilizzato per i test = risultato positivo
\G
. Inoltre, penso che SHOW INNODB STATUS
sia deprecato in favore di SHOW ENGINE INNODB STATUS
5.5 (ricevo un errore nell'esecuzione della prima riga di comando.