首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL InnoDB大表:分片还是添加更多内存?

MySQL InnoDB大表:分片还是添加更多内存?
EN

Stack Overflow用户
提问于 2011-03-25 04:00:49
回答 3查看 1.5K关注 0票数 6

朋友们,我是一个社交游戏的开发者,游戏中已经有70万玩家,每天大约有7000名新玩家注册,大约5000名玩家持续在线。

DB服务器运行在一个非常强大的硬件上: 16核CPU、24 Gb RAM、RAID-10以及构建在4个SAS磁盘上的BBU。我使用的是Percona服务器(打了补丁的MySQL-5.1),目前的InnoDB缓冲池是18‘m(尽管根据innotop的说法,只有几个可用的空闲缓冲区)。DB服务器的性能非常好(2kQPS,iostat %util为10-15%,vmstat中几乎总是0个处于"b“状态的进程,loadavg为5-6)。然而,有时(每隔几分钟)我会收到大约10-100个缓慢的查询(每个查询可能持续大约5-6秒)。

MySQL数据库中有一个很大的InnoDB表,占用的空间最大。它有大约3亿行,它的大小大约是20 Gb。当然,这个表正在逐渐增长...我开始担心它会以一种负面的方式影响数据库的整体性能。在不久的将来,我将不得不对此做些什么,但我不确定具体是什么。

基本上,问题可以归结为是分片还是简单地添加更多RAM。当然,后者更简单。看起来我可以加到256 Gb的内存。但问题是,我是否应该投入更多的时间来实现分片,因为它更具可扩展性?

EN

回答 3

Stack Overflow用户

发布于 2011-03-27 07:36:26

如果您需要所有的300m+行,分片似乎是合理的。现在改变可能是一件痛苦的事情,但是当你的表不断增长的时候,总有一天,再多的内存也解决不了你的问题。对于如此海量的数据,可能值得使用诸如couch db之类的东西,因为您可以存储数据文档而不是行,即1个文档可以包含单个用户的所有记录。

票数 1
EN

Stack Overflow用户

发布于 2011-03-27 20:18:16

在我看来,您的主数据库表可以使用一些规范化。您的所有信息是否都属于这一个表,或者您可以将其拆分到更小的表中?现在,规范化可能会带来很小的性能影响,但随着表的增长,这将被访问大型单块表所涉及的额外处理所淹没。

票数 0
EN

Stack Overflow用户

发布于 2011-03-29 02:36:27

代码语言:javascript
复制
I'm getting about 10-100 slow queries(where each may last about 5-6 seconds).

引用一条评论:Database is properly normalized. The database has many tables, one of them is really huge and has nothing to do with normalization.当我读到这篇文章时,我会说这与你的问题有关。与您的硬件无关..一般的公司都会梦想你拥有一种服务器!

如果你写了糟糕的查询,不管你的表有多好,它就会变得很慢。也许你得到了一些关于this的东西,这几乎是一个类似的问题和答案(数据库很慢,诸如此类)。

也想过存档一些东西吗?例如,在这3亿人中,它从ID 1开始,那么这个ID还在使用吗?如果不是,为什么不将其存档到其他数据库或表中(我建议使用数据库)。我也相信不是每天都有70万用户登录(如果你得到尊重的话!)但我不相信)。

你还说“这个表包含玩家特定的项目”是什么类型的特定项目?

另一个问题,你能发布一些你的“慢”查询吗?

你还考虑过一些数据的缓存系统吗?可能每个月都会改变一次,比如装备和其他游戏的东西?

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

https://stackoverflow.com/questions/5424819

复制
相关文章

相似问题

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