我查看了 my.ini 并看到了各种默认设置。我的数据库在一台独立的 PC 上运行。我想总体上优化 InnoDB 和 MySQL 的性能以提高性能。没有磁盘空间的限制。我应该更改哪些默认设置以优化以获得更好的性能、可靠性和可能的时间点备份 [高可用性]。
已编辑
目前,每当我通过 MySQL Administrator 上的维护运行“优化表”时,它都会显示:
表不支持优化,改为重新创建+分析
在所有桌子上。我所有的表都是 InnoDB,但为什么它们不支持 Optimize?
我查看了 my.ini 并看到了各种默认设置。我的数据库在一台独立的 PC 上运行。我想总体上优化 InnoDB 和 MySQL 的性能以提高性能。没有磁盘空间的限制。我应该更改哪些默认设置以优化以获得更好的性能、可靠性和可能的时间点备份 [高可用性]。
已编辑
目前,每当我通过 MySQL Administrator 上的维护运行“优化表”时,它都会显示:
表不支持优化,改为重新创建+分析
在所有桌子上。我所有的表都是 InnoDB,但为什么它们不支持 Optimize?
调优 InnoDB 的方法是围绕
这是我在过去 5 年中使用的一个公式,用于根据 InnoDB 数据和索引页面使用的磁盘空间计算 InnoDB 缓冲池:
当然,我说的是InnoDB当前使用的可用内存和磁盘空间的功能。从这里开始,只需使用常识。上述查询中推荐的数量不应超过 INSTALLED RAM 的 75% !!!这是调整 InnoDB 缓冲池大小的最简单的经验法则。
您还应该将innodb_flush_method 设置为 O_DIRECT,因为它将提供 InnoDB 的稳定同步写入。我还写了一篇关于如何优化 InnoDB 的磁盘存储的文章。
关于消息Table does not support optimize, doing recreate + analyze instead,您收到该错误消息的原因是存储引擎是 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 性能”。
在开始调整之前,您需要确定您的标准是什么以及如何判断您的更改是否有帮助。
然后将您的配置文件和启动选项置于版本控制之下,并开始试验。记录你遵循谁的建议,以及你在哪里找到的。(随着代码库和硬件的变化,建议随着时间的推移而变化。)也将这些文档置于版本控制之下。