优化 InnoDB 默认设置

RPK*_*RPK 8 mysql innodb performance mysql-5.5

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

已编辑

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

表不支持优化,改为重新创建+分析

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

Rol*_*DBA 12

调优 InnoDB 的方式是围绕

  • InnoDB Buffer Pool:缓存数据页和索引页。您可以缓存的数据和索引量不是磁盘空间限制的函数,而是 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;
Run Code Online (Sandbox Code Playgroud)
  • 对字节使用 (SELECT 0 Power1024)
  • 对 KB 使用 (SELECT 1 Power1024)
  • 对 MB 使用 (SELECT 2 Power1024)
  • 对 GB 使用 (SELECT 3 Power1024)
  • 使用 (SELECT 4 Power1024) for TB(如果你有 TerraBytes 的 RAM,请给我发电子邮件)

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

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

关于消息表不支持优化,而是执行重新创建+分析,您收到该错误消息的原因是存储引擎是InnoDB。从机制上讲, OPTIMIZE TABLE 只是将表复制到临时表并执行ANALYZE TABLE

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

以下是我在这一年中发表的关于 InnoDB Tuning 的其他帖子