Mysql
 sql >> Database >  >> RDS >> Mysql

Modifiche alle prestazioni di InnoDB

Il tuo innodb_buffer_pool_size dovrebbe essere impostato sulla quantità di dati e indici InnoDB che hai. Esegui questa query e ti dirà l'impostazione minima consigliata per gli attuali dati Innodb di mysql

SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),
SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(index_length) KBS FROM information_schema.tables WHERE
engine='InnoDB') A,(SELECT 3 pw) B;

Se i tuoi dati InnoDB superano di gran lunga la RAM installata sul server DB, ti consiglio il 75% della RAM installata sulla scatola. Quindi, se hai un server da 16 GB, usa 12G come innodb_buffer_pool_size.

Devi anche impostare innodb_log_file_size al 25% di innodb_buffer_pool_size o 2047M, che è sempre più piccolo. Per modificare i file ib_logfile0 e ib_logfile1, devi:

mysql -uroot -p -e"SET GLOBAL innodb_fast_shutdown = 0;"
service mysql stop
rm ib_logfile0 ib_logfile1
service mysql start

Se stai usando MySQL 5.5, imposta quanto segue:

innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=20000 (set this to your device's IOPs)

Se conserverai i dati MyISAM, esegui questa query per l'impostazione ideale per key_buffer_size:

SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),
SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_key_buffer_size
FROM (SELECT SUM(index_length) KBS FROM information_schema.tables
WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A,
(SELECT 3 pw) B;

AGGIORNAMENTO 13-02-2013 12:55 EDT

Ultimamente ho imparato a non impostare innodb_io_capacity molto alto, se non del tutto. Ciò è particolarmente vero per l'hardware di base e le macchine virtuali: