ClickHouse进阶(二十):clickhouse管理与运维-熔断机制

2023-09-21 08:00:00

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!

 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频


目录

1. 根据时间周期的累计用量熔断

​​​​​​​2. 根据单次查询的用量熔断


在clickhouse中熔断机制是限制资源被过度使用的一种保护机制,当使用的资源数量达到阈值时,正在进行的操作会被自动中断,按照使用资源统计方式不同,熔断机制分为两类。

​​​​​​​1. 根据时间周期的累计用量熔断

这种方式下,系统资源的用量是按照时间周期累计统计,当累计量达到阈值,则直到下个计算周期开始之前,该用户将无法继续进行操作。可以通过users.xml中<quotas>标签来定义资源配额,可配配置项如下:

<quotas>
	<default><!-- 自定义名称 -->
		<interval>
			<duration>3600</duration><!-- 时间周期,单位:秒 -->
			<queries>0</queries>
			<erros>0</erros>
			<result_rows>0</result_rows>
			<read_rows>0</read_rows>
			<execution_time>0</execution_time>
		</interval>
	</default>
</quotas>

以上配置中各项解释如下:

  1. default:表示自定义名称,全局唯一。
  2. duration:表示累积的时间周期,单位是秒。
  3. queries:表示在周期内允许执行的查询次数,0表示不限制。
  4. errors:表示在周期内允许发生异常的次数,0表示不限制。
  5. result_row:表示在周期内允许查询返回的结果行数,0表示不限制。
  6. read_rows:表示在周期内在分布式查询中,允许远端节点读取的数据行数,0表示不限制。
  7. execution_time:表示周期内允许执行的查询时间,单位是秒,0表示不限制。

现在测试资源配额,我们在users.xml中<quotas>标签下新建一组<limit_1>资源配额,配置如下:

<limit_1><!-- 自定义名称 -->
	<interval>
		<duration>3600</duration><!-- 时间周期,单位:秒 -->
		<queries>5</queries>
		<errors>5</errors>
		<result_rows>0</result_rows>
		<read_rows>0</read_rows>
		<execution_time>3600</execution_time>
	</interval>
</limit_1>

以上配置在1小时的周期内只允许5次查询。同时将此组资源配置分配给用户zhangsan:

<zhangsan>
	... ...
	<quota>limit_1</quota>
</zhangsan>

配置完成后,使用zhangsan登录clickhoue,执行如下查询测试:

node1 :) select * from person_info;
注意:以上查询连续执行5次,会报错:
DB::Exception: Quota for user `zhangsan` for 3600s has been exceeded: queries = 6/5. Interval will end at 2021-10-28 17:00:00. Name of quota template: `limit_1`. (QUOTA_EXPIRED)

经过测试熔断机制已经生效。

至此,用户users.xml中的配置附件:https://download.csdn.net/download/qq_32020645/88360215

​​​​​​​2. 根据单次查询的用量熔断

这种情况下,系统资源的用量是按照单词查询统计的,而具体的熔断规则是由许多不同配置项组成,这些配置项需要配置在用户对应的profile角色中,如果某次查询使用的资源用量达到了阈值,则会被中断。例如:

以上例子中配置项“max_memory_usage”限定了单词查询可以使用的内存量,默认情况下规定不能超过10GB,如果一次查询的内存用量超过10G则会报错。需要注意的是,在单词查询的内存用量统计中,clickhouse是以分区为最小单元进行统计,不是以总的数据总量统计,这意味着单次查询的实际内存用量是有可能超过阈值的。

下面例举一些配置的角色中常用的配置项:

1) max_memory_usage

在单个clickhouse服务进程中,运行一次查询限制使用的最大内存量,默认值为10GB。

2) max_memory_usage_for_user

在单个clickhouse服务进程中,以用户为单位进行统计,单个用户在运行查询时限制使用的最大内存量,默认值为0,即不做限制。

3) max_memory_usage_for_all_queries

在单个clickhouse服务进程中,所有运行的查询累计加在一起所限制使用的最大内存量,默认为0,即不做限制。

4) max_partitions_per_insert_block

在单次Insert写入的时候,限制创建的最大分区个数,默认值为100个,如果超出阈值,会出现异常。

5) max_rows_to_group_by

在执行Group By聚合查询时,限制去重后聚合Key的最大个数,默认值为0,即不做限制。当超过阈值时,其处理方式由group_by_overflow_mode参数决定。

6) group_by_overflow_mode

当max_rows_to_group_by熔断规则触发时,group_by_overflow_mode将会提供三种护理方式。

  • throw:抛出异常,默认值。
  • break:立即停止查询,并返回当前数据。
  • any:仅根据当前已存在的聚合key继续完成聚合查询。

7) max_bytes_before_external_group_by

在执行group by聚合查询的时候,限制使用的最大内存量,默认值为0,不做限制,当超过阈值时,聚合查询将会使用本地磁盘。

8) join_use_nulls

当两张表进行join操作时,如果左表中的记录在右表中不存在,那么右表相应字段会返回NULL,如果配置join_use_nulls为1,那么对应字段会返回该字段相应数据类型的默认值,此值默认为0,即在右表找不到对应数据时返回NULL。


更多推荐

ClickHouse与Elasticsearch比较总结

目录背景分布式架构存储架构写入链路设计Elasticsearch再谈Schemaless查询架构计算引擎数据扫描再谈高并发性能测试日志分析场景access_log(数据量197921836)trace_log(数据量569816761)官方Ontime测试集用户画像场景(数据量262933269)二级索引点查场景(数据

分享从零开始学习网络设备配置--任务3.4 利用单臂路由实现部门间网络互访

任务描述某公司的管理员对部门划分了VLAN后,发现两个部门之间无法通信,但有时两个部门的员工需要进行通信,管理员现要通过简单的方法来实现此功能。划分VLAN之后,VLAN之间是不能通信的,使用路由器的单臂路由功能可以解决这个问题。任务要求(1)利用单臂路由实现部门间网络互访,网络拓扑图如图。(2)在交换机SWA上划分V

Canal实现Mysql数据同步至Redis、Elasticsearch

文章目录1.Canal简介1.1MySQL主备复制原理1.2canal工作原理2.开启MySQLBinlog3.安装Canal3.1下载Canal3.2修改配置文件3.3启动和关闭4.SpringCloud集成Canal4.1Canal数据结构![在这里插入图片描述](https://img-blog.csdnimg.

CGI与FastCGI的区别在哪里,FastCGI的应用场景讲解

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。🎉欢迎👍点赞✍评论⭐收藏文章目录1.CGI和FastCGI1.1CGI1.2FastCGI1.3对比2.Fas

MySQL的高级SQL语句

目录一、高级SQL语句1、select查询表中一个或多个字段的数据2、distinct不显示重复的数据记录3、where有条件查询4、and与or且与或5、in显示在某个范围值内的字段的信息6、between显示两个值范围内的数据记录7、orderby对字段进行排序8、groupby对字段进行分组汇总9、having用

【操作系统】聊聊磁盘IO是如何工作的

磁盘机械磁盘主要是由盘片和读写磁头组成。数据存储在盘片的的环状磁道上,读写数据前需要移动磁头,先找到对应的磁道,然后才可以访问数据。如果数据都在同一磁道上,不需要在进行切换磁道,这就是连续IO,可以获得更好的性能。而随机IO性能就比较差。固态磁盘固态磁盘不需要寻找磁道,所以随机IO和连续IO性能都不错。连续IO的性能其

【Linux】自制shell

本期我们利用之前学过的知识,写一个shell命令行程序目录一、初始代码二、使用户输入的ls指令带有颜色分类三、解决cd指令后用户所在路径不变化问题3.1chdir函数四、关于环境变量的问题一、初始代码#include<stdio.h>#include<unistd.h>#include<stdlib.h>#includ

模块化开发_php中使用redis

redis介绍和安装redis数据库,支持数据持久化,常用与分布式锁,支持事务,持久化,非关心型数据库区别:关系型数据库:硬盘,安全,结构简单,易于理解,浪费空间非关系型数据库:内存,断电丢失数据,读写速度快,内存的速度是硬盘的100倍redis:用于缓存压力,提升网站访问速度三种类型:持久化(将数据保存到硬盘中,再开

02. Springboot集成Flyway

目录1、前言2、什么是Flyway?3、为什么要使用Flyway?4、简单示例4.1、创建SpringBoot工程4.2、添加Flyway依赖4.3、Springboot添加Flyway配置4.4、创建执行SQL脚本4.5、启动测试4.6、Flyway版本管理5、SQL脚本文件命名规则6、使用注意事项1、前言在现代应用

kafka介绍

1.kafka概述消息中间件对比特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高(主从)高(主从)非常高(分布式)非常高(分布式)功能特性成熟的产品、较全的文档、各种协议支持好并发能力强、

SkyWalking快速上手(二)——架构剖析1

文章目录介绍架构概述一、Agent组件介绍Agent的配置配置参数详解service_namesample_n_per_3_secsnamespacecollector.backend_serviceAgent的工作原理二、Collector组件什么是Collector组件?Collector组件的配置配置Collec

热文推荐