【发布时间】:2017-10-09 06:02:24
【问题描述】:
使用的数据库:Datastax cassandra 社区 3.0.9 集群:3 个(8 核 64GB AWS),300GB io1,3000iops。 分配的 Java 堆内存 = 8g 写入一致性:Quorum,读取一致性:ONE 复制因子:3
问题:我在服务器上加载了 50,000 个用户,每个用户最初有 1000 条记录,一段时间后,每个用户又添加了 20 条记录。我想获取稍后添加的 20 条附加记录(查询:select * from table where userID='xyz' and timestamp > 123)
CREATE TABLE tbl (
userID text,
timestamp timestamp,
....
PRIMARY KEY (userID, timestamp)
);
除了 50,000 个用户的原始数据之外,我还向 tbl 添加了额外的 200GB 数据。
堆内存使用量在 2-4 GB 范围内,但几乎所有剩余的堆外内存 (56 GB) 都被 cassandra 吃掉了。
从此时开始,如果向表中添加更多数据,则会观察到由于内存不可用而导致读取吞吐量急剧下降。
虽然它符合读取吞吐量 SLA,但似乎不是一个可扩展的解决方案 - (3 x 64 GB) RAM 用于 200 GB 数据。
注意:
- 在负载测试实验中,仅初始 50,000 个用户的记录 正在被取走。
- 行缓存已禁用。
- 它是读取密集型应用程序 - 2000 次读取/秒
堆外内存使用率高的可能原因是什么?
【问题讨论】: