每天在生产中出现几次“在超时时间内未收到cassandra的响应”错误。 在Cassandra端,CPU使用率,内存使用率和其他指标很少。还启用了查询跟踪。 对于一些耗时大于300毫秒(基于应用程序指标)的查询,我看到会话持续时间(system_traces.sessions.duration)小于50毫秒。我发现这两个指标之间存在巨大差异(请检查以下内容)。
客户端请求ID(特定于应用程序)-客户端总查询执行时间-system_traces.sessions.duration(cassandra结束)
bmevunr0ubtt05qgvh00-388.277292ms-54ms
Bmf0ok8g4d6se7uejdug-871.868281ms-3ms
Bmf5qbtr3pq8k403vo80-470.003426ms-15ms
Bmf1dnlr3pq8k400dak0- 406.209796ms-9ms
Bmf793gg4d6se7ujmg9g- 406.217591ms-3ms
Bmfcmgog4d6se7umra80- 385.042227ms-30ms
Bmfal0dr3pq8k4072gtg- 325.566124ms-8ms
仅对于少数查询,此执行时间很高。对于99%的情况,等待时间为25毫秒,上述2个指标之间的差异不大。
查询执行延迟:
P99:23毫秒,P95:6毫秒,平均:3.2毫秒,最大:200毫秒至> 2秒[这是有很大差异的地方] 请求速率:每分钟3k
使用cassandra-3.0.15。 应用程序用golang编写。使用gocql与cassandra连接。 客户端超时2秒。
system_traces.sessions.duration是在cassandra实例上用于处理给定查询的确切总时间吗?在那种情况下,我可以假设这两个指标之间的巨大差异是由于网络延迟或应用程序端的某些问题,而不是由于cassandra引起的吗?还是我必须验证卡桑德拉的其他指标?