Cassandra调试日志分析
Cassandra debug log analysis
我有一个 cassandra debug.log。它有很多 SELECT * 没有被任何应用程序触发的查询。应用程序请求 SELECT 查询中的特定字段,而且这些查询似乎有一个 LIMIT 5000
子句,我很确定在任何应用程序中都不存在。这些查询是由 cassandra 内部触发的吗?调试日志中充满了此类查询。该应用程序使用 gocql 驱动程序连接到 cassandra。
<SELECT * FROM table_name WHERE id = 0 LIMIT 5000>, was slow 45 times: avg/min/max 4969/4925/4996 msec - slow timeout 500 msec/cross-node
DEBUG [ScheduledTasks:1] 2021-01-14 18:02:33,271 MonitoringTask.java:152 - 160 operations timed out in the last 5004 msecs:
<SELECT * FROM table_name WHERE id = abcd LIMIT 5000>, total time 7038 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = efgh LIMIT 5000>, total time 5793 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = hijk LIMIT 5000>, total time 5289 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = lmnop LIMIT 5000>, total time 5826 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = qrst LIMIT 5000>, total time 6006 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = uvwx LIMIT 5000>, total time 5905 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = yzabc LIMIT 5000>, total time 5217 msec, timeout 5000 msec/cross-node
.
..
....
.....
... (110 were dropped)
所有这些查询都来自您的应用程序。它们不是 Cassandra 完成的。
来自 MonitoringTask
的消息由 Cassandra 3.10+ 中称为慢查询日志记录的功能记录(CASSANDRA-12403). I've previously explained it in this post -- https://community.datastax.com/questions/7835/。
慢速查询日志记录将花费时间超过 slow_query_log_timeout_in_ms
(默认为 500 毫秒)的查询聚合到 5 秒“windows”组中。作为聚合的一部分,列不会在日志记录中枚举,而是用星号 (*
) 代替,因此可以轻松对它们进行分组。
此外,驱动程序启用了分页功能。当您的应用程序未设置页面大小时,驱动程序默认页面大小为 5000 (LIMIT 5000
)。这是记录在您发布的慢速查询消息中的限制。干杯!
我有一个 cassandra debug.log。它有很多 SELECT * 没有被任何应用程序触发的查询。应用程序请求 SELECT 查询中的特定字段,而且这些查询似乎有一个 LIMIT 5000
子句,我很确定在任何应用程序中都不存在。这些查询是由 cassandra 内部触发的吗?调试日志中充满了此类查询。该应用程序使用 gocql 驱动程序连接到 cassandra。
<SELECT * FROM table_name WHERE id = 0 LIMIT 5000>, was slow 45 times: avg/min/max 4969/4925/4996 msec - slow timeout 500 msec/cross-node
DEBUG [ScheduledTasks:1] 2021-01-14 18:02:33,271 MonitoringTask.java:152 - 160 operations timed out in the last 5004 msecs:
<SELECT * FROM table_name WHERE id = abcd LIMIT 5000>, total time 7038 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = efgh LIMIT 5000>, total time 5793 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = hijk LIMIT 5000>, total time 5289 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = lmnop LIMIT 5000>, total time 5826 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = qrst LIMIT 5000>, total time 6006 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = uvwx LIMIT 5000>, total time 5905 msec, timeout 5000 msec/cross-node
<SELECT * FROM table_name WHERE id = yzabc LIMIT 5000>, total time 5217 msec, timeout 5000 msec/cross-node
.
..
....
.....
... (110 were dropped)
所有这些查询都来自您的应用程序。它们不是 Cassandra 完成的。
来自 MonitoringTask
的消息由 Cassandra 3.10+ 中称为慢查询日志记录的功能记录(CASSANDRA-12403). I've previously explained it in this post -- https://community.datastax.com/questions/7835/。
慢速查询日志记录将花费时间超过 slow_query_log_timeout_in_ms
(默认为 500 毫秒)的查询聚合到 5 秒“windows”组中。作为聚合的一部分,列不会在日志记录中枚举,而是用星号 (*
) 代替,因此可以轻松对它们进行分组。
此外,驱动程序启用了分页功能。当您的应用程序未设置页面大小时,驱动程序默认页面大小为 5000 (LIMIT 5000
)。这是记录在您发布的慢速查询消息中的限制。干杯!