2011-03-02 22 views
10

Estoy cambiando una tabla grande a InnoDB de myISAM. Ha habido mucha discusión sobre por qué cambiar tiene sentido, pero no mucho sobre CÓMO hacerlo mientras se asegura de que la mesa funcione bien.Ajustes de rendimiento de InnoDB

Suponiendo que tendré tablas InnoDB y MyISAM en la base de datos, ¿hay algún parámetro que deba cambiar en el archivo conf de MySQL para facilitar un mejor rendimiento?

¿Hay otros valores predeterminados que se puedan aumentar para mejorar el rendimiento?

+4

toneladas de ellos. Lea el manual y el Blog de rendimiento de MySQL. Si va a utilizar ambos motores de almacenamiento, debe establecer todos los parámetros para ambos. Para InnoDB, comience con el tamaño del grupo de búferes y el tipo de confirmación de transacción. –

+0

Lo que significa tablas grandes (¿cuántos conciertos?)? ¿Qué sistema operativo usas? – Sacx

Respuesta

19

Su innodb_buffer_pool_size debe establecerse en la cantidad de datos e índices InnoDB que tenga. Ejecutar esta consulta y le dirá que el mínimo recomendado el establecimiento de la corriente de datos InnoDB de 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; 

Si sus datos InnoDB supera con creces la memoria RAM instalada en el servidor de base de datos, recomiendo el 75% de la RAM instalada en la caja. Por lo tanto, si tiene un servidor de 16 GB, use 12G como innodb_buffer_pool_size.

También debe establecer innodb_log_file_size al 25% de innodb_buffer_pool_size o 2047M, que es siempre más pequeño. Para cambiar el ib_logfile0 archivo y ib_logfile1, debe:

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

Si está utilizando MySQL 5.5, establecer lo siguiente:

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

Si va a conservar los datos MyISAM ejecutar esta consulta para el escenario ideal para 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; 

ACTUALIZACIÓN 13/02/2013 12:55 EDT

tengo aprendido últimamente a no establecer innodb_io_capacity muy alto, en todo caso. Esto es especialmente cierto en hardware y máquinas virtuales:

+0

Esto es increíble, gracias por las consultas! Pregunta: ¿por qué acabas de dar una recomendación general para el innodb_io_capacity @ 20000? ¿No debería ese número coincidir con el disco IOPS del servidor? –

+0

@ClaytonDukes tienes toda la razón. Tengo un Web Hosting Client con ese tipo de hardware. Perdón por los números extremos. – RolandoMySQLDBA

Cuestiones relacionadas