InnoDB性能调整

Jus*_*ker 10 mysql myisam innodb

我正在从myISAM将一个大表切换到InnoDB.关于为什么切换有意义,但是在如何确保表格表现良好的情况下如何做到这一点已经有很多讨论.

假设我在数据库中有InnoDB和MyISAM表,我是否应该在MySQL conf文件中更改参数以提高性能?

任何其他默认值可以提升到调整性能?

Rol*_*DBA 21

您的innodb_buffer_pool_size应设置为您拥有的InnoDB数据和索引的数量.运行此查询,它将告诉您mysql当前Innodb数据的最小建议设置

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;
Run Code Online (Sandbox Code Playgroud)

如果您的InnoDB数据远远超过数据库服务器上安装的RAM,我建议在盒子上安装75%的RAM.因此,如果您有16GB服务器,请使用12G作为innodb_buffer_pool_size.

您还必须将innodb_log_file_size设置为innodb_buffer_pool_size或2047M的25%,它们更小.要更改文件ib_logfile0和ib_logfile1,您必须:

mysql -uroot -p -e"SET GLOBAL innodb_fast_shutdown = 0;"
service mysql stop
rm ib_logfile0 ib_logfile1
service mysql start
Run Code Online (Sandbox Code Playgroud)

如果您使用的是MySQL 5.5,请设置以下内容:

innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=20000 (set this to your device's IOPs)
Run Code Online (Sandbox Code Playgroud)

如果您将保留MyISAM数据,请运行此查询以获取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;
Run Code Online (Sandbox Code Playgroud)

更新2013-02-13 12:55美国东部时间

我最近才知道不要将innodb_io_capacity设置非常高,如果有的话.在商用硬件和虚拟机上尤其如此: