在 Cassandra 中捕获慢速查询

Capture slow query in Cassandra

我正在处理 Cassandra 生产环境中的一些超时问题 并且我在 Cassandra.yaml 中将 slow_query_log_timeout_in_ms 设置为 5000 毫秒以捕获 debug.log

中的任何慢速查询

以下查询作为慢速查询多次被捕获,有趣的是应用程序中没有任何类似的查询,所以我想知道也许 Cassandra 将慢速查询的语法转换为某种特定格式!

SELECT * FROM mainschema.events WHERE id = b7450619-d2b2-8ba6-0c48-a9bffeef79c0 AND token(user_id, id) > -341911299102519303 AND token(user_id, id) <= -326035898540169815 LIMIT 100>, time 6802 msec - slow timeout 500 msec/cross-node

所以我的问题是如何在 Cassandra 中捕获慢查询的实际文本?

检测花费时间超过 slow_query_log_timeout_in_ms 的查询的监视线程聚合查询,并且仅在 DEBUG 级别每 5 秒记录一次。

作为聚合逻辑的一部分,会发生一些转换,因此如果在 5 秒内多次执行查询 window,那么它只会被记录一次并进行计数。例如:

DEBUG [ScheduledTasks:1] 2020-06-06 20:35:50,211 MonitoringTask.java:173 - \
    1 operations were slow in the last 4998 msecs:
<SELECT * FROM community.users WHERE user = "jack" LIMIT 5000>, \
    was slow 2 times: avg/min/max 330/825/835 msec - slow timeout 500 msec

如果您有兴趣,我已经在 post 中对此进行了更详细的解释 -- https://community.datastax.com/questions/7835/

话虽如此,我认为您的情况不会发生这种情况。我怀疑该应用程序正在进行范围扫描,但您可能没有意识到这一点。例如,应用程序可以使用 ALLOW FILTERINGmainschema.events 读取数据。这是我的推测,但当您查看针对 events table 的查询的应用程序代码时,它应该会为您提供线索。干杯!