伙计们,我是一个社交游戏的开发者,游戏已经有 70 万玩家,每天大约有 7 千新玩家注册,大约 5 千玩家不断在线。
数据库服务器运行在一个非常强大的硬件上:16 核 CPU、24 Gb RAM、RAID-10,BBU 建立在 4 个 SAS 磁盘上。我正在使用 Percona 服务器(已修补 MySQL-5.1),目前 InnoDB 缓冲池为 18Gb(尽管根据 innotop 只有几个可用的可用缓冲区)。数据库服务器运行良好(2k QPS,iostat %util 为 10-15%,vmstat 中几乎总是 0 个进程处于“b”状态,loadavg 为 5-6)。但是有时(每隔几分钟)我会收到大约 10-100 个慢查询(每个可能持续大约 5-6 秒)。
MySQL 数据库中有一张 InnoDB 大表,占用空间最多。它有大约 3 亿行,大小约为 20 Gb。当然,这个表正在逐渐增长......我开始担心它会对数据库的整体性能产生负面影响。在最近的将来,我将不得不对此做点什么,但我不确定到底是什么。
基本上问题归结为是分片还是简单地添加更多 RAM。当然,后者更简单。看起来我最多可以添加 256 Gb RAM。但问题是我是否应该投入更多时间来实施分片,因为它更具可扩展性?