优化InnoDB默认设置


8

我查看了my.ini,并看到了各种默认设置。我的数据库在单个独立PC上运行。我想总体上优化InnoDB和MySQL的性能。磁盘空间没有限制。我应该更改哪些默认设置以优化性能,可靠性和可能的​​时间点备份[高可用性]。

已编辑

目前,每当我通过维护在MySQL Administrator上运行“优化表”时,它就会显示:

表不支持优化,而是执行重新创建+分析

在所有桌子上。我所有的表都是InnoDB,但是为什么它们不支持Optimize?


该编辑需要一个单独的问题,imo。看一下OPTIMIZE TABLE文档:dev.mysql.com/doc/refman/5.5/en/optimize-table.html InnoDB支持该命令,但是该过程与MyISAM不同
Derek Downey

Answers:


11

调优InnoDB的方法围绕

  • InnoDB缓冲池:它缓存数据页和索引页。您可以缓存的数据和索引的数量不是磁盘空间限制的函数,而是InnoDB当前使用的可用内存和磁盘空间的函数。
  • InnoDB MetaData:缺省情况下,文件ibdata1通常包含InnoDB的所有内容。那将包括数据页,索引页,表元数据,MVCC数据。

这是我在过去5年中根据InnoDB数据和索引页使用的磁盘空间来计算InnoDB缓冲池的公式

SELECT CONCAT(ROUND(KBS/POWER(1024,IF(Power1024<0,0,
IF(Power1024>3,0,Power1024)))+0.49999),SUBSTR(' KMG',IF(Power1024<0,0,
IF(Power1024>3,0,Power1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,(SELECT 2 Power1024) B;
  • 对字节使用(SELECT 0 Power1024)
  • 对KB使用(SELECT 1 Power1024)
  • 对MB使用(SELECT 2 Power1024)
  • 对GB使用(SELECT 3 Power1024)
  • 将(SELECT 4 Power1024)用于TB(如果您具有TerraBytes的RAM,请发送电子邮件给我)

当然,我说的是InnoDB当前使用的可用内存和磁盘空间的功能。从这里开始,只需使用常识即可。上述查询中的推荐数字不应超过已安装RAM的75%!这是确定InnoDB缓冲池大小的最简单的经验法则。

您还应该将innodb_flush_method设置为O_DIRECT,因为它将提供稳定的InnoDB同步写入。我还写了一篇关于如何为InnoDB优化磁盘存储的文章

对于消息Table不支持优化,而是执行recreate + analysis,得到该错误消息的原因是存储引擎为InnoDB。从机械上讲,OPTIMIZE TABLE仅将表复制到临时表并执行ANALYZE TABLE

实际上,针对InnoDB的ANALYZE TABLE是完全没有用的。即使您在InnoDB表上运行ANALYZE TABLE,InnoDB存储引擎也会一遍又一遍地深入到基数近似值的索引中,从而浪费了刚编译的统计信息。实际上,Percona在ANALYZE TABLE上进行了一些测试,并得出了相同的结论

这是我过去一年中发表的有关InnoDB Tuning的其他文章


我的电脑有2GB RAM,默认情况下InnoDB_Buffer_Pool_Size设置为6M。我已将其增加到500M。有什么建议么?
RPK

将其设置为1536M,即1.5G,因为这是已安装RAM的75%
RolandoMySQLDBA

我运行了您的查询,它的输出为45G。我服务器上的RAM是8G。我是否绝对必须增加RAM?还是有一些条件,以上面的查询..
的Stewie

@Stewie如果您拥有45G的InnoDB,那么如果您有预算,则需要60GB的RAM。由于您只有8G,因此75%的已安装RAM(6G)就足够了。
RolandoMySQLDBA 2012年

@RolandoMySQLDBA:很棒的帖子!但是我不太明白为什么在Stewie的情况下,他的RAM只有8 GB,但是他的查询输出却可以大于8GB(在这种情况下为45G)。
Chubaka

3

这是有关“粗调”的重要变量的较旧文章。最重要的一个可能是innodb_buffer_pool_size

我强烈建议您升级到MySQL 5.5(如果您尚未运行它)。他们对InnoDB的性能进行了很多更改。由于它是默认引擎,它们甚至提供了有关如何优化InnoDB的主流部分: http //dev.mysql.com/doc/refman/5.5/en/optimizing-innodb.html

对于时间点备份,您需要查看二进制日志。启用此功能的基础是log-bin在my.cnf中设置变量


我已经升级到MySQL 5.5。
RPK

2

优化有很多颜色。

我认为您的第一步应该是确定“优化”对您而言意味着什么。对于某些人来说,这意味着“最快的SELECT查询”。对于其他人,这意味着“ SELECT性能和INSERT性能之间的最佳平衡”。对于其他人,“最快的INSERT性能”。

您需要确定您的标准以及开始调整之前如何确定所做的更改是否有帮助。

然后将您的配置文件和启动选项置于版本控制下,并开始试验。记录您遵循的建议以及在哪里找到的建议。(随着代码库和硬件的变化,建议会随时间而变化。)这些文档也应置于版本控制之下。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.