![]() |
1
15
你没有说这是测试系统还是产品;我假设它是产品。 很可能您已经将表的索引(或整批索引)调整到了不再适合内存的大小。 这意味着innodb必须在插入期间读取页面(取决于新行索引值的分布)。阅读页面(随机阅读)非常慢,如果可能的话需要避免。 分区似乎是最明显的解决方案,但是MySQL的分区可能不适合您的用例。 当然,您应该考虑所有可能的选项——将表放到实验室中的测试服务器上,以查看它的行为。 在我看来,您的主键可能不是必需的(您有另一个唯一索引),因此消除它是一个选项。 同时考虑到innodb插件和压缩,这将使您的innodb缓冲池更进一步。 您真的需要分析您的用例来决定您是否真的需要保留所有这些数据,以及分区是否是一个明智的解决方案。 对此应用程序进行任何更改都可能会给用户带来新的性能问题,因此您需要在这里非常小心。如果您找到一种提高插入性能的方法,它可能会降低搜索性能或其他操作的性能。在发布这种更改之前,您需要对生产级硬件进行彻底的性能测试。 |
![]() |
2
4
从我对InnoDB的经验来看,它似乎达到了写密集型系统的极限,即使您有一个真正优化的磁盘子系统。我很惊讶你能达到100GB。 这就是Twitter不久前遇到的,并意识到它需要分享-看 http://github.com/twitter/gizzard . 这完全取决于您的用例,但是您也可以从MySQL迁移到Cassandra,因为它对于写密集型应用程序的性能非常好。 |
![]() |
3
1
正如markr上面所评论的,当索引不再适合缓冲池时,插入性能会变得更差。InnoDB有一个随机的IO减少机制(称为插入缓冲区),可以防止某些问题,但是它不能在您的唯一索引上工作。每次插入时都必须检查(hashcode,active)的索引,确保没有插入重复的条目。如果哈希代码不“跟随”主键,则此检查可能是随机IO。 您有可能更改模式吗? 你最好的选择是: (A)在批量插入之前,将hashcode设置为顺序的,或者按hashcode排序(这本身会有所帮助,因为随机读取会减少)。 (B)使(hashcode,active)成为主键,并按排序顺序插入数据。我猜您的应用程序可能是通过哈希代码读取的——而且主键查找速度更快。 |
![]() |
4
1
您没有提到您的工作负载是什么样子的,但是如果没有太多的读取或者您有足够的主内存,另一个选项是使用MySQL的写优化后端,而不是InnoDB。Tokutek声称,随着数据集的增长,插入速度提高了18倍,性能曲线更平坦。 TokTykcom |
![]() |
5
0
我会附和@markr关于减少索引的评论。另一件你应该注意的事情是增加你的InnoDB日志文件的大小。它会增加崩溃恢复时间,但会有所帮助。请注意,在重新启动服务器之前需要删除旧文件。 一般InnoDB调优提示: http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
你也应该知道
|
![]() |
6
0
从增加
以及
|
![]() |
hello_programmers · Mysql从其他表输出一列 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |
![]() |
Popo · Sql查询:返回数据库中不可用的where条件 1 年前 |
|
Hamdan Nuramdani · 对账单中一周内不同表中的数据求和 1 年前 |
|
Kugelfisch · 用php为数据库加密数据 1 年前 |