运行4节点集群cassandra版本2.0.9。最近一个 我们看到所有节点的CPU使用量都出现了大幅增长。
tpstats为我提供了很高的本机传输请求。附上截图 对于3个节点tpstats
我应该从哪里开始调试?
另外,如果从第一张照片中看到负载变高时的读数 写得很低。这是可以理解的大部分 请求丢弃
答案 0 :(得分:2)
如何减轻墓碑?我可能每个月都会从我们的开发团队那里得到这个问题十几次。最简单的方法是不做DELETE,我对此非常认真。否则,您可以通过以更好的方式缓解墓碑的方式对表进行建模。
例如,假设我有一个简单的表来跟踪订单状态。由于订单可以有多种不同的状态(挂起,拣货,发货,收货,退货等等),懒惰的方式是每个订单有一行,并且DELETE或运行就地更新来更改状态(取决于状态是否是您的密钥的一部分)。更好的方法是将其转换为时间序列并通过TTL执行删除。该表看起来像这样:
CREATE TABLE orderStatus (orderid UUID,
updateTime TIMEUUID,
status TEXT,
PRIMARY KEY (ordered, status))
with CLUSTERING ORDER BY (updateTime DESC);
假设我知道我真的只关心订单状态最多30天,所以所有状态upsert都有30天的TTL ......
INSERT INTO orderStatus (orderid,updateTime,status)
VALUES (UUID(),now(),'pending') USING TTL 2592000;
该表将支持orderid
对订单状态的查询,按更新时间降序排序。这样,我可以从该表中选择一个带有LIMIT 1的id,并始终获得最新状态。此外,这些状态将在30天后自动删除。现在,TTLing数据仍然会创建墓碑。但是那些墓碑与新订单(我可能更关心的那些)是分开的,所以我通常不必担心那些墓碑干扰我的查询(因为它们都被分组在我不会的分区中)经常查询。
这是一个例子,但我希望墓碑缓解建模背后的想法是明确的。主要是,我们的想法是对表格进行分区,使逻辑删除与您最常查询的数据分开。
有没有办法监控哪些查询在服务器上运行缓慢?
不,真的没有办法做到这一点。但是,您应该能够向开发人员请求问题键空间/表的所有查询。这应该很简单,因为一个表应该只能支持一个或两个查询。如果您的开发人员构建了一个支持5或6个不同查询的表,那么他们就错了。
当你查看查询时,这些是你应该质疑的一些危险信号: