大型MySql表在服务器上加载太多负载

时间:2011-06-20 17:43:45

标签: mysql database database-design indexing nosql

我有一个MySql表,其中包含:

  1. ~2500万行(当前)
  2. 3个索引
  3. 每天,爬虫增加约300万行
  4. 我目前看起来并不太远,但对db的最终估计可以是~CONST * e9行
  5. 目前9.5giga
  6. innodb,插入时正在读取
  7. 数据本身包含一个约100个字符的文本+几个包含元数据的字段。索引是唯一的id,writer名称和writer ID。

    到目前为止,一切顺利,但现在服务器很难处理新数据的插入(每次插入约10秒,增加约3k行)。我正试图找到克服这个问题的方法。我考虑的事情:

    1. 插入时执行索引需要付出努力。也许在插入时不会这样做,并且只有在X插入添加索引之后。
    2. 将数据分区到不同的表格中。
    3. 爬进一个小数据库,每隔X分钟/天,将数据移动到大数据库中。
    4. 转到其他数据库。我对NoSql不太熟悉,会帮我解决这些问题吗?使用它是一项很大的努力吗?
    5. 每个选项都有其子选项和困境,但我认为我应该首先关注一个方向。我应该走哪条路?为什么?我应该想到一条不同的道路吗?

      顺便说一句 - 还有一个选项可以不保留所有数据,只保留我真正显示的部分,但这样就无法在显示数据之前对数据流程进行一些功能性更改。

2 个答案:

答案 0 :(得分:1)

是当前最适合使用的引擎吗? 您是否考虑过http://dev.mysql.com/doc/refman/5.1/en/partitioning-management.html

答案 1 :(得分:1)

如果您每天添加3,000,000行,而3000行需要10秒的交易,那么您每天需要处理1,000笔交易,每天大约需要170分钟。那真的不是那么多。

我想我先试试

  1. 减少INSERT的数量 通过插入更多行来进行事务 每笔交易
  2. 调整服务器
  3. 您可能会发现每个事务插入更多行实际上花费的总时间更少。如果没有,它很容易恢复。如果先将行存放在其他位置,则可以在低负载时运行INSERT事务。

    无论如何调整服务器都是个好主意。有关参考,请参阅Tuning Server Parameters上的MySQL文档。