GaussDB-SQL限流能力

GaussDB-SQL限流能力

可获得性

本特性自505.0.0版本开始引入。

特性简介

在数据库系统中,时常会出现某类SQL执行异常,占用较多系统资源,或者出现某类SQL因异常或业务需求并发激增,影响其他业务执行,甚至整个数据库系统无法响应其他业务请求的情况。为了解决该问题,GaussDB实现了SQL限流的能力,可以从多维度限制某类SQL执行的并发数。

客户价值

当数据库由于某类SQL并发数突增或者长时间执行,导致其他的业务请求无法执行,最终导致数据库无法对外提供服务时,通过本特性能够限制异常SQL的并发数,让正常的业务得到保障,提升系统韧性。

特性描述

本特性可以实现多种规则的SQL限流能力,限制某类SQL或实例的最大并发数,包括:

  1. 根据Unique SQL ID进行限流:在明确某条SQL为慢SQL或者占用资源较高的SQL时,可以通过Unique SQL ID对该SQL进行限流,避免业务大量执行此SQL而影响其他业务;
  2. 根据SQL类型及关键字进行限流:在明确某类SQL请求可能会随业务量增长而增长的时候,使用SQL类型和关键字对此类SQL进行限流;
  3. 由于某些业务高峰是可以预知的,在仅希望在业务高峰时段对SQL请求进行限制的情况下,可以设置SQL限流的生效时间,避免限流规则常驻系统;
  4. 当只希望限流规则作用于业务库,而对系统库的SQL不做控制,可以按不同库的维度进行限流;
  5. 除了对某类SQL进行限流,本特性还提供实例级别的限流能力;
  6. 对于限流规则,提供查询统计的能力,可以查询所有的限流规则,并根据规则列表对限流规则进行管理。此外,还提供查询限流规则限制访问的SQL次数。

特性增强

特性约束

  • 只支持在CN上限流。
  • 对于Unique SQL ID限流,需要设置GUC参数enable_resource_track = on,instr_unique_sql_count > 0。
  • 对于关键字限流,按照并发度排序,并发度越低优先级越高。关键字不区分大小写,支持模糊匹配。
  • 数据库名称区分大小写。删除某个数据库,再创建同名的数据库,会导致所有已录入的针对这个数据库的限流规则失效。
  • 基于资源的实例级最大活跃并发数限流,按照并发度排序,并发度越低优先级越高。当前无论用户设置的和实际的cpu使用率和内存使用率是多少,超过设置的限制并发数都会限流。
  • 对于限流周期结束的规则,会在下次限流规则触发时将is_valid标记为false,后续不再检查。
  • 对于SQL限流次数的统计没有落盘,是数据库从启动到当前的累计次数。
  • 游标、存储过程中的SQL语句不会被限流。
  • 管理员用户执行的SQL语句不会被限流。
  • 限流规则数据库间不共享,创建限流规则时需要连接目标库。如果创建限流规则的CN被剔除并触发全量Build,则会继承全量Build目标CN中的限流规则,因此建议在各个CN上尽量都创建对应的限流规则。
  • CN之间由于Unique SQL ID不同,不共享限流规则,需要用户手动在不同的CN上创建对应的限流规则。

依赖关系

 
posted @ 2024-10-30 09:19  jerrywang1983  阅读(7)  评论(0)    收藏  举报