首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Innodb性能优化

问Innodb性能优化
EN

Stack Overflow用户
提问于 2010-08-02 15:47:29
回答 2查看 1.3K关注 0票数 0

我的站点的一部分需要大容量插入,需要40分钟才能将该文件加载到数据库中。我一直在网上挖掘,发现的东西不多。

  1. innodb_autoinc_lock_mode=2 (它不会生成连续的keys)
  2. UNIQUE_CHECKS=0;(禁用唯一键checks)
  3. FOREIGN_KEY_CHECKS=0 (禁用外键checks)
  4. --log_bin=OFF ),关闭用于复制

的二进制日志)

问题

我只想为一个会话设置前3个选项,即批量插入期间。第一个选项不能工作,mysql说未知的系统变量'innodb_autoinc_lock_mode‘。我使用的是MySQL 5.0.4

最后一个选项,我想关闭它,但我想知道,如果我需要复制以后,它会只是开始工作,如果我再次打开它?

建议

还有任何其他建议,如何改进批量插入/更新innodb?或者请评论我的发现。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2010-08-02 22:00:18

假设您将数据加载到单个或几个事务中,那么大部分时间可能会花费在构建索引(取决于表的架构)上。

不要在启用了自动提交的情况下执行大量的小插入,这会破坏每次提交的同步性能。

如果您的表更大(或者几乎和您的缓冲池一样大),那么您就有麻烦了;一个不能与其索引放在ram中的表不能有效地插入到其中,因为它必须读取才能插入。这样就可以更新现有的索引块。

请记住,磁盘写入是可以的(它们大多是顺序的,并且您有一个电池支持的raid控制器,对吗?),但是读取很慢,需要避免。

总而言之

  • 在少量的大事务中执行插入操作,比如10k-100k行或每个行。不要使事务太大,否则会耗尽日志。
  • 获得足够的ram,使您的表适合内存;适当地设置innodb缓冲池(您正在运行x86_64,对吗?)
  • 不要担心操作需要很长时间,因为由于MVCC,您的应用程序将能够对先前版本的行进行操作,前提是它只读取。

。

不要做上面列出的任何优化,它们可能是浪费时间(不要相信我的话--在您实验室的测试系统上对这些操作进行基准测试)。

关闭唯一的检查是积极危险的,因为你最终会有破损的数据。

票数 2
EN

Stack Overflow用户

发布于 2010-08-02 16:00:07

要回答问题的最后一部分,不可以,它不会重新开始工作;如果插入没有被复制,但是后续的更新是复制的,那么结果就不太好了。禁用外键和唯一键应该是可以的,前提是以后重新启用它们,并处理任何违反约束的行为。

你要多久这么做一次?您能更频繁地加载较小的数据集吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3389374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档