【问题标题】:MySQL changing large table to InnoDBMySQL 将大表更改为 InnoDB
【发布时间】:2015-02-14 21:35:00
【问题描述】:

我有一个在 CentOS 上运行的 MySQL 服务器,其中包含一个大型 (>12GB) 数据库。出于性能原因,我被建议迁移到 InnoDB,因为我们遇到了锁定,即依赖 DB 的应用程序在服务器繁忙时变得无响应。

我一直在阅读,可以看到将表更改为 InnoDB 的 ALTER 命令可能需要很长时间,并且在此过程中会影响服务器。据我所知,唯一需要更改的是使用以下命令:

ALTER TABLE t ENGINE=InnoDB

我已经在测试服务器上运行了它,它似乎完成得很好,在需要转换的最大表上大约需要 26 分钟。

我从来没有在生产系统上运行过这个,我有兴趣了解以下内容:

  1. 建议对 MySQL 配置进行哪些更改以利用 InnoDB 表的额外性能?服务器当前有 3GB 分配给 InnoDB 缓存 - 正在考虑在安装额外 RAM 后将其增加到 15GB。
  2. 我还应该对服务器进行此更改吗?

【问题讨论】:

  • 你的意思是InnoDB buffer pool?另外,为自己省去一些未来的麻烦,并使用file per table
  • innodb_buffer_pool_size 绝对是控制性能的因素。如果您没有 SSD(RAID 等),也可以使用 SSD。每个表的文件可能会有所帮助,但会在具有高并发性的服务器上引入巨大的问题,因此我暂时不会更改该问题。或者,为了提高性能 - 请查看 TokuDB,它也是一个具有更高性能的替代品。
  • @MarcusAdams 是的,我确实是指 InnoDB 缓冲池,谢谢。我正在迁移到具有 SSD 缓存的新服务器,但目前需要让旧服务器运行更长时间

标签: mysql innodb


【解决方案1】:

我真的推荐使用 Percona MySQL 或 MariaDB。两者都有可以帮助您充分利用 InnoDB 的工具,以及一些可以帮助您进一步诊断和优化数据库的工具(例如,Percona 的 Online Schema Change 工具可用于在不停机的情况下更改您的表)。

就 InnoDB 的优化而言,我认为大多数人都同意 innodb_buffer_pool_size 是最重要的调整参数之一(通常人们将其设置为总可用内存的 70-80% 左右,但这不是一个神奇的数字)。不过,它不是唯一重要的配置变量,而且真的没有神奇的 run_really_fast 设置。您还应该注意 innodb_buffer_pool_instances(https://dba.stackexchange.com/questions/194/how-do-you-tune-mysql-for-a-heavy-innodb-workload 上有关于此主题的很好讨论)

此外,您绝对应该查看 MySQL 文档本身 (http://dev.mysql.com/doc/refman/5.6/en/optimizing-innodb.html) 中提供的提示。关注您的 InnoDB 命中率也是一个好主意(DBA Stackexchange 的 Rolado 对此主题有很好的回答,例如,https://dba.stackexchange.com/questions/65341/innodb-buffer-pool-hit-rate)并仔细分析您的慢查询日志。在那之后,我肯定会建议再次看看 Percona。他们的慢查询分析器是一流的,在优化 SQL 性能方面确实可以帮助您。

【讨论】:

    猜你喜欢
    • 2014-02-26
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2011-10-14
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多