cassandra 查询超时

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: cassandra count 超时及建议解决方式

背景介绍

在对某个表做count时出现如下错误(在做业务性测试,生产环境请不要简单粗暴做count操作,耗时还可能不准)

Cassandra timeout during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded)

很奇怪,另外一个表应该是跟他相同条数的,都能直接count出来,但是当前表count一直报错,而且数据还差2两条(跟ES里面的数据对比后得知)

问题查找

在网上可以直接查询相关问题,结果也出来了很多。其中我给出几个具有参考性的链接

日志跟踪

在 cassandra system.log 看到了count产生的日志,前面后后观察了很长的日志,结果会出现如下一些情况

Redistributing index summaries


INFO  [ReadStage-18] 2019-07-08 23:02:30,820 NoSpamLogger.java:91 - Maximum memory usage reached (536870912), cannot allocate chunk of 1048576


ggregation query used without partition key

上面是3个有不同于常见日志的信息,下面是常见的日志信息

WARN  [ReadStage-1] 2019-07-10 03:27:07,652 ReadCommand.java:569 - Read 1221 live rows and 1221 tombstone cells for query SELECT * FROM data_repository.crawler_forecast_weather WHERE token(city_code) > -8205240754366621005 AND token(city_code) <= -8009162018439875451 LIMIT 5000 (see tombstone_warn_threshold)
WARN  [ReadStage-9] 2019-07-10 03:27:07,654 ReadCommand.java:569 - Read 1275 live rows and 1275 tombstone cells for query SELECT * FROM data_repository.crawler_forecast_weather WHERE token(city_code) > -4148410870856401753 AND token(city_code) <= -3960705342382018938 LIMIT 5000 (see tombstone_warn_threshold)

可能原因

这个问题曾经以为被定位到问题,但是最终却发现还是无能为力。这里说下历程

第一次以为找到缘由

做count 操作操作时,就跟其他读操作一样,需要将数据加载到缓存中。数据来源包括 SSTables,tombstone标记,这些数据都放在缓存中。

缓存的大小由cassandra.yaml中的 file_cache_size_in_mb设置控制。 默认大小为 512 MB

count出问题这张表是因为有一个字段存了很长的文本内容,count整个表时,将所有数据(完整的每行数据)加载到内存就导致内存不足。

第二次

根据上面的方式解决count超时不久后又发现超时,但这次却是不同之前说的两个表。这次没有再去调配置大小,而是在社区朋友的指导下 跟踪了cpu idle 跟磁盘的 %util

在跟踪的过程中刚好出现 %util 达到 100%, 99% 的情况。然后他认为是磁盘性能造成的超时。但是我跟踪了磁盘负载很高的时间刚好是定时任务在往cassandra里面写数据。那%util高应该是写入造成的,我在定时任务跑完然后再去执行count 也还是超时,所以我不太认同时磁盘性能造成count超时。当然,我们的确实存在磁盘性能,这个后续需要好好调优

最终无果

我之前执行count sql 时一直在 datagrip (一种cassandra的可视化管理)中操作。偶然想去cassandra 终端使用cqlsh执行,结果竟然有意外之喜

在cqlsh 首次执行也是超时,但是后面执行就能成功统计。而在datagrip中统计却一直出现超时错误。那这两个有什么表现不一样么

观察日志发现:在datagrip做操作时,system.log 会输出很多(全是查询的sql语句),而在cqlsh中进行统计时,发现system.log 竟然只有少量的日志输出,甚至没有常见的查询日志,也是异常奇怪。目前找不到更多原因,只能记录存档了。

对于这个问题花费了很多力气,查过缓存不足,tombstone太多,cpu, 硬盘。但最后我更倾向这个操作违反了cassandra的设计,cassandra 是分布式的,记录是分区存储。当在做 聚合查询 时 却没有带where带上分区键限制,那么很可能不能得到你预期的结果。count可以对一个数据量小小的table进行,但是数据量稍微大一点,可能就不能这么用了。

对于其他聚合查询请点击下面链接

建议解决

如果是业务层需要做count统计,需要根据分区键去做count

如果只是观察数据总条数,建议直接在cqlsh上进行统计(不要使用其他工具),当然这个也依然存在超时的问题。所以这里推荐 一个 非常好的统计工具 brianmhess/cassandra-count

这个工具通过使用numSplits参数拆分令牌范围,可以减少每个查询计数的数量并减少超时的可能性。

目前使用下来效果还非常不错

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
消息中间件 SQL Kafka
Flink数据源问题之定时扫描key如何解决
Flink数据源是指Apache Flink用于读取外部系统数据的接口或组件;本合集将探讨Flink数据源的类型、配置方法和最佳实践,以及在使用数据源时可能遇到的错误和解决方案。
|
6月前
|
NoSQL 关系型数据库 MySQL
实时计算 Flink版操作报错之同步MySQL分库分表500张表报连接超时,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
NoSQL 关系型数据库 MySQL
当Redis与MySQL数据一致性校验中Redis数据量小于MySQL时的全量查询处理方法
保持Redis和MySQL之间的数据一致性是一个需要细致规划和持续维护的过程。通过全量数据同步、建立增量更新机制,以及定期执行数据一致性校验,可以有效地管理和维护两者之间的数据一致性。此外,利用现代化的数据同步工具可以进一步提高效率和可靠性。
55 6
|
5月前
|
监控 NoSQL MongoDB
MongoDB中的TTL索引:自动过期数据的深入解析与使用方式
MongoDB中的TTL索引:自动过期数据的深入解析与使用方式
|
5月前
|
NoSQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之如何确保多并发sink同时更新Redis值时,数据能按事件时间有序地更新并且保持一致性
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
SQL 消息中间件 Kafka
Flink sql 问题之主动使数据延时一段时间如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
343 2
|
6月前
|
SQL 消息中间件 关系型数据库
Flink查询问题之每秒入库到mysql数量很少如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
6月前
|
SQL NoSQL Redis
Flink数据问题之数据写入Redis失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
白话Elasticsearch66-针对集群重启时的shard恢复耗时过长问题定制的重要参数
白话Elasticsearch66-针对集群重启时的shard恢复耗时过长问题定制的重要参数
79 0
下一篇
无影云桌面