我查看了my.ini,并看到了各种默认设置。我的数据库在单个独立PC上运行。我想总体上优化InnoDB和MySQL的性能。磁盘空间没有限制。我应该更改哪些默认设置以优化性能,可靠性和可能的时间点备份[高可用性]。
已编辑
目前,每当我通过维护在MySQL Administrator上运行“优化表”时,它就会显示:
表不支持优化,而是执行重新创建+分析
在所有桌子上。我所有的表都是InnoDB,但是为什么它们不支持Optimize?
我查看了my.ini,并看到了各种默认设置。我的数据库在单个独立PC上运行。我想总体上优化InnoDB和MySQL的性能。磁盘空间没有限制。我应该更改哪些默认设置以优化性能,可靠性和可能的时间点备份[高可用性]。
已编辑
目前,每当我通过维护在MySQL Administrator上运行“优化表”时,它就会显示:
表不支持优化,而是执行重新创建+分析
在所有桌子上。我所有的表都是InnoDB,但是为什么它们不支持Optimize?
Answers:
调优InnoDB的方法围绕
这是我在过去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;
当然,我说的是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的其他文章
这是有关“粗调”的重要变量的较旧文章。最重要的一个可能是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中设置变量
优化有很多颜色。
我认为您的第一步应该是确定“优化”对您而言意味着什么。对于某些人来说,这意味着“最快的SELECT查询”。对于其他人,这意味着“ SELECT性能和INSERT性能之间的最佳平衡”。对于其他人,“最快的INSERT性能”。
您需要确定您的标准以及开始调整之前如何确定所做的更改是否有帮助。
然后将您的配置文件和启动选项置于版本控制下,并开始试验。记录您遵循的建议以及在哪里找到的建议。(随着代码库和硬件的变化,建议会随时间而变化。)这些文档也应置于版本控制之下。