【问题标题】:Changing tables from MyISAM to InnoDB make the system slow将表从 MyISAM 更改为 InnoDB 会使系统变慢
【发布时间】:2023-04-07 10:25:01
【问题描述】:

您好,我使用的是 Mysql 5.0.x

我刚刚将很多表从 MyISAM 更改为 InnoDB

使用 MyISAM 表大约需要 1 分钟 来安装我们的数据库 使用 InnoDB 大约需要 15 分钟 来安装相同的数据库

为什么 InnoDB 需要这么长时间?

我可以做些什么来加快速度?

数据库安装执行以下步骤

1) 删除架构

2) 创建架构

3) 创建表

4) 创建存储过程

5) 插入默认数据

6) 通过存储过程插入数据

编辑:

默认数据的插入花费了大部分时间

【问题讨论】:

  • 哪个步骤占用了大部分时间?

标签: mysql innodb myisam


【解决方案1】:

修改“插入数据”步骤以在开始时启动事务并在结束时提交。你会得到改进,我保证。 (如果您有大量数据,您可能希望将事务分解为每个表。)

如果您的应用程序根本不使用事务,那么您应该将参数 innodb_flush_log_at_trx_commit 设置为 2。这会给您带来很多性能,因为您几乎肯定会启用 auto_commit 并且这会生成比InnoDB 的默认参数配置为。此设置可阻止它在每次提交时不必要地刷新磁盘缓冲区。

【讨论】:

  • 我同意你关于“innodb_flush_log_at_trx_commit”的观点。例如,当 InnoDB 用作 MyISAM 的就地替代品时,这是一个更好的选择。
  • 还有一件事,在innodb表中按主键顺序插入数据,。
【解决方案2】:

15 分钟对我来说似乎并不过分。毕竟,这是一次性成本。

我不确定,但我想部分解释是参照完整性不是免费的。 InnoDB 必须做更多的工作来保证它,所以它当然会占用更多的时间。

也许您的脚本需要在创建表后更改以添加约束。

【讨论】:

  • 也许还可以考虑使用单个事务而不是自动提交。
  • @roe - 谢谢 - 单笔交易让事情进展得更快
【解决方案3】:

就像 duffymo 说的,在插入数据之前禁用你的约束(索引和外键/主键)。

也许你应该在通过存储过程插入数据之前恢复一些索引,如果它使用了很多select语句

【讨论】:

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