【问题标题】:InnoDB performance tweaksInnoDB 性能调整
【发布时间】:2011-07-07 15:50:27
【问题描述】:

我正在将一个大表从 myISAM 切换到 InnoDB。有很多关于为什么切换有意义的讨论,但没有太多关于如何在确保表性能良好的情况下进行切换。

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

任何其他可以提高以调整性能的默认值?

【问题讨论】:

  • 大量。阅读手册和 MySQL 性能博客。如果您要同时使用这两个存储引擎,则需要为两者设置所有参数。对于 InnoDB,从缓冲池大小和事务提交类型开始。
  • 什么是大桌子(多少演出?)?你用什么操作系统?

标签: mysql innodb myisam


【解决方案1】:

您的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;

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

您还必须将 innodb_log_file_size 设置为 innodb_buffer_pool_size 的 25% 或 2047M,以较小者为准。要更改文件 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

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

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

如果您要保留 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;

更新 2013-02-13 12:55 EDT

我最近学会了不要将innodb_io_capacity 设置得太高,如果有的话。在商用硬件和虚拟机上尤其如此:

【讨论】:

  • 这太棒了,感谢您的询问!问题:你为什么只对innodb_io_capacity @ 20000 给出一揽子推荐?该数字不应该与服务器的磁盘 IOPS 匹配吗?
  • @ClaytonDukes 你是绝对正确的。我有一个具有这种硬件的 Web 托管客户端。对不起,极端数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多