In uno dei miei ambienti di produzione, abbiamo due istanze in esecuzione su un cluster RedHat, con un'istanza di produzione associata al cluster.
Abbiamo memoria principale 125G con pool buffer InnoDB 24G occupata dall'istanza 1 e 12G occupata dall'istanza2, che non è associata al cluster RedHat. Sia i dati che i registri delle transazioni si trovano sulla partizione del disco LVM con un file system ext3.
Per un aumento delle prestazioni e un migliore throughput I / O ho deciso di passare innodb_flush_method
a O_DIRECT
.
Con riferimento alla documentazione MySQL:
Laddove i dati InnoDB e i file di registro si trovano su una SAN, è stato riscontrato che l'impostazione
innodb_flush_method
suO_DIRECT
può degradare le prestazioni diSELECT
istruzioni semplici di un fattore tre.
Facendo riferimento a MySQL Ver 2 e 3 ad alte prestazioni, ha dichiarato che gli sviluppatori di InnoDB hanno riscontrato errori nell'utilizzo innodb_flush_method=O_DSYNC
. O_SYNC
e O_DSYNC
sono simili a fsync()
e fdatasync()
: O_SYNC
sincronizza sia i dati che i metadati, mentre O_DSYNC
sincronizza solo i dati.
Se tutto ciò sembrava un sacco di spiegazioni senza alcun consiglio, ecco il consiglio:
se si utilizza un sistema operativo simile a Unix e il controller RAID dispone di un writeecache con batteria, si consiglia di utilizzare
O_DIRECT
. In caso contrario, l'impostazione predefinita oO_DIRECT
sarà probabilmente la scelta migliore, a seconda dell'applicazione.
Cercando su Google ho ottenuto questo rapporto di riferimento: su O_DSYNC
vsO_DIRECT
Rapporto sui benchmark: =================== Test transazionale complesso 1B Row, 64 thread * SAN O_DIRECT: richieste di lettura / scrittura: 31560140 (8766,61 al secondo) * SAN O_DSYNC: richieste di lettura / scrittura: 5179457 (1438,52 al secondo) * SAN fdatasync: richieste di lettura / scrittura: 9445774 (2623,66 al secondo) * Disco locale O_DIRECT: richieste di lettura / scrittura: 3258595 (905,06 al secondo) * O_DSYNC su disco locale: richieste di lettura / scrittura: 3494632 (970,65 al secondo) * Fdatasync del disco locale: richieste di lettura / scrittura: 4223757 (1173.04 al secondo.
Tuttavia, O_DIRECT
disabilita la cache a livello di sistema operativo, in cui è possibile disabilitare la doppia cache che mostra un throughput I / O migliore.
Va bene con O_DIRECT
piuttosto che con O_DSYNC
? Queste due opzioni sono un po 'confuse. Quale opzione può mostrare un throughput I / O migliore e un miglioramento delle prestazioni senza alcun impatto sui dati, letture / scritture soprattutto nella produzione? Qualche suggerimento migliore basato sulla tua esperienza personale?
Ho potuto vedere Rolando Update nel post :
C'è ancora una leggera confusione su entrambi questi parametri. Dove ho potuto vedere la maggior parte dei modelli di configurazione di produzione usando
O_DIRECT
, non ho visto dove raccomandareO_DSYNC
.
Sistema
- MySQL 5.1.51-enterprise-gpl-pro-log
- Red Hat Enterprise Linux Server versione 5.5
- DELL DRAC con controller Raid con una cache di riscrittura della batteria da 512 MB
- Controller Dell PERC H700 con una batteria di backup (BBU).
Informazioni aggiuntive
mysql> mostra variabili come 'innodb_thread_concurrency'; + --------------------------- + ------- + | Nome variabile | Valore | + --------------------------- + ------- + | innodb_thread_concurrency | 96 | + --------------------------- + ------- + 1 riga nel set (0,00 sec) mysql> mostra variabili come 'innodb_read_io_threads'; Set vuoto (0,00 sec) mysql> mostra variabili come 'innodb_write_io_threads'; Set vuoto (0,00 sec)
Stiamo usando il plugin predefinito, quindi ho pubblicato le informazioni dallo stato di InnoDB:
mysql> SELEZIONA * DA Plug-in DOVE A PLUGIN_NAME COME '% innodb%' E A PLUGIN_TYPE COME 'STORAGE ENGINE' \ G *************************** 1. riga ******************** ******* PLUGIN_NAME: InnoDB PLUGIN_VERSION: 1.0 PLUGIN_STATUS: ATTIVO PLUGIN_TYPE: MOTORE DI STOCCAGGIO PLUGIN_TYPE_VERSION: 50151.0 PLUGIN_LIBRARY: NULL PLUGIN_LIBRARY_VERSION: NULL PLUGIN_AUTHOR: Innobase OY PLUGIN_DESCRIPTION: supporta transazioni, blocco a livello di riga e chiavi esterne PLUGIN_LICENSE: GPL 1 riga nel set (0,00 sec)