监控管理大查询
本文介绍如何监控和管理 StarRocks 集群中的大查询。
大查询包括扫描大量数据或占用过多 CPU 和内存资源的查询。如果不施加限制,大查询很容易耗尽集群资源并导致系统过载。为了解决这个问题,StarRocks 提供了一系列措施来监控和管理大查询,防止大查询独占集群资源。
处理 StarRocks 大查询的总体思路如下:
- 通过资源组和查询队列对大查询设置自动预防措施。
- 实时监控大查询,并及时终止绕过预防措施的大查询。
- 分析审计日志和大查询日志,研究大查询的模式,优化先前设置的预防机制参数。
该功能从 3.0 版本开始支持。
设置大查询防御机制
StarRocks 提供了两种预防工具处理大查询——资源组和查询队列。您可以使用资源组来过滤并熔断大查询。而查询队列可以帮助您在系统达到并发阈值或资源限制时对新查询请求进行排队,从而防止系统过载。
通过资源组滤除大查询
资源组可以自动识别和终止大查询。在创建资源组时,您可以指定单个查询可以使用的 CPU 时间、内存使用量或 Scan 行数的上限。在命中资源组的所有查询中,任何要求更多资源的查询都将被拒绝执行并返回错误。有关资源组的详细信息以及使用说明,请参阅 资源隔离。
在创建资源组之前,执行以下语句启用资源组功能依赖的 Pipeline 引擎功能:
SET GLOBAL enable_pipeline_engine = true;
以下示例创建了一个名为 bigQuery
的资源组,将 CPU 时间上限限制为 100
秒,扫描行数上限为 100000
,内存使用上限为 1073741824
字节(1 GB):
CREATE RESOURCE GROUP bigQuery
TO
(db='sr_hub')
WITH (
'cpu_core_limit' = '10',
'mem_limit' = '20%',
'big_query_cpu_second_limit' = '100',
'big_query_scan_rows_limit' = '100000',
'big_query_mem_limit' = '1073741824'
);
如果一个查询所需的资源超过了以上任何一个限制,StarRocks 将不会执行该查询并返回错误。以下示例显示了当查询 Scan 行数超过限制时返回的错误消息:
ERROR 1064 (HY000): exceed big query scan_rows limit: current is 4 but limit is 1
如果这是您首次设置资源组,我们建议您设置相对较高的限制,以免阻碍常规查询。在更好地了解集群中大查询的模式之后,您可以进一步优化这些限制。
通过查询队列缓解系统过载
查询队列用于在集群资源占用超过预定阈值时防止系统过载情况恶化。您可以为最大并发数、内存使用率和 CPU 使用率设置阈值。当系统资源占用达到其中任何一个阈值时,StarRocks 会自动对新增查询进行排队。待处理查询在队列中等待执行,或在达到资源阈值时被取消。有关详细信息,请参阅